Tekstualni terminali na Linuxu

14.1 Getty (koristi se u / etc / inittab)

Uvod u Getty

Kako bi se pokrenuo postupak prijavljivanja na serijskom priključku (i terminalu koji je povezan s njim) kada se računalo pokrene (ili prebacuje razine izvođenja), u / etc / inittab datoteku mora biti stavljena naredba getty. Pokretanje gettya iz naredbenog retka može uzrokovati probleme (pogledajte Ukoliko se getty izvodi iz naredbenog retka: Programi se zaustavljaju da biste vidjeli zašto). Getty dobiva TTY (terminal) koji ide. Svaki terminal treba svoju vlastitu getty naredbu. Tu je i najmanje jedna getty naredba za konzolu u svakoj / etc / inittab datoteci. Pronađite ovo i stavite getty naredbe za prave terminale pokraj njega. Ova datoteka može sadržavati uzorke getty linija za tekstne terminale koji su komentirani tako da sve što trebate učiniti jest da ih poništite (uklonite vodeći #) i promijenite nekoliko argumenata.

Dopušteni argumenti ovise o tome koji getty koji upotrebljavate:
Dva gettys najbolja za izravno priključene stezaljke su:

Dva gettys najbolja za dial-in modeme (izbjegavajte izravno priključene terminale) su:

Jednostavne gettys za korištenje ako ne koristite pravi tekst-terminal. Većina Linux korisnika koristi jedan od njih na svom monitoru:

Vaša Linux distribucija može doći s bilo ps_getty ili agetty za tekstualne terminale. Neke distribucije ne opskrbljuju niti jedan. Nažalost, često ga samo nazivaju "getty" pa ćete možda trebati utvrditi koji ste od njih jer se argumenti koje ste postavili nakon njega razlikuju u / etc / inittab. Debian koristi agetty (u util-linux paketu). RedHat i Fedora koristili su ps_getty koji je na: ps_getty

Kao posljednje sredstvo pokušaja da odredite koji ste getty, možete provjeriti njegov izvršni kod (obično u / sbin). ps_getty ima / etc / gettydefs ugrađen u ovaj kod. Da biste ga potražili, idite na / sbin i upišite:
žice getty | grep getty
Ako je getty stvarno agetty gore, to će rezultirati ništa. Međutim, ako imate tipkati tipkanje:
getty-h
trebali bi prikazati opcije [-hiLmw].

Ako nemate getty koji želite provjeriti druge distribucije i vanzemaljski program pretvoriti između RPM i Debian paketa. Izvorni kod može se preuzeti s Getty Software-a.

Ako ne koristite modemske upravljačke vodove (na primjer, ako koristite samo minimalni broj 3 vodiča: odašiljanje, primanje i zajednički signal), trebali biste to znati pomoću "lokalne" zastavice. Format ovisi o tome koji getty koristite.

Getty izlazi nakon prijave (i može se ponovno pojaviti)

Nakon što se prijavite, primijetit ćete (koristeći "top", "ps -ax" ili "ptree") da se proces getty više ne pokreće. Što se s njom dogodilo? Zašto se getty ponovno pokreće ako je vaše ljuske ubijeno? Evo zašto.

Nakon što unesete svoje korisničko ime, getty ga preuzima i poziva program za prijavu koji mu govori o korisničkom imenu. Postupak getty zamjenjuje se procesom prijave. Postupak prijave traži lozinku, provjerava ga i pokreće postupak koji je specificiran u datoteci lozinke. Ovaj proces je često bash shell. Ako je tako, bash započinje i zamjenjuje postupak prijave. Imajte na umu da jedan postupak zamjenjuje drugi i da je postupak bash procesa izvorno započeo kao proces Getty. Posljedice toga će biti objašnjene u nastavku.

Sada u / etc / inittab datoteku, getty bi trebao respawn (restart) ako je ubijen. To kaže tako na liniji koja zove Getty. No, ako se bash shell (ili proces prijave) ubije, getty respawns (restarts). Zašto? Pa, proces prijave i bash su zamjene za getty i nasljeđuju

* Tekstualni terminalski indeks

veze signala koje su uspostavili njihovi prethodnici. U stvari, ako promatrate detalje primijetit ćete da će zamjenski proces imati isti ID procesa kao i originalni proces. Tako bash je vrsta getty u prerušavanju s istim ID procesa broj. Ako je bash ubijen, baš kao što je Getty ubijen (iako Getty više ne radi). To rezultira getty respawning.

Kada se netko odjavi, svi procesi na tom serijskom portu se ubiju, uključujući i bash shell. To se također može dogoditi (ako je omogućeno) ako se sabirni signal šalje na serijski ulaz za kap DCD napona modema. Ili odjava ili pad u DCD rezultirat će getty respawning. Jedan se može prisiliti da se getty ponovno vrati ručnim ubijanjem bash (ili login-a) bilo udaranjem tipke k, itd. Dok je "top" ili "kill" naredba. Vjerojatno ćete ga morati ubiti pomoću signala 9 (koji se ne može zanemariti).

Ako se getty izvodi iz naredbenog retka: programi se zaustavljaju

Trebali biste normalno pokrenuti getty iz / etc / inittab, a ne iz naredbenog retka ili neki programi koji se izvode na terminalu mogu neočekivano obustaviti (zaustavljeni). Evo zašto (preskočite na sljedeći odjeljak ako je zašto vam nije važno). Ako pokrenete getty za reći ttyS1 iz naredbenog retka drugog terminala, recimo tty1, tada će imati tty1 kao "kontrolni terminal", iako je stvarni terminal koji radi na ttyS1. Stoga ima pogrešan kontrolni terminal. Ali ako se pokrene unutar inittab datoteke onda će imati ttyS1 kao kontrolni terminal (ispravno).

Iako kontrolni terminal nije u redu, prijava na ttyS1 funkcionira dobro (jer ste dali ttyS1 kao argument za getty). Standardni ulaz i izlaz postavljeni su na ttyS1 iako kontrolni terminal ostaje tty11. Ostali programi pokrenuti u ttyS1 mogu naslijediti ovaj standardni ulaz / izlaz (koji je povezan s ttyS1) i sve je u redu. No, neki programi mogu napraviti pogrešku pokušaja čitanja s kontrolnog terminala (tty1) koji nije u redu. Sada tty1 može misliti da se ti programi pokreću u pozadini tty1 tako da pokušaj čitanja s tty1 (to bi trebao biti ttyS1) rezultirao zaustavljanjem procesa koji je pokušao čitati. (Proces pozadine nije dopušten za čitanje sa svog kontrolnog terminala.). Možda ćete vidjeti poruku poput: " [1] + Stopped " na zaslonu. U ovom trenutku ste zaglavili jer ne možete komunicirati s procesom koji pokušava komunicirati s vama preko pogrešnog terminala. Naravno, da bježimo od ovog, možete ići na drugi terminal i ubiti proces, itd.

agetty (može se nazvati getty)

Primjer linija u / etc / inittab:

S1: 23: respawn: / sbin / getty-L ​​19200 ttyS1 vt102

S1 je od ttyS1. 23 znači da se getty izvodi nakon ulaska u razinu 2 ili 3. Respawn znači da ako se getty (ili proces koji ju zamijeni, npr. Bash) ubije, getty će se automatski automatski pokrenuti (respawn). / sbin / getty je naredba getty. -L znači Lokalni (ignorirajte modemske kontrolne signale). -h (nije prikazano u primjeru) omogućava kontrolu protoka hardvera (isto kao i stty crtscts). 19200 je brzina prijenosa podataka. ttyS1 znači / dev / ttyS1 (COM2 u MS-DOS-u). vt102 je vrsta terminala i ovaj getty će postaviti varijablu okruženja TERM na ovu vrijednost. Nema konfiguracijskih datoteka. Upišite "init q" na naredbenom retku nakon uređivanja getty i trebali biste vidjeti prompt za prijavu.

Nedovoljno prepoznavanje problema s paritetom

Program će pokušati automatski detektirati paritet postavljen unutar terminala (bez pariteta). Ne podržava 8-bitne podatkovne bajtove plus 1-bitni paritet. Pogledajte 8-bitne podatkovne bajtove (plus paritet). Ako koristite stty da biste postavili paritet, agetty će ga automatski poništiti jer u početku želi da se paket pariteta pojavi kao da je riječ o podatkovnom bitu. To je zato što treba zadati zadnji bit (moguće paritetni bit) dok upisujete svoje ime za prijavu tako da automatski detektira paritet. Dakle, ako upotrebljavate paritet, omogućite je samo unutar tekstualnog terminala i dopustite automatsko otkrivanje i postavljanje na računalo. Ako vaš terminal podržava primljeni paritet, upit za prijavu će izgledati pomiješano sve dok ne upišete nešto tako da getty može otkriti

paritet. Poremećeni redak će odvratiti posjetitelje itd. Od pokušaja prijave. To bi moglo biti upravo ono što želite.

Ponekad postoji problem s automatskim otkrivanjem pariteta. To se događa jer nakon što prvi unesete svoje ime za prijavu, agetty započinje program za prijavu da vas dovrši prijavljivanje. Nažalost, program za prijavu ne može otkriti paritet, pa ako program getty nije uspio odrediti paritet, tada se prijava neće moći odrediti bilo. Ako prvi pokušaj prijave ne uspije, prijava će vam omogućiti ponovni pokušaj itd. (Sve s pogrešnim postavkama pariteta). Na kraju, nakon neuspjelih pokušaja prijave (ili nakon vremenskog ograničenja), agetty će se ponovno pokrenuti i ponovno započeti sekvence prijava. Nakon što se getty ponovo aktivira, možda će biti u stanju otkriti paritet na drugom pokušaju, tako da sve može potom funkcionirati.

S pogrešnim paritetom, program za prijavu ne može ispravno čitati ono što upisujete i ne možete se prijaviti. Ako vaš terminal podržava primljeni paritet, nastavit ćete vidjeti pomiješani zaslon. Ako getty ne otkrije paritet, datoteka / etc / issue obično se baca na zaslon neposredno prije prije brzog, tako da se na zaslonu mogu pojaviti još nejasnijih riječi.

Zašto ne može otkriti paritet prvo slovo upisano? Evo primjera: Pretpostavimo da on detektira 8-bitni bajt s paritetnim bitom 0 (bit visokog reda) i s neparnim brojem 1-bitova. Kakav je to paritet? Pa, neparan broj od 1 bita znači da je neparna paritet. Ali to također može biti samo 8-bitni lik bez pariteta. Do sada nije moguće utvrditi koji. Ali do sada smo uklonili mogućnost čak i pariteta. Otkrivanje pariteta stupa na taj način procesom eliminacije.

Ako je sljedeći bajt upisan sličan prvom i samo uklanja mogućnost čak i pariteta, još uvijek je nemoguće odrediti paritet. Ta se situacija može trajati neograničeno, au rijetkim slučajevima prijava neće uspjeti sve dok ne promijenite ime za prijavu. Ako agetty pronađe paritetni bit od 1, pretpostavit će da je to paritetni bit, a ne bit velikog reda 8-bitnog znaka. Stoga pretpostavlja da u korisničkom imenu ne upotrebljavate meta-znakove (skup visokog bita) (tj. Da se vaše ime nalazi u ASCII formatu).

Netko može ući u "pristupnu petlju" na različite načine. Pretpostavimo da samo unosite samo jedno slovo ili dva za svoje ime za prijavu, a zatim pritisnite povratak. Ako ova slova nisu dovoljna za otkrivanje pariteta, tada se prijava počinje prije nego što je otkriven paritet. Ponekad se taj problem dogodi ako terminator ne bude povezan i / ili je povezan kada se agetty prvi put pokreće.

Ako se zaglavite u ovoj "petlji za prijavu" izlaz iz njega je da pritisnete tipku za povratak nekoliko puta dok ne dobijete prompt za prijavu getty. Drugi način je samo pričekati minutu ili više na vrijeme. Zatim će getty program za prijavu biti stavljen na zaslon getty programa i pokušat ćete se ponovno prijaviti.

8-bitni podatkovni bajt (plus paritet)

Nažalost, agetty ne može otkriti ovaj paritet. Od kraja 1999. godine nema opciju za onemogućavanje automatske detekcije pariteta i time će otkriti netočan paritet. Rezultat je taj da će proces prijave biti pomiješan i paritet će biti pogrešan. Stoga ne izgleda moguće pokušati koristiti 8-bitne podatkovne bajtove s paritetom.

getty (dio getty_ps)

(Većina je to od starog serijskog-kalkuliranja Greg Hankins)
Za ovaj getty potrebno je staviti unose u konfiguracijsku datoteku i dodati unos u / etc / inittab . Evo nekoliko primjera unosa koje biste trebali koristiti za vaš terminal koji ste stavili u konfiguracijsku datoteku / etc / gettydefs .

# 38400 bps Glup terminalski unos DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ login: # DT38400 # 19200 bps Glup ulaz terminala DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @ # DT19200 # 9600 bps Glupi prijem terminala DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ SL Prijava: # DT9600

Imajte na umu da su DT38400, DT19200 i sl. Samo oznake i moraju biti iste one koju koristite u / etc / inittab .

Ako želite, možete napraviti getty ispis zanimljivih stvari u banneru za prijavu. U mojim primjerima imam ime sustava i serijska crta. Možete dodati i druge stvari: [blockquote

nijansa = yes] @ B Trenutni (procjenjuje se u trenutku kada se vidi @B) brzina bps. @D Trenutni datum, u MM / DD / YY. @L Serijska crta na koju je priključen getty. @ S Naziv sustava. @T Trenutačno vrijeme u HH: MM: SS (24 sata). @U Broj trenutno prijavljenih korisnika. Ovo je broj broja unosa u datoteci / etc / utmp koja ima polje ne-null ut_name. @V Vrijednost VERSION, kao što je navedeno u datoteci zadanih vrijednosti. Da biste prikazali jedan znak "@", upotrijebite znakove "\ @" ili "@@".

Kada završite s uređivanjem / etc / gettydefs , možete provjeriti je li ispravna sintaksa:

linux # getty -c / etc / gettydefs

Provjerite da ne postoji druga konfiguracijska datoteka za serijski priključak na koji je priključen vaš terminal kao ( /etc/default/{uu}getty.ttyS N ili /etc/conf.{uu}getty.ttyS N ) , jer će to vjerojatno utjecati na trčanje getty na terminalu. Uklonite takve datoteke u sukobu ako izađu.

Uredite datoteku / etc / inittab da biste pokrenuli getty na serijskom priključku (zamjenjujući točne informacije za vašu okolinu - priključak, brzinu i zadanu vrstu terminala):

S1: 23: respawn: / sbin / getty ttyS1 DT9600 vt100 u tome linux # init q

U ovom trenutku trebao bi se pojaviti upit za prijavu na vašem terminalu. Možda ćete morati pogoditi povratak kako biste dobili pozornost terminala.

mgetty

"M" označava modem. Ovaj program je prvenstveno za modeme, a od sredine 2000. godine potrebno je recompiliranje da se koristi za tekstualne terminale (osim ako ne koristite kontrolu protoka hardvera - a to obično zahtijeva ručno izrađeni kabel). Za dokumentaciju za izravno priključene stezaljke pogledajte "Izravni" dio priručnika: mgetty.texi.

Pogledajte zadnje retke /etc/mgetty/mgetty.config za primjer konfiguriranja za terminal. Ako ne kažete "toggle-dtr no", mislit ćete da imate modem i ispustite (negirajte) DTR pin na računalu u uzaludnom pokušaju resetiranja nepostojećeg modema. Za razliku od ostalih gettys, mgetty neće se priključiti na terminal dok netko ne udari bilo koji ključ tog terminala tako da ćete vidjeti a? za terminal na vrhu ili ps sve dok se to ne dogodi. Zapisnici u / var / log / mgetty / mogu prikazati nekoliko poruka upozorenja koje se primjenjuju samo na modeme koje možete zanemariti.

Evo primjera jednostavne linije koju ste stavili u / etc / inittab:

s1: 23: respawn: / sbin / mgetty -r ttyS1