Amikor egy FreeBSD rendszert akarunk betárcsázós szolgáltatásokhoz beállítani, akkor az nagyon hasonlít a terminálok csatlakoztatásához, azzal a eltéréssel, hogy ilyenkor a terminálok helyett modemekkel kell dolgoznunk.
A külső modemek sokkal kényelmesebbnek tűnnek betárcsázás szempontjából, mivel az ilyenek gyakran a statikus memóriájukban tárolt paraméterek révén tulajdonképpen félig előre be vannak állítva és sok esetben a fontosabb RS-232 jeleket külön lámpácskákkal mutatják. A villogó lámpák könnyen elkápráztatják a laikusokat, de emellett igen fontosak a modem működőképességének megállapításában is.
Ezzel szemben a belső modemeken nem található statikus memória, ezért a paramétereik csak DIP kapcsolókkal módosíthatóak. Még ha egy belső modemem látunk is lámpákat, akkor sem könnyű figyelni rájuk, mert a gépünk burkolata úgyis eltakarja ezeket.
Ha külső modemet használunk, akkor mindenképpen szükségünk lesz hozzá még egy megfelelő kábelre is. Egy szabványos RS-232-es soros kábel erre tökéletesen megfelel egészen addig, amíg a normál jeleket így kötötték be rajta:
Táblázat 26-4. A jelek neve
Rövidítés | Elnevezés |
---|---|
RD | Received Data (fogadott adat) |
TD | Transmitted Data (küldött adat) |
DTR | Data Terminal Ready (adatterminál kész) |
DSR | Data Set Ready (adatbeállítás kész) |
DCD | Data Carrier Detect (vonal észlése -- az RS-232 fogadást érzékelő vonala) |
SG | Signal Ground (föld) |
RTS | Request to Send (küldés kérése) |
CTS | Clear to Send (küldés engedélyezése) |
A FreeBSD-nek 2400 bps felett a forgalom irányításához az RTS és CTS jelekre van szüksége. A CD jellel állapítja meg, hogy a hívás létrejött vagy a bontották a vonalat, és a DTR jel hozza alapállapotba a modemet a munkamenet befejezése után. Egyes kábelekben nem mindegyik jelet vezették át, így ha például gondjaink akadnak a bejelentkező képernyővel amikor a vonalat bontjuk, akkor érdemes átnéznünk a kábelt.
A többi UNIX®-szerű operációs rendszerhez hasonlóan a FreeBSD is hardveres jelek segítségével igyekszik kideríteni, hogy a hívás megvalósult vagy bontották a vonalat, valamint a hívás befejezése után így bontja a vonalat és állítja vissza a modemet. A FreeBSD igyekszik elkerülni a parancsok küldését a modem felé, vagy a modem állapotának folyamatos ellenőrzését. Ha már van némi tapasztalatunk a PC-alapú BBS-ek modemes elérését illetően, akkor valószínűleg értjük ezek okait.
A FreeBSD ismeri az NS8250-, NS16450-, NS16550- és NS16550A alapú EIA RS-232C (CCITT V.24) szabványú kommunikációs felületeket. A 8250-es és a 16450-es eszközök egykarakteres pufferrel rendelkeznek. A 16550-es eszközök 16 karakteres puffert tartalmaznak, amellyel jobb teljesítmény érhető el. (A sima 16550-esben levő hibák miatt azonban ez a 16 karakteres puffer nem használható ki rendesen, ezért lehetőleg a 16550A verziót használjuk). Mivel az operációs rendszer részéről az egykarakteres eszközök jóval több törődést igényelnek, mint a 16 karakteres eszközök, ezért inkább a 16550A alapú soros felületi kártyákat ajánljuk. Amikor a rendszer egyszerre több soros portot is kezel, vagy erős terhelés alatt áll, akkor a 16550A alapú kártyákról általában az is elmondható, hogy kisebb hibával dolgoznak.
Ahogy arról már a terminálok esetében szó esett, az init az összes betárcsázós kapcsolathoz tartozó soros porthoz elindít egy getty programot. Például, ha a modemet a /dev/ttyd0 eszközre kapcsoltuk, akkor a ps ax parancs kimenetében ezt láthatjuk:
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0
Amikor egy felhasználó felhívja a modemet és az kapcsolódik, akkor a modem egy CD (Carrier Detect) jelet küld. A rendszermag ekkor tudomásul veszi a vonal észlelését és a getty segítségével megindítja a kommunikációt. A getty egy login: szöveget küld át a vonalhoz megadott sebességgel. A getty elkezdi figyelni, hogy a értelmes karakterek érkeznek-e vissza, és egy átlagos konfigurációban, ha ezt szemétnek találja (mert például a modem nem a getty számára beállított sebességgel csatlakozott), akkor megpróbálja egészen addig hangolni a vonal sebességét, amíg feldolgozásra alkalmas karaktereket nem kap.
Miután a felhasználó megadta a felhasználói nevét, a getty elindítja a /usr/bin/login programot, amely befejezi a beléptetést a felhasználó jelszavának bekérésével és annak elfogadása esetén a hozzátartozó parancsértelmező elindításával.
FreeBSD rendszerünkben a betárcsázós kapcsolatok engedélyezéséhez az /etc könyvtárban három állomány módosítására lesz szükségünk. Közülük az első, az /etc/gettytab a /usr/libexec/getty démon beállításait tartalmazza. A második, az /etc/ttys az /sbin/init számára mondja meg, hogy melyik tty eszközökhöz tartozik getty. Végezetül a portok inicializálásához kötődő beállításokat az /etc/rc.d/serial szkriptben kell megadnunk.
Két “iskola” jött létre aszerint, hogy UNIX alatt hogyan használják a betárcsázós modemeket. Az egyik csoport úgy szereti beállítani a modemeit és rendszerit, hogy a távoli felhasználó által választott sebességtől függetlenül a számítógép és a modem közti RS-232 felület egy fix sebességen fut. Ennek a beállításnak megvan az az előnye, hogy a távoli felhasználó ilyenkor szinte azonnal megkapja a bejelentkező képernyőt. A hátránya viszont, hogy ebben az esetben a rendszer nem ismeri a felhasználó valódi adatátviteli sebességét, ezért az olyan teljes képernyős alkalmazások, mint például az Emacs, nem lesznek képesek a lassabb kapcsolatokhoz szabni a megjelenítésüket.
A másik csoport a modemek RS-232-es felületét a távoli felhasználó kapcsolódási sebessége szerint állítja be. Így például egy V.32bis (14,4 Kbps) kapcsolat esetén a modemhez tartozó RS-232 felület 19,2 Kbps-on fog menni, miközben a 2400 bps sebességű kapcsolatokhoz egy vele azonos sebességű RS-232-es felület fog tartozni. Mivel a getty nem képes kommunikálni a modemek által lejelentett csatlakozási sebességen, ezért úgy próbálja azt megállapítani, hogy elküldi a login: szöveget az alap sebességgel, majd figyeli a válaszul érkező karaktereket. Ha a felhasználó ilyenkor szemetet lát, akkor feltételezik, hogy addig fogja nyomkodni az Enter billentyűt, amíg valami értelmes szöveget meg nem lát. Amikor az adatátviteli sebesség eltér, akkor a getty ebből csupán csak annyit vesz észre, hogy a felhasználó “szemetet” küld, ezért egy újabb sebességgel megpróbálja megint elküldeni a login: szöveget. Hivatalosan ez a folyamat ismétlődik orrvérzésig, de általában csak egy-két billentyűt kell leütni a megfelelő beállításokhoz. Nyilvánvaló, hogy ilyenkor a bejelentkezés messze nem olyan zavartalan, mint a “rögzített sebességű” esetben, de így a lassabb kapcsolattal rendelkező felhasználók is jobb használatóságot kapnak a teljes képernyős programokkal.
Ebben a szakaszban egy valamennyire kiegyensúlyozott beállítást igyekszünk bemutatni, de részben elfogunk hajlani abban az irányba, amikor a modem a kapcsolat sebességét követi.
A /etc/gettytab egy termcap(5)-szerű állomány, amely a getty(8) beállításait tartalmazza. A gettytab(5) man oldalon olvashatunk az állomány pontos felépítéséről és benne felsorolt beállításokról.
Ha a modem kommunikációs sebességét rögzíteni akarjuk, akkor ehhez többnyire semmit sem kell megváltoztatnunk az /etc/gettytab állományban.
Az /etc/gettytab állományban létre kell hoznunk egy olyan bejegyzést, amelyen keresztül a getty tudni fogja, hogy milyen sebességeken akarjuk használni a modemet. Ha egy 2400 bps sebességű modemünk van, akkor hozzá a már meglevő D2400-as bejegyzést kell használnunk.
# # A gyors betárcsázós terminálokhoz íme egy 2400/1200/300-as váltás # (bárhonnan kezdődhet): # D2400|d2400|Fast-Dial-2400:\ :nx=D1200:tc=2400-baud: 3|D1200|Fast-Dial-1200:\ :nx=D300:tc=1200-baud: 5|D300|Fast-Dial-300:\ :nx=D2400:tc=300-baud:
Ha ennél gyorsabb modemünk van, akkor már mindenképpen fel kell vennünk hozzá egy új bejegyzést az /etc/gettytab állományba. Ezzel a beállítással egy 14,4 Kbps sebességű modemet tudunk legfeljebb 19,2 Kbps-en használni:
# # Kiegészítések egy V.32bis modemhez: # um|V300|High Speed Modem at 300,8-bit:\ :nx=V19200:tc=std.300: un|V1200|High Speed Modem at 1200,8-bit:\ :nx=V300:tc=std.1200: uo|V2400|High Speed Modem at 2400,8-bit:\ :nx=V1200:tc=std.2400: up|V9600|High Speed Modem at 9600,8-bit:\ :nx=V2400:tc=std.9600: uq|V19200|High Speed Modem at 19200,8-bit:\ :nx=V9600:tc=std.19200:
Ennek eredménye egy 8 bites, paritásmentes kapcsolat lesz.
A fenti példában a kommunikációt 19,2 Kbps-en (V.32bis kapcsolaton) kezdjük, majd utána haladunk végig a 9600 bps (V.32), 2400 , 1200 bps és 300 bps sebességű kapcsolatokon, majd vissza ismét a 19,2 Kbps-re. Az adatátviteli sebesség ilyen típusú váltogatását az nx= (“next table”, azaz “következő táblázat”) tulajdonság segítségével valósítják meg. Minden sorban látható még egy tc= (“table continuation”, vagyis “a táblázat folytatása”) bejegyzés is, amivel az adott adatátviteli sebesség “szabványos” beállításait adjuk meg.
Ha egy 28,8 Kbps sebességű modemünk van és/vagy egy 14,4 Kbps sebességű modemen akarunk tömörítést használni, akkor a 19,2 Kbps-nél nagyobb kommunikációs sebességet kell használnunk. Íme egy olyan gettytab. ami 57,6 Kbps-ről indít:
# # A V.32bis vagy V.34 modemekhez kiegészítés, # 57,6 Kbps-ről indulunk: # vm|VH300|Very High Speed Modem at 300,8-bit:\ :nx=VH57600:tc=std.300: vn|VH1200|Very High Speed Modem at 1200,8-bit:\ :nx=VH300:tc=std.1200: vo|VH2400|Very High Speed Modem at 2400,8-bit:\ :nx=VH1200:tc=std.2400: vp|VH9600|Very High Speed Modem at 9600,8-bit:\ :nx=VH2400:tc=std.9600: vq|VH57600|Very High Speed Modem at 57600,8-bit:\ :nx=VH9600:tc=std.57600:
Ha lassú a processzorunk, vagy a rendszerünk túlságosan terhelt és nincs 16550A típusú soros portunk, akkor 57,6 Kbps-en “sio” “silo” hibák keletkezhetnek.
Az /etc/ttys állomány beállításáról már a 26-1 Példa adott képet. Ez a modemek esetében sem tér el különösebben, habár a getty programnak más termináltípust és -beállításokat kell átadnunk. Akár rögzített, akár alkalmazkodó sebességet akarunk beállítani, ennek általános alakja az alábbi:
ttyd0 "/usr/libexec/getty xxx" dialup on
A sorban látható első elem a megfelelő speciális eszköz neve -- jelen esetben ez a ttyd0, amely a /dev/ttyd0 eszközre vonatkozik és ezt fogja a getty figyelni. A második elem, vagyis a "/usr/libexec/getty xxx" (ahol a xxx helyére kell beírni a megfelelő gettytab állománybeli bejegyzést nevét) lesz az a parancs, amelyet az init meghív. A harmadik elem, a dialup a terminálok alapértelmezett típusa. A negyedik paraméter, az on jelzi az init programnak, hogy aktiválja a vonalat. A sorban megjelenhetne továbbá még egy ötödik paraméter is, a secure, de ezt csak olyan terminálok esetében érdemes megadni, amelyek fizikailag megbízhatóak (például a rendszerkonzol).
Az alapértelmezett termináltípus (vagyis a fenti példában a dialup) a helyi beállításoktól függ. A betárcsázós vonalak esetében hagyományosan a dialup a terminál alapértelmezett típusa, amit aztán a felhasználók a bejelentkezéskor lefutó szkriptjeiken keresztül a automatikusan át tudnak állítani a nekik megfelelő terminálra. A szerző saját rendszerében azonban inkább a vt102 termináltípust volt érdemes megadni alapértelmezettként, mivel ott a felhasználók csak ilyen típusú terminálokat használnak.
Miután az /etc/ttys állományban elvégeztük a szükséges módosításokat, egy HUP jelzéssel figyelmeztessük az init programot az újbóli beolvasására. Ehhez a következő parancs ajánlott:
# kill -HUP 1
Ha még csak állítjuk be először a rendszerünket, akkor az init figyelmeztetése előtt legyünk türelmesek, és várjuk meg, amíg a modemek befejezik az inicializálást és kapcsolódnak a vonalakra.
A rögzített sebesség beállításánál a ttys állományban a getty paramétereként egy szintén rögzített sebességű bejegyzést kell megadnunk. Például az olyan modemeknél, ahol a sebességet 19,2 Kbps-re rögzítjük, a ttys így fog kinézni:
ttyd0 "/usr/libexec/getty std.19200" dialup on
Amennyiben a modemünk nem ezen a sebességen üzemelne, akkor az std.sebesség paramétert használjuk az std.19200 helyett. Előtte azonban ne felejtsük el ellenőrizni, hogy a megadott típus szerepel-e az /etc/gettytab állományban.
Az alkalmazkodó sebességű beállításnál a ttys állományban az /etc/gettytab állományból a megfelelő “auto-baud” (sic) kell megadnunk. Például, ha modemünk kezdősebessége 19,2 Kbps (és a gettytab ehhez tartalmaz egy V19200 nevű bejegyzést), akkor a ttys így fog kinézni:
ttyd0 "/usr/libexec/getty V19200" dialup on
A gyorsabb, mint például a V.32, V.32bis és V.34 modemeknél meg kell adnunk a hardveres forgalomirányítás (RTS/CTS) használatát is. Az /etc/rc.d/serial állományban tudjuk megadni a FreeBSD rendszermagban a vonal használatához szükséges vezérlési beállításokra vonatkozó stty parancsokat.
Például állítsuk be az 1-es
sorszámú (vagyis a
COM2) soros porton a
crtscts
termios
beállítást a behíváshoz
és a híváshoz használt
eszközök inicializálásakor. Ehhez a
következő sorokat kell felvennünk az
/etc/rc.d/serial
állományba:
# A soros portok kezdeti beállításai: stty -f /dev/ttyd1.init crtscts stty -f /dev/cuad1.init crtscts
Ha olyan modemeink vannak, amelyek paramétereit egy statikus memóriában tárolták le, akkor ezek beállításához egy terminálprogramot kell használnunk (amilyen például MS-DOS® alatt a Telix vagy FreeBSD alatt a tip). A modemet a getty programnak megadott kezdeti sebességen csatlakoztassuk és az alábbi elvárások alapján állítsuk be a paramétereit:
Kapcsolódáskor CD jelzése.
Működéskor DTR jelzése. A DTR küldésekor bontsa a vonalat és hozza alapállapotba a modemet.
CTS vezérlésű kimenő adatforgalom.
A XON/XOFF forgalomvezérlés tiltása.
RTS vezérlésű bejövő adatforgalom.
Csendes mód (ne adjon értesítést az eredményekről).
A parancsokat ne írja vissza.
A modemhez tartozó dokumentációban kell utánajárnunk, hogy milyen parancsok és/vagy DIP kapcsolók átállításával lehet mindezeket elérni.
Például, ha a fenti paramétereket egy U.S. Robotics® Sportster® 14400-as külső modem esetében a következő neki kiküldött paranccsal lehet beállítani:
ATZ AT&C1&D2&H1&I0&R2&W
Ilyenkor még akár más egyéb paramétereket is beállíthatunk, például a V.42bis és/vagy az MNP5 tömörítést.
Az U.S. Robotics Sportster 14400 külső modemen ezenkívül még találunk néhány DIP kapcsolót is. Az ilyen modemek esetében például ezeket a beállításokat tudjuk használni:
1. kapcsoló: FEL -- normális DTR
2. kapcsoló: N/A (verbális/numerikus eredményjelző kódok)
3. kapcsoló: FEL -- az eredményjelző kódok küldésének tiltása
4. kapcsoló: LE -- nem küldi vissza a parancsokat
5. kapcsoló: FEL -- automatikus válasz
6. kapcsoló: FEL -- normális Carrier Detect
7. kapcsoló: FEL -- a memóriában tárolt alapértelmezések betöltése
8. kapcsoló: N/A (intelligens/buta mód)
A modemeknél az eredményjelző kódok kikapcsolása/letiltása ezért fontos, mert így el tudunk kerülni az olyan problémákat, hogy a getty tévesen egy login: promptot küld a parancs módban levő modemnek, amikor az visszaküldi a parancsot és az eredmény kódját. Ennek eredménye egy hosszúra nyúló, zavaros társalgás lesz a getty és a modem között.
A rögzített sebességű konfiguráció használata esetén úgy kell beállítanunk a modemet, hogy a konkrét adatátviteli sebsségtől függetlenül is egy állandó sebességű kapcsolat álljon fenn a számítógép és a modem között. A U.S. Robotics Sportster 14400-as külső modem esetében a most következő parancsokkal tudjuk rögzíteni a kapcsolat sebességét:
ATZ AT&B1&W
Amikor változó sebességű konfigurációval dolgozunk, akkor a modemet úgy kell beállítani, hogy a bejövő hívásnak megfelelő adatátviteli sebességre váltson a soros portján. A U.S. Robotics Sportster 14400-as külső modem esetében az alábbi parancsokkal rögzítjük a modemnek küldött hibamentesített parancsok sebességét, miközben engedélyezzük, hogy a soros port sebessége változhasson a nem hibamentesített kapcsolatoknál:
ATZ AT&B2&W
A legtöbb nagysebességű modem biztosít valamilyen lehetőséget arra, hogy emberi formában is le tudjuk kérdezni a belső működésének paramétereit. A U.S. Robotics Sportster 14400-as külső modem esetében az ATI5 parancs a statikus memóriában tárolt beállításokat mutatja meg. A modem valós működési paramétereit (amit ugyebár befolyásolnak a DIP kapcsolók állásai is) viszont az ATZ majd ATI4 parancsok küldésével tudjuk lekérni.
Ha azonban másmilyen márkájú modemünk lenne, akkor a modem leírásában próbáljunk tájékozódni arról, miként tudjuk a modem beállításait ellenőrizni.
Ebben a szakaszban bemutatunk néhány lépést, amelyeken keresztül ellenőrizhetjük a rendszerünkhöz csatlakoztatott modemet.
Csatlakoztassuk a modemet a FreeBSD rendszerre, indítsuk be a gépet, majd ezután figyeljük a modemünk állapotát jelző lámpákat, hogy közülük a DTR világít-e, amikor a login: felirat megjelenik a rendszerkonzolon. Amennyiben erre a válasz igen, akkor az arra utal, hogy a FreeBSD a hozzátartozó kommunikációs porton elindította a megfelelő getty programot és a modem várja a hívásokat.
Amikor viszont a DTR lámpa nem világít, a konzolon keresztül jelentkezzünk be a FreeBSD rendszerbe és adjuk ki egy ps ax parancsot, amivel így ellenőrizni tudjuk, hogy a porthoz tartozó getty elindult. A futó programok között tehát valami ilyesmit kell majd látnunk:
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1
Ha viszont például ezt látjuk:
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0
és modem még nem fogadott hívást, akkor ez azt jelenit, hogy a getty megnyitotta a kommunikációs csatornát. Ez utalhat egyaránt egy hibás kábelre vagy a modem helytelen beállítására, mivel a getty egészen addig nem lesz képes megnyitni az adott portot, amíg a modem vissza nem küld neki egy CD (Carrier Detect) jelet.
Ha a listában az adott ttydN eszközhöz semmilyen getty programot nem találunk, akkor újra nézzük át az /etc/ttys állományban szereplő bejegyzéseket, mert előfordulhat, hogy azokban vétettünk valamilyen hibát. Emellett még a /var/log/messages naplóban is érdemes utánanézni, hátha az init vagy a getty küldött valamilyen hibáról értesítést. Ha még ezek után sem találunk semmit, akkor megint kezdjük el keresni hibákat, hiányzó bejegyzéseket vagy eszközöket az /etc/ttys, /etc/gettytab és a megfelelő /dev/ttydN állományokban.
Próbáljunk meg bejutni a rendszerünkbe. Ehhez a távoli rendszeren ne felejtsük el beállítani a 8 bites adatátvitelt és az 1 stopbitet, illetve a paritást kikapcsolni. Ha erre közvetlenül nem kapunk egy bejelentkezési képernyőt vagy csak szemét jelenik meg, akkor kb. másodpercenként egyszer nyomjuk le az Enter billentyűt. Ha még ezután sem látjuk a bejelentkezési képernyőt felbukkani, akkor próbáljunk kiküldeni egy BREAK parancsot. Ha a híváshoz nagysebességű modemet használunk, akkor próbáljuk meg a modem sebességét rögzíteni és úgy tárcsázni (ezt például a U.S. Robotics Sportster modemnél az AT&B1 paranccsal tudjuk elérni):
Ha viszont még ezek után sem kapjuk meg a bejelentkező képernyőt, akkor a /etc/gettytab állományban megint nézzük át az összes beállítást:
Az /etc/ttys állományban megadott alaptulajdonság neve egyezik az /etc/gettytab állományban találhatóval.
Mindegyik nx= bejegyzés után egy másik gettytab tulajdonság neve jön.
Mindegyik tc= bejegyzés után egy másik gettytab tulajdonság neve következik.
Ha hívunk, de a FreeBSD rendszerünkre kapcsolt modem továbbra sem veszi fel, akkor a modem beállításai között ellenőrizzük, hogy a DTR jel küldésekor a modem fogadja-e a hívást. Ha úgy tűnik, hogy a modem minden ezzel kapcsolatos beállítása stimmel, akkor nézzük meg, hogy a modem lámpái közül a DTR világít-e (már ha van ilyen).
Ha mindent többször is végignéztünk és még mindig nem leljük a megoldást, akkor tartsunk egy kis szünetet és térjünk vissza a problémához később. Ha még ezután sem tudjuk működésre bírni, akkor küldjünk egy levelet a FreeBSD general questions levelezési lista címére, amelyben leírjuk a modemünket és a vele kapcsolatos problémát, és a lista tagjai majd megpróbálnak nekünk segíteni.
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.