Text-terminali na Linux-u

14.1 Getty (koristi se u / etc / inittab)

Uvod u Getty

Da bi se proces prijavljivanja pokrenuo na serijskom portu (i priključen na njega) kada se računar pokreće (ili prekidači rade nivoi), mora se staviti getty naredba u datoteku / etc / inittab. Running getty iz komandne linije može prouzrokovati probleme (pogledajte Ako se getty pokreće iz komandne linije: programi se zaustavljaju da vide zašto). Getty dobija TTY (terminal) koji ide. Svaki terminal mora imati sopstvenu komandu Getty. Postoji i barem jedna getty naredba za konzolu u svakoj / etc / inittab datoteki. Nađite ovo i stavite Getty komande za prave terminale pored njega. Ova datoteka može sadržati uzorke getty linija za tekstualne terminale koji su komentarisani tako da sve što trebate učiniti je da ih uncomment (uklonite vodeći #) i promijenite nekoliko argumenata.

Argumenti koji su dozvoljeni zavise od kojih geta koristite:
Najvažnija dva terminala za direktno priključene terminale su:

Dva getty-a su najbolja za dial-in modeme (izbjegavanje za direktno priključene terminale) su:

Jednostavne getty koje koristite ako ne koristite pravi tekst-terminal. Većina korisnika Linuxa koristi jedan od njih na svom monitoru:

Vaša distribucija Linuxa može da se pojavi sa ps_getty ili agetty za tekst-terminale. Neke distribucije nijesu isporučene. Nažalost, oni često samo nazivaju "getty", tako da ćete možda morati da odredite koji ste od argumenata koje ste stavili nakon toga u / etc / inittab razlikovali. Debian koristi agetty (u paketu util-Linux). RedHat i Fedora su koristili ps_getty koji je na: ps_getty

Kao poslednje sredstvo za pokušaj određivanja koji geti imate, možete pogledati njegov izvršni kod (obično u / sbin). ps_getty ima / etc / gettydefs ugrađene u ovaj kod. Da biste ga potražili, idite na / sbin i otkucajte:
stringovi getty | grep getty
Ako je Getty u stvari agetski, gornje neće rezultirati ništa. Međutim, ako imate agetičku kucanje:
Getty-h
trebali bi prikazati opcije [-hiLmw].

Ako nemate gajtan, želite provjeriti druge distribucije i vanzemaljski program za konverziju između RPM i Debian paketa. Izvorni kod se može preuzeti sa Getty Software-a.

Ako ne koristite modemske kontrolne linije (na primjer, ako koristite samo minimalni broj 3 provodnika: prenošenje, prijem i zajedničko područje signala), trebalo bi da dozvolite Getty-u da to znate koristeći "lokalnu" zastavu. Format ovoga zavisi od kog geta koristite.

Getty izlazi nakon prijave (i može otpustiti)

Nakon što se prijavite, primjet ćete (koristeći "top", "ps -ax" ili "ptree") da se proces getty više ne pokreće. Šta se dogodilo s tim? Zašto se giti ponovo pokreće ako je vaša ljuska ubijena? Evo zašto.

Nakon što upišete svoje korisničko ime, Getty ga preuzima i poziva program za prijavljivanje koji mu kaže vaše korisničko ime. Kretanje se zamenjuje procesom prijavljivanja. Proces prijavljivanja traži svoju lozinku, provjerava ga i pokreće svaki proces koji je naveden u vašoj datoteci lozinke. Ovaj proces je često bash shell. Ako je tako, bash počinje i zamenjuje proces prijavljivanja. Imajte na umu da jedan proces zamjenjuje drugu i da je bash shell proces prvobitno započeo kao getty proces. Implikacije ovoga će biti objašnjene u nastavku.

Sada u fajlu / etc / inittab, Getty bi trebao da otpusti (restart) ako je ubijen. Tako kaže na liniji koja zove Getty. Ali ako je baš shell (ili proces prijavljivanja) ubijen, Getty respawns (restarts). Zašto? Pa, i proces prijavljivanja i bash su zamene za Getty i nasleđivanje

* Text Terminal How-To Indeks

signalne veze uspostavljaju njihovi prethodnici. Zapravo, ako pratite detalje koje ćete primetiti da će proces zamjene imati isti ID procesa kao i prvobitni proces. Dakle, bash je vrsta gotovog maskiranog sa istim identifikacionim brojem procesa. Ako je ubijen, to je upravo kao što je ubijen Getty (iako Getty više ne trči). Ovo dovodi do gutanja.

Kada se jedan odjavi, svi procesi na tom serijskom portu ubijaju se uključujući bash shell. Ovo se takođe može desiti (ako je omogućeno) ako se na dolazni signal prenese signal za prekid veze sa padom DCD napona modema. Ili odjavljivanje ili opadanje DCD-a rezultiraće gotovim respawningom. Neko može primorati Getty-a na respawn ručnim ubijanjem bash-a (ili prijavljivanja) bilo pritiskom na taster k, itd. U "top" ili sa "kill" komandom. Verovatno ćete morati da ga ubijete signalom 9 (koji se ne može ignorisati).

Ako Getty pokreće iz komandne linije: Programi se zaustavljaju

Obično treba pokrenuti Getty iz unutrašnjosti / etc / inittab, a ne iz komandne linije ili ukoliko neki programi koji se pokreću na terminalu mogu biti neočekivano obustavljeni (zaustavljeni). Evo zašto (preskočite u sledeći odeljak ako zašto nije važno za vas). Ako započnete Getty za reći ttyS1 iz komandne linije drugog terminala, recite tty1, onda će imati tty1 kao svoj "kontrolni terminal" iako je stvarni terminal na kojem radi na ttyS1. Tako ima pogrešan kontrolni terminal. Ali ako se započne unutar inittab datoteke onda će imati ttyS1 kao kontrolni terminal (ispravno).

Iako je kontrolni terminal pogrešan, prijavljivanje na ttyS1 radi dobro (pošto ste dali ttyS1 kao argument za Getty). Standardni ulaz i izlaz su postavljeni na ttyS1 iako kontrolni terminal ostaje tty11. Ostali programi koji se pokreću na ttyS1 mogu naslediti ovaj standardni ulaz / izlaz (koji je povezan sa ttyS1) i sve je u redu. Ali neki programi mogu napraviti grešku u pokušaju čitanja sa njihovog kontrolnog terminala (tty1) što nije u redu. Sada tty1 može smatrati da se ovi programi pokreću u pozadini tty1 tako da pokušaj čitanja od tty1 (to bi trebao biti ttyS1) rezultira u zaustavljanju procesa koji je pokušao pročitati. (Pozadinski proces nije dozvoljen za čitanje sa njegovog kontrolnog terminala.). Na ekranu možete videti poruku slično: " [1] + Stopped ". U ovom trenutku zaglavite se jer ne možete da interakciju sa procesom koji pokušava da komunicira s vama preko pogrešnog terminala. Naravno da pobegnete od ovoga, možete ići na drugi terminal i ubiti proces, itd.

agetty (može se nazvati getty)

Linija primera u / etc / inittab:

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

S1 je iz ttyS1. 23 znači da se getty pokreće nakon ulaska u nivo 2 ili 3. Reakcija znači da ako je Getty (ili proces koji ga je zamenio kao bash) ubijen, Getty će automatski ponovo pokrenuti (respawn). / sbin / getty je naredba getty. -L znači Lokalno (ignoriraj signale kontrole modema). -h (nije prikazano u primeru) omogućava kontrolu toka hardvera (isto kao i stty crtscts). 19200 je baud stopa. ttyS1 znači / dev / ttyS1 (COM2 u MS-DOS). vt102 je tip terminala i ovaj getty će postaviti varijablu okoline TERM na ovu vrijednost. Nema konfiguracionih datoteka. Ukucajte "init q" u komandnoj liniji nakon editovanja getty-a i trebate vidjeti prijavnu prijavu.

Agetina automatska detekcija problema pariteta

Agetty program će pokušati da automatski otkrije paritet postavljen unutar terminala (uključujući i paritet). Ne podržava 8-bitne bajtove podataka plus 1-bitnu paritetu. Pogledajte 8-bitne bajtove podataka (plus paritet). Ako koristite Stty da biste podesili paritet, agetty će ga automatski unetirati jer u početku želi paritetni bit da dođe kao da je bio bit podataka. To je zato što je potrebno da dobijete poslednji bit (moguće paritetni bit) dok upišete ime za prijavu tako da može automatski otkriti paritet. Dakle, ako koristite paritet, omogućite je samo unutar tekstualnog terminala i pustite agetty da ga automatski otkrije i podesi na računar. Ako vaši terminali podržavaju primljenu paritetu, prijavni upit će izgledati poprilično dok ne unesete nešto tako da Getty može otkriti

pariteta. Potraženi upit će odvratiti posjetitelje itd. Od pokušaja prijavljivanja. To bi moglo biti ono što želite.

Ponekad postoji problem sa automatskim otkrivanjem pariteta. Ovo se dešava zato što nakon što prvi put unesete svoje ime za prijavljivanje, agetty pokreće program za prijavljivanje da bi se završio prijavljivanje. Na žalost, program za prijavljivanje ne može otkriti paritet, tako da ako program getty ne uspije da odredi paritet onda login neće moći odrediti bilo to. Ako prvi pokušaj prijavljivanja ne uspe, prijavljivanje će vam dopustiti da pokušate ponovo, itd. (Sve sa podešenim paritetom je pogrešno). Na kraju, nakon više neuspelih pokušaja prijavljivanja (ili nakon isteka vremena) agetty će ponovo pokrenuti i započeti sekvence prijavljivanja iznova. Kada se Getty ponovo pokrene, možda će biti u stanju da otkrije paritet na drugom pokušaju kako bi sve tada moglo da radi dobro.

Uz pogrešnu paritetu, program za prijavljivanje ne može ispravno pročitati ono što unosite i ne možete se prijaviti. Ako vaš terminal podrži primljenu paritetu, nastavićete da vidite iščitani ekran. Ako Getty ne uspeva da otkrije paritet, fajl / etc / issue se obično baca na ekran neposredno pre nego što se oglasi, tako da se na ekranu mogu pojaviti još čudnije reči.

Zašto agetti ne može otkriti paritet prvim slovom otkucanim? Evo primera: Pretpostavimo da detektuje 8-bitni bajt sa paritetnim bitom 0 (bit velikog reda) i neparnim brojem 1-bita. Koja je pariteta? Pa, neparan broj od 1 bita znači da je čudna pariteta. Ali to bi moglo biti samo 8-bitan karakter bez pariteta. Do sada ne postoji način da se utvrdi koji. Ali do sada smo eliminisali mogućnost čak pariteta. Otkrivanje pariteta stoga nastavlja procesom eliminacije.

Ako je sledeći bajt ukucan sličan prvom i isto tako eliminiše mogućnost čak pariteta, i dalje je nemoguće utvrditi paritet. Ova situacija može se nastaviti na neodređeno vreme, a u retkim slučajevima prijava neće uspjeti dok ne promenite svoje ime za prijavu. Ako agetty nađe paritetni bit od 1, pretpostavit će da je to paritetni bit, a ne bit 8-bitnog karaktera visokog reda. Zbog toga pretpostavlja se da ne koristite meta-karaktere (veliki bitni set) u vašem korisničkom imenu (tj. Da je vaše ime u ASCII-u).

Može se naći na "petlji za prijavljivanje" na različite načine. Pretpostavimo da unosite samo jedno ili drugo slovo za vaše ime za prijavu, a zatim pritisnite povratak. Ako ova slova nisu dovoljna za otkrivanje pariteta, onda se prijavljivanje pokreće pre otkrivanja pariteta. Ponekad se ovaj problem dešava ako nemate priključak i / ili povezan kada se prvi put pokreće.

Ako se zaglavite u ovoj "login petlji", izlaz iz njega je nekoliko puta pritisnuti taster za povratak dok ne dobijete prijavu za prijavljivanje na Getty. Drugi način je da sačekate minut ili nešto za vremenski raspored. Tada će se program getty prijaviti na ekran, a možete pokušati ponovo da se prijavite.

8-bitni bajt podataka (plus paritet)

Na žalost, agetty ne može da otkrije taj paritet. Od kraja 1999. godine nema opciju za onemogućavanje automatskog otkrivanja pariteta i time otkriva netačnu paritetu. Rezultat je da će proces prijave biti popušten i paritet će biti pogrešno podešen. Stoga izgleda da nije moguće pokušati koristiti 8-bitne bajtove podataka s paritetom.

getty (deo getty_ps)

(Većina toga je iz starog Serial-HOWTO Greg Hankinsa)
Za ovaj getty potrebno je staviti stavke u konfiguracionu datoteku i dodati unos u / etc / inittab . Evo nekih primera unosa koji se koriste za vaš terminal koji stavite u konfiguracionu datoteku / etc / gettydefs .

# 38400 bps Dumb Terminal ulaz DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ L login: # DT38400 # 19200 bps Dumb Terminal ulaz DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @ L login: # DT19200 # 9600 bps Dumb Terminal ulaz DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ L login: # DT9600

Imajte na umu da su DT38400, DT19200 itd. Samo etikete i moraju biti isti kao što koristite u / etc / inittab .

Ako želite, možete da napravite otiske zanimljivih stvari u prijavnom baneru. U mojim primjerima, imam sistemski naziv i serijsku liniju. Možete dodati i druge stvari: [blokquote

shade = da] @B Struja (procijenjena u trenutku kada se vidi @B) bps stopa. @D Trenutni datum, u MM / DD / YY. @L Serijska linija na koju je prikačen getty. @S Ime sistema. @T Trenutno vreme, u HH: MM: SS (24-satno). @U Broj trenutno prijavljenih korisnika. Ovo je broj brojeva unosa u / etc / utmp datoteki koja ima ne-null ut_name polje. @V Vrijednost VERSION-a, kako je data u podrazumevanoj datoteci. Da biste prikazali jedan znak '@', koristite '\ @' ili '@@'.

Kada završite sa uređivanjem / etc / gettydefs , možete potvrditi da je sintaksa ispravna:

linux # getty -c / etc / gettydefs

Uverite se da ne postoji druga konfiguracijska datoteka getty ili uugetty za serijski port koji je povezan sa vašim terminalom ( npr. ( /etc/default/{uu}getty.ttyS N ili /etc/conf.{uu}getty.ttyS N ) , jer će ovo vjerovatno ometati pokretanje geta na terminalu. Uklonite takve konfliktne datoteke ako izađu.

Izmenite datoteku / etc / inittab da biste pokrenuli getty na serijskom portu (zamenom odgovarajućih informacija za vašu okolinu - port, brzinu i podrazumevani tip terminala):

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

U ovom trenutku, trebalo bi da vidite poziv za prijavljivanje na vašem terminalu. Možda ćete morati da povratite kako biste privukli pažnju terminala.

mgetty

"M" označava modem. Ovaj program je prvenstveno za modeme, a od sredine 2000. godine će zahtijevati ponovno kompajliranje za korištenje za tekst-terminale (osim ako ne koristite hardversku kontrolu protoka - a to obično zahtijeva ručni kabel). Za dokumentaciju za direktno priključene terminale pogledajte odeljak "Direktno" u priručniku: mgetty.texi.

Pogledajte poslednje redove /etc/mgetty/mgetty.config za primer konfiguracije za terminal. Osim ako ne kažeš "toggle-dtr ne", pomislićeš na to da imaš modem i isprazni (negirati) DTR pin na računaru uzaludan pokušaj resetovanja nepostojećeg modema. Za razliku od drugih gajtica, mgetty se neće priključiti na terminal dok neko ne udari bilo koji ključ na tom terminalu pa ćete videti? za terminal u vrhu ili ps dok se ovo ne dogodi. Dnevnici u / var / log / mgetty / mogu prikazati nekoliko upozoravajućih poruka koje se primjenjuju samo na modeme koje možete ignorisati.

Evo primera jednostavne linije koju stavite u / etc / inittab:

s1: 23: respawn: / sbin / mgetty-rttyS1