Text-terminali na Linuxu

14.1 Getty (uporablja se v / etc / inittab)

Uvod v Getty

Da bi se ob zagonu računalnika (ali preklapljajočih ravni) zagnala postopek prijave na serijska vrata (in povezani z njim), je treba v datoteko / etc / inittab vstaviti ukaz getty. Running getty iz ukazne vrstice lahko povzroči težave (glej Če se geslo zažene iz ukazne vrstice: programi se ustavijo, da bi videli, zakaj). Getty GET TTY (terminal). Vsak terminal potrebuje svoj ukaz getty. Obstaja tudi vsaj en ukaz getty za konzolo v vsaki datoteki / etc / inittab. Poiščite to in postavite ukaze getty za prave terminale poleg njega. Ta datoteka lahko vsebuje vzorec getty vrstic za besedilne terminale, ki so komentirani, tako da je vse, kar morate storiti,, da jih uncomment (odstranite vodilni #) in spremenite nekaj argumentov.

Argumenti, ki so dovoljeni, so odvisni od tega, katera geta uporabljate:
Najboljša dva terminala za neposredno priključene terminale sta:

Najboljša dva načina za dial-in modem (izogibanje za neposredno priključene sponke) so:

Enostavne gettys, če ne uporabljate pravega besedilnega terminala. Večina uporabnikov Linuxa uporablja enega od teh na svojem monitorju:

Vaša distribucija Linuxa lahko prihaja z bodisi ps_getty ali agetty za besedilne terminale. Nekatere distribucije ne dobavljajo niti. Na žalost jih pogosto imenujejo »getty«, zato boste morda morali določiti, katera od vas je od argumentov, ki ste jih dali v / etc / inittab, razlikovali. Debian uporablja agetty (v paketu util-linux). RedHat in Fedora sta uporabila ps_getty, ki je na: ps_getty

Kot zadnjo možnost, da bi ugotovili, kateri geti imate, lahko preverite svojo izvršilno kodo (običajno v / sbin). ps_getty ima / etc / gettydefs vdelano v to kodo. Če jo želite poiskati, pojdite na / sbin in vnesite:
strings getty | grep getty
Če je Getty dejansko agetty, bo zgornji rezultat nič. Vendar, če imate agetno tipkanje:
Getty-h
bi morali prikazati možnosti [-hiLmw].

Če nimate geta, ki jo želite preveriti, druge distribucije in program tujca pretvoriti med pakete RPM in Debian. Izvorno kodo je mogoče prenesti iz programske opreme Getty.

Če ne uporabljate nadzornih linij za modem (na primer, če uporabljate le najmanjše število 3 vodnikov: oddajanje, sprejemanje in skupni signalni tlak), morate geti vedeti o tem s pomočjo "lokalne" zastave. Oblika tega je odvisna od tega, katero geslo uporabljate.

Getty izstopi po prijavi (in lahko sprosti)

Ko se prijavite, boste opazili (z uporabo "top", "ps -ax" ali "ptree"), da se proces getty ne izvaja več. Kaj se je zgodilo z njim? Zakaj geta ponovno zažene, če je vaša lupina ubita? Evo zakaj.

Ko vtipkate vaše uporabniško ime, jo dobi Getty in pokliče prijavni program, ki mu pove, vaše uporabniško ime. Postopek getty se nadomesti s prijavnim postopkom. Postopek prijave zahteva vaš geslo, ga preveri in začne postopek, ki je naveden v datoteki gesla. Ta proces je pogosto bash lupina. Če je tako, bash začne in nadomešča prijavni postopek. Upoštevajte, da en proces nadomešča drugo in da je proces bash shell prvotno začel kot postopek getty. Posledice tega bodo pojasnjene v nadaljevanju.

Zdaj v datoteki / etc / inittab, bi moral Getty ponoviti (ponovno), če je ubil. Piše tako na liniji, ki kliče Getty. Ampak, če je bash lupina (ali prijavni postopek) ubit, Getty respawns (znova zažene). Zakaj? No, prijavni postopek in bash sta zamenjava za Getty in dedovanje

* Text Terminal How-To Index

signalne povezave vzpostavijo njihovi predhodniki. Dejansko, če opazite podrobnosti, ki jih boste opazili, da bo proces zamenjave enak ID procesa kot prvotni postopek. Tako je bash nekakšen getty v preobleki z isto identifikacijsko številko procesa. Če je ubil bash, je bil podoben, da je bil gotty ubran (čeprav Getty ne deluje več). Posledica tega je, da se gretje sprosti.

Ko se en odjavi, se uničijo vsi procesi na tem zaporednem vmesniku, vključno z bash lupino. To se lahko zgodi tudi (če je omogočeno), če se na serijski vmesnik pošlje sporočilo o prekinitvi s padcem DCD napetosti modema. Če se odjavi ali spusti v DCD, se bo sprostilo gotovost. Eden lahko sproži Getty na respawn z ročno ubijanje bash (ali login) bodisi tako, da pritisnete tipko k, itd, medtem ko je v "top" ali z ukazom "kill". Boste verjetno morali ubiti s signalom 9 (ki ga ni mogoče prezreti).

Če se getty zažene iz ukazne vrstice: programi se ustavijo

Običajno morate zagnati Getty iz notranjosti / etc / inittab in ne iz ukazne vrstice, sicer pa se lahko nekateri programi, ki se izvajajo na terminalu, nepričakovano prekinejo (ustavi). Evo, zakaj (preskočite na naslednji odsek, če vam za to ni pomembno). Če zaženete Getty za reči ttyS1 iz ukazne vrstice drugega terminala, recimo tty1, potem bo imela tty1 kot svoj "kontrolni terminal", čeprav je dejanska terminal, na katerem teče, ttyS1. Tako ima napačno kontrolni terminal. Ampak, če se začne znotraj datoteke inittab, bo imel ttyS1 kot krmilni terminal (pravilen).

Čeprav je kontrolni terminal napačen, se prijava na ttyS1 dobro dela (ker ste ttyS1 navedli kot argument za Getty). Standardni vhod in izhod sta nastavljena na ttyS1, čeprav kontrolni terminal ostane tty11. Drugi programi, ki se izvajajo na ttyS1, lahko podedujejo ta standardni vhod / izhod (ki je povezan s ttyS1) in vse je v redu. Nekateri programi pa lahko napako poskušajo prebrati iz kontrolnega terminala (tty1), ki je napačen. Zdaj lahko tty1 misli, da te programe izvajajo v ozadju s tty1, zato je poskus, da se od tty1 odčita od tty1 (to je bil ttyS1), končal postopek, ki je poskušal prebrati. (Postopek ozadja ni dovoljeno brati s svojega kontrolnega terminala.). Na zaslonu lahko vidite sporočilo, ki je na primer: " [1] + Stopped ". Na tej točki ste zaljubljeni, saj ne morete vplivati ​​na postopek, ki poskuša komunicirati z vami prek napačnega terminala. Seveda, da bi pobegnili od tega, lahko greš na drugi terminal in ubiješ proces, itd.

agetty (lahko se imenuje Getty)

Primer vrstice v / etc / inittab:

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

S1 je iz ttyS1. 23 pomeni, da se getty izvaja ob vstopu v nivoja 2 ali 3. Rešitev respawn pomeni, da če se uniči Getty (ali postopek, ki ga je zamenjal, npr. Bash), se bo samodejno zagnati (respawn). / sbin / getty je ukaz getty. -L pomeni lokalno (ignoriraj modemske nadzorne signale). -h (ni prikazan v primeru) omogoča nadzor nad pretokom strojne opreme (enako kot stty crtscts). 19200 je hitrost prenosa. ttyS1 pomeni / dev / ttyS1 (COM2 v MS-DOS). vt102 je tip terminala in ta getty bo spremenil spremenljivko okolja TERM na to vrednost. Konfiguracijskih datotek ni. Vnesite "init q" v ukazno vrstico po urejanju getty in videti morate prijavni poziv.

Agettyovo samodejno odkrivanje težav s pariteto

Program agetty bo poskušal samodejno zaznati pariteto znotraj terminala (vključno s pariteto). Ne podpira 8-bitnih podatkovnih bajtov in 1-bitne paritete. Glej 8-bitne podatkovne bajte (plus parnost). Če uporabljate stty za nastavitev parnosti, bo agetty samodejno unset, saj na začetku želi paritetni bit prihajajo, kot če bi bil podatkovni bit. To je zato, ker potrebuje zadnjo bit (verjetno bit paritete), ko vnesete ime za prijavo, tako da lahko samodejno zazna pariteto. Tako, če uporabljate pariteto, omogočite le znotraj besedilnega terminala in pustite agetti samodejno zaznati in ga nastaviti na računalnik. Če vaš terminal podpira prejete paritete, se bo prijavni poziv prikazal popačen, dokler ne vnesete nekaj, tako da lahko Getty zazna

paritete. Povratni poziv bo odvračal obiskovalce itd., Da bi se poskušal prijaviti. To je lahko tisto, kar hočeš.

Včasih obstaja problem s samodejnim odkrivanjem parnosti. To se zgodi, ker po tem, ko ste najprej vnesli svoje uporabniško ime, agetty zažene program za prijavo , da se lahko prijavite. Na žalost program za prijavo ne more zaznati parnosti, če program Getty ne bo določil paritete, potem prijava ne bo mogla določiti bodisi. Če prvi poskus prijave ne uspe, vam bo prijava omogočila, da poskusite znova, itd. (Vse z napačno nastavljeno pariteto). Sčasoma se bo po večkratnem neuspelem poskusu prijave (ali po preteku časovne omejitve) spet zagnala in vsa znova zagnati uporabniške zapise. Ko se Getty ponovno zažene, bo morda lahko odkrila pariteto ob drugem poskusu, da bi lahko vse v redu.

Z napačno pariteto program za prijavo ne more pravilno prebrati, kaj vnašate in se ne morete prijaviti. Če vaš terminal podpira prejeto pariteto, boste še naprej videli popačen zaslon. Če Getty ne zazna paritete, se datoteka / etc / issue običajno odloži na zaslon neposredno tik pred pozivom, tako da se na zaslonu lahko pojavi več besed, ki so zmotne.

Zakaj ne morete odkriti paritete s prvim vnesenim črkom? Tukaj je primer: Recimo, da zazna 8-bitni bajt s paritetnim bitom 0 (bit velikega reda) in z neparnim številom 1-bitov. Kakšna je pariteta? No, čudno število 1 bitov pomeni, da je čudna pariteta. Lahko pa je tudi 8-bitni znak brez paritete. Do zdaj ni mogoče ugotoviti, kateri. Toda doslej smo izločili možnost enakopravnosti. Odkrivanje parnosti tako poteka s postopkom izločanja.

Če je naslednji vnesen bajt podoben prvemu in prav tako izključuje možnost enakopravnosti, je še vedno mogoče določiti pariteto. Ta položaj se lahko nadaljuje za nedoločen čas in v redkih primerih se prijava ne bo uspela, dokler ne spremenite imena za prijavo. Če agetty najde paritetni bit 1, bo domnevalo, da je to bit paritete in ne bit velikega 8-bitnega znaka. Zato predpostavlja, da v vašem uporabniškem imenu ne uporabljate meta-znakov (veliko bitov) (to je, da je vaše ime v ASCII).

Eno se lahko na različne načine vpiše v "prijavno zanko". Recimo, da vnesete samo eno črko ali dve za vaše uporabniško ime in nato pritisnite vrnitev. Če te črke ne zadostujejo za odkrivanje parnosti, se prijavo nadaljuje, preden se odkrije parnost. Včasih se ta težava zgodi, če nimate priključka in / ali ste priključeni, ko se najprej začne agetty.

Če se obtičite v tej "prijavni zanki", je večkrat, da večkrat pritisnete tipko za vračanje, dokler ne dobite gesla za prijavo v storitev getty. Drug način je, da počakate minuto ali tako za časovno omejitev. Nato bo program getty na zaslonu postavil poziv za prijavo getty in poskusite znova prijaviti.

8-bitni podatkovni bajti (plus pariteta)

Na žalost agetty ne more zaznati te paritete. Konec leta 1999 nima možnosti za onemogočanje samodejnega odkrivanja paritete in tako zazna napačno pariteto. Rezultat je, da bo postopek prijave popačen in bo enakomerno določen paritet. Tako se zdi neizvedljivo poskusiti uporabljati 8-bitne podatkovne bajte s pariteto.

getty (del getty_ps)

(Večina tega je od starega Serial-HOWTO Grega Hankinsa)
Za to geslo mora oba vnašati v konfiguracijsko datoteko in dodati vnos v / etc / inittab . Tukaj je nekaj primerov vnosov, ki jih želite uporabiti za svoj terminal, ki ste jih dali v konfiguracijsko datoteko / etc / gettydefs .

# 38400 b / s Dumb Terminal vstop DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ L prijava: # DT38400 # 19200 bps Dumb Terminal vnos DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @ L prijava: # DT19200 # 9600 b / s Dumb Terminal vstop DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ L prijava: # DT9600

Upoštevajte, da sta DT38400, DT19200 itd. Samo nalepke in morajo biti enaki, kot jih uporabljate v / etc / inittab .

Če hočeš, lahko natisnete zanimive stvari v banki za prijavo. V svojih primerih imam ime sistema in serijsko linijo natisnjeno. Dodate lahko še druge stvari: [blockquote

sence = da] @B Tok (ocenjen v času opazovanja @B) bps stopnja. @D Trenutni datum, v MM / DD / YY. @L Serijska vrstica, na katero je pritrjen gajtan. @S Ime sistema. @T Trenutni čas, v HH: MM: SS (24-urno). @U Število trenutno prijavljenih uporabnikov. To je število števila vnosov v datoteki / etc / utmp, ki imajo polje, ki ni null ut_name. @ V Vrednost VERSION, kot je navedeno v datoteki privzetih nastavitev. Za prikaz enega samega znaka »@« uporabite '\ @' ali '@@'.

Ko končate urejanje / etc / gettydefs , lahko preverite, ali je sintaksa pravilna, tako da:

linux # getty -c / etc / gettydefs

Prepričajte se, da ni nobene druge konfiguracijske datoteke getty ali uugetty za serijska vrata, na katerih je priključen vaš terminal, kot so ( /etc/default/{uu}getty.ttyS N ali /etc/conf.{uu}getty.ttyS N ) , saj bo to verjetno vplivalo na tekoče getty na terminalu. Če izstopi, odstranite take nasprotujoče si datoteke.

Uredite svojo datoteko / etc / inittab za zagon getty na serijskem vmesniku (z nadomestitvijo pravilnih podatkov za svoje okolje - vrata, hitrost in privzeto vrsto terminala):

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

V tem trenutku bi morali na vašem terminalu videti prijavni poziv. Morda boste morali zadeti vračilo, da boste pozornost terminala dobili.

mgetty

"M" pomeni modem. Ta program je namenjen predvsem modemom, od sredine leta 2000 pa bo zahteval ponovno prevajanje, da ga uporabite za besedilne terminale (razen če uporabljate strojni nadzor toka - in to običajno zahteva ročno izdelan kabel). Za dokumentacijo za neposredno priključene sponke glejte razdelek »Neposredna« v priročniku: mgetty.texi.

Oglejte si zadnje vrstice /etc/mgetty/mgetty.config za primer konfiguriranja za terminal. Če ne rečete "preklopi-dtr ne", bo pomislil, da imate v računalniku modem in spustite (negirate) pin DTR v zamannem poskusu ponastavitve neobstoječega modema. V nasprotju z drugimi gettys, mgetty ne bo priključen na terminal, dokler ne bo nekdo udaril nobene ključne točke tega terminala, da boste videli? za terminal na vrhu ali ps, dokler se to ne zgodi. Dnevniki v / var / log / mgetty / lahko kažejo nekaj opozorilnih sporočil, ki veljajo samo za modeme, ki jih lahko prezrete.

Tukaj je primer preproste vrstice, ki ste jo dali v / etc / inittab:

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