ttySx - PC terminaliks

teejuht
 
1.
Sissejuhatus
2.
Raua ühendamine
3.
Serveri konfigureerimine
4.
Terminaliks oleva PC konfigureerimine
5.
Millist riistvara kasutada

1. Sissejutatus

Järgnev jutt püüab anda edasi ühte konkreetset kogemust kuidas kasutada ühte arvutit serverina ja teist terminalina. Teise kohta võiks öelda ka klient, aga täisväärtuslik klient ta ei ole. Niisiis, need kaks arvutit on omavahel ühendatud nn. lihtsa nullmodemi juhtmega (mis see on selgub all pool).

Tulemusena saab kasutada mõlemat arvutit nagu ikka (minu puhul oli mõlemal linux peal aga võrgukaarte ei kasutatud) kusjuures terminali arvutil saab käivitada minicom'i või kermit'i ning peale mõnede asjakohaste käskude andmist ilmub micom'i või kermiti nö. aknasse serveri kiri:

Welcome to Linux 2.0.36

juta!login:
 

ja saab üle null modemi sisse logida ja asju toimetada serveri kettal ja serveri protsessori ja mäluga!

Kes äkki teab, siis tunne on sama nagu Tartu Ülikooli raamatukogu koridori terminalide või Füüsikahoone terminalide taga istudes. Poleks arvanud, et sellest suhtelisest aeglusest millega mc või pine ette valgub või nii palju rõõmu tunda :)
 

2. Raua ühendamine

PC tüüpi arvutitel on päris mitu mulku välismaailmaga suhtlemiseks ja linuxi kernel toetab tavaliselt ühel või teisel määral neid kõiki. Antud juhul kasutatakse mõlemas arvutis nn. teist serial porti. Öeldakse ka 25 pin'ist ehk laia serial porti. Füüsiliselt on see üks pistikupesa (tegelikult küll enamasti papa) arvuti taga hiire oma kõrval. Seal taga on tavaliselt sellised pesad:

Iga peasaga seostatakse katkestus (IRQ) ja IO (input/output) aadresside vahemik

- nn. serial hiire pesa ehk kitsas 9 pin'ine serial port - /dev/ttyS0, ka /dev/cua0 (IRQ 4, IO: 03f8 - 03ff)
- nn. nullmodemi pesa ehk lai 25 pin'ine serial port - /dev/ttyS1, ka /dev/cua1 (IRQ3, IO: 02f8 -02ff)
- nn. PS2 hiir 6 pin'ine ja /dev/psaux (IRQ 12)
- paraleelport ehk printeri pesa /dev/lpt0 (osa nullmodemeid käib ka sinna aga mitte kõnekstulev)

Ja kui arvuti boodib, siis kernel annab enamasti ekraanile ka sellised read (ka käsk dmesg), mis näitab, et ta toetab asja:

tty00 at 0x03f8 (irq = 4) is a 16550A
tty01 at 0x02f8 (irq = 3) is a 16550A

Kui neid ei ole, siis vaja kernel kompileerida.

Loodetavasti on need pesad üles leitud ja mõlema arvuti kernelite kohta tähelepanekud tehtud.

Järgmise sammuna tuleb tütarlaps poodi saata ostma nullmodemi kontakte:

laiad 25 pin'ised mammad (aga veenudge ise mis teie olukorras on tarvis, vahest ka papad - kui arvuti on papa, siis juhtmeots peab olema mamma, rigth?)

Nendel pistikutel on jalgadel numbrid juures ning tuleb leida kolm juhtmekiudu (ei pruugi olla varjestatud) millega ühendada kaks otsa selliselt:
 

1 arvuti                 2 arvuti
|------|                 |------|
|      2  -------------- 3      |
|      |                 |      |
|      3  -------------- 2      |
|      |                 |      |
|      |                 |      |
|      7  -------------  7      |
|      |                 |      |
|------|                 |------|
 

Jah, joonisel ei ole eksitud: selle kõnelaluse laia serialpordi otsad:

- ühe arvuti 2 teise 3' ga ja
- ühe 3 teise 2'ga ning
- ühe 7 teise 7'ga.

Idee on ühe 'send' ühendada teise 'receive' ga. 7 on nö. 'maa'.

NB! soovitav on üllatuste vältimiseks ärvutite toide võtta samast vargapesast.

Kui juhe on küljes, siis võiks muidugi igaks juhuks proovida kas ikka asi töötab mõne kindla (edasi läheb irooniliseks :) asjaga.

Mul on mingist ajast jäänud DOS'i boot floppy kus on ka Norton Commander peal. Norton Commanderi 'Serial Link' on sobiv vahend. Näiteks avastasin ma, et ühs arvutis vedeles võrgukaart (kuigi ma seda ei kavatsenud antud juhul kasutada) IRQ 3 peal ja kõige lihtsam oli too kaart lihtsalt mujuale tõsta (IRQ 5' le kaardi 'setup.exe'ga) ja sellepärast 'Serial Link' esimese hooga ei läinud tööle! Pärast küll.

Niisiis, kui olete nii kaugel, siis on aeg minna installeerima minicom'i ja kermitit ning konfigureemina serverit (mgetty kasutamine on õige valik).

Tuleks veel tähele panna, et see 3 kiuline juhe võimaldab nn. xon/xoff flow'd ja xon handshake't. Kus seda näidata tuleb välja allpool. Kiirused on 9600 B/s, 38400 B/s, 115200 B/s.

3. Serveri konfigureerimine

Server on teil tegelikult juba olemas, vaja ainult natuke sättida.  Idee seisneb selles et kõikide programmide ema 'init' kasutab oma töös faili '/etc/initab'. Tavaliste terminalidega st. nendega mida saab 'Alt Fx' kombinatsiooniga vahetada on seotud initab'i read:

c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

See, tähendab, iga nn. kohaliku virtual terminali (VT)juures millelt pole veel sisse logitud istub programm '/sbin/agetty' mis oskab sisselogimist korraldada (st. käivitada programmi login).  Selles võite veenuda vaadates 'ps wax' iga protsesse tema käsurea peal on veel antud kiirus Baiti/s, VT nimi ja terminali tüüp. Selle asja juures on aga tähelepanuväärne see, et kui logiti sisse, tehti midagi ja logiti välja, siis käivitab init uue getty seda VT'd kuulama, Veenduge vaadates PID'e.

Meie puhul on vaja siia juurde pista selline rida ja selline programm, mis istub /dev/ttyS1 pordi taga ja ootab kuni keegi endast märku annab.

Programm mis sellega (ja paljude muude asjadega: fax, voice ..) hakkama saab on 'mgetty'. Tihti seda ei ole distributsiooniga kaasas vaid tuleb eraldi tõmmata aga mis seal ikka. Olles ta hankinud ja ära kompilleerinud ning installeerinud on teil olemas '/usr/local/sbin/mgetty'. Kompilleerimistest allpool.

ning rida võiks olla selline:

s2:2345:respawn:/usr/local/sbin/mgetty -s 38400 -r ttyS1 linux

-s 38400 on kiirus B/s (võiks ka olla 115200)
- r tähendab, et asi töötab nn. 'direct line' peal, modemit ei püüta initsialiseerida
- ttyS1 on serial line nimi ilma /dev'ita
- linux on terminali tüüp (võiks ka olla vt100)

mina sain aru, et mgetty ei tahagi '/etc/gettydef' faili kuigi ta oskavat seda kasutada minul ta oli vahepeal olemas, siis aga nimetasin ümber ja käib edasi. Kes tahab proovigu aga peaks ka ilma käima:

VC# B9600 SANE CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S login: #VC

# 38400 fixed baud Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL CRTSCTS # B38400 SANE -ISTRIP CLOCAL CRTSCTS #@S login:

# 19200 fixed baud Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S login: #DT19200

# 9600 baud Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S login: #DT9600

# 38400 fixed-baud modem entry
F38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S login: #F38400

# 19200 fixed-baud modem entry
F19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S login: #F19200

# 9600 fixed-baud modem entry
F9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S login: #F9600

# 38400 autobauding Modem entry with hard flow control
38400# B38400 CS8 CRTSCTS # B38400 SANE -ISTRIP HUPCL CRTSCTS #@S login: #9600

9600# B9600 CS8 CRTSCTS # B9600 SANE -ISTRIP HUPCL CRTSCTS #@S login: #2400

2400# B2400 CS8 CRTSCTS # B2400 SANE -ISTRIP HUPCL CRTSCTS #@S login: #1200

1200# B1200 CS8 CRTSCTS # B1200 SANE -ISTRIP HUPCL CRTSCTS #@S login: #300

300# B300 CS8 CRTSCTS # B300 SANE -ISTRIP HUPCL CRTSCTS #@S login: #38400
 

Ja kui inittab on muudetud, siis on ilmselt abiks anda käsk 'init q' mis loeb uuesti läbi inittabi ja paneb serveri vastavalt käitama.

mgetty kompilleerimine

Minu mgetty oli selline (sunsite.unc.edu'st):

mgetty+sendfax-1_0_0_tar.gz

ja peale lahtipakkimist, FAQ'i lugemist sain aru, et tuleb teha 'cp policy.h-dist policy.h' kusjuures policy.h failis tuleks ära muuta üleval nimetatud asjad:

#define DEFAULT_PORTSPEED       38400
#define DATA_FLOW       FLOW_SOFT

seal on veel muidugi tohutult võimalusi, kusjuures 'man mgetty' ja '/usr/local/etc/mgetty+sendfax/'  on veel ühed 'infopesad'.
 

4. Terminaliks oleva PC konfigureerimine

Seal peab linuxi puhul töötama sarnane kernel nagu serveris ja IRQ peab olema vaba (ma võtsin katsetamise ajaks modemi välja kuna ta on ka nn. '/dev/cua1'.

Mina katsetasin kõigepealt kermit'iga ja seejärel minicom'iga.

kermit

Distributsiooniga seda ei paistnud kaasas olevat ja ma tõmbasin ta Internetist (ckermit'i nime all). Kompileerimine toimus intuatiivselt kaasaoleva jutu põhjal.

käsub olid sellised:

bash # kermit
C-kermit> set line /dev/ttyS1
C-kermit> set speed 38400
C-kermit> set flow xon/xoff
C-kermit> set handshake xon
C-kermit> connect

ja andes paar reavahetust (enne oli server ikka tööl) ilmuski too juta prompt ette.

muidugi saab kermitis ka helpi:

C-kermit> help
C-kermit> set speed ?

C-kermit> exit

Kusjuures töötavast sessioonist saab välja: Ctl - \ , C

(Muide kermitiga saab ka üle TCP/IP õiendada)

minicom

See oli distributsiooniga kaasas aga miks mitte ise tõmmata ja ära kompileerida,vähemalt saab uut dokumentatsiooni uuurida.

Seal on peale käivitamist vaja Ctl -A, Z' ga  võtta ette help screen ja edasi 'O', et konfiguratsiooni muuta:

- Filenames ja paths:
       Download directory:  /home/oolberg
         Upload directory:  /home/oolberg

- Fileame transfer protocols:
           name    program           need name  Up/Dn  FullSrc   IO-Red
        A zmodem  /usr/bin/sz --v       Y          U       N        Y
        D zmodem  /usr/bin/rz --v       Y          D       N        Y

- Serial ports setup:

            serial device: /dev/ttyS1
                 lockfile: /var/lock
            baud/pra/bits: 38400 8N1
    hardware flow control: No
    software flow control: Yes

- Save setup as dfl
- Exit
 

Kokkuvõtteks:

ma proovisin ka minicomiga faile kopeerida, õnnestus

1. logida ennast läbi minicom'i teisse masinasse sisse (muidu, et saa ta tööle panna kauget 'rz'i)
2. sättida paika filenames ja paths (vt. ülevalt)
3. vaadata transfer protocols üle (vt. ülevalt)
4. Ctl - A, Z, S - send - > zmodem (kõige parem :)
5. sisestage faili nimi soovitavalt pika teega terminali PC kõvakettal
6. progress hakkab jooksma.

Märkusena olgu öeldud, et enne 4. punkti oleks hea panna paar reavahetust ...
 
 

5. Millist riistvara kasutada

Serveri rollis olev arvuti võiks ikka olla normaalne aga terminaliks kõlbab põhimõtteliselt igasugune PC alatest 286'st.

Terminali arvutil pole sisselogimise seisukohast muud kohustust kui ennast üles bootida ja käivitada minicom või kermit. (Terminali arvuti ei pea ilmtingimata olema linux - võib olla suvaline OS millel on minicomi või kermiti taoline üle serial'i suhelda oskav rakendus - nt. telix). Ma ei tea, aga räägitakse, et linuxit ei saa installida alla 386 MHz, 20 MB HHD ja 4 MB mälu.

Mina kasutasin 64 MB RAM ja > 120 MHz arvuteid :)

Aga kõige põhilisem riistvara mida on ilmselt vaja ise kokku tinutada on null modemi juhe.

Muuseas, ühele tavaliselt PC'e ei saa sel moel üle kahe terminali külge ühendada, küll aga müüakse spetsiaalseid nn. Multiport kaarte (nt. BOCA).

Lõpetuseks saab kätte nullmodemiga ka kiirusi kuni 115200 B/s, selleks tuleb uuta vaid inittabi ja klienti (kermit, minicom). mgetty't ei pea üle kompileerima.
 
 

ggg