Skip to main content

Textové terminály na Linuxe - 14.1 Getty (používané v / etc / inittab)

Anonim

14.1 Getty (používa sa v / etc / inittab)

Úvod do Getty

Aby sa proces spúšťania spustil na sériovom portu (a pripojený terminál), keď sa počítač spustí (alebo prepne úrovne spustenia), príkaz getty musí byť vložený do súboru / etc / inittab. Spúšťanie getty z príkazového riadku môže spôsobiť problémy (pozri Ak sa getty spustí z príkazového riadku: Programy sa zastavia, aby zistili, prečo). Getty získal TTY (terminál). Každý terminál potrebuje vlastný príkaz getty. K dispozícii je tiež aspoň jeden príkaz getty pre konzolu v každom súbore / etc / inittab. Nájdite to a zadajte príkazy getty pre skutočné terminály vedľa neho. Tento súbor môže obsahovať vzorové riadky getty pre textové terminály, ktoré sú komentované, takže všetko, čo musíte urobiť, je odkomentovať ich (odstrániť vedúce #) a zmeniť niekoľko argumentov.

Argumenty, ktoré sú povolené, závisia od toho, ktorý getty používate:Dve gettys najlepšie pre priamo pripojené terminály sú:

  • agetty (niekedy len nazývaná getty): Veľmi jednoduché nastavenie. Žiadne konfiguračné súbory. Pozri agetty
  • getty (časť getty_ps)

Dve gettys najlepšie pre dial-in modemy (vyhnúť sa priamo pripojené terminály) sú:

  • mgetty: najlepšia pre modemy; práca na termináloch je príliš nízka
  • uugetty: iba pre modemy; časť balíka getty_ps

Jednoduché gettys na použitie, ak nepoužívate skutočný textový terminál. Väčšina používateľov systému Linux používa jeden z týchto programov na svojom monitore:

  • mingetty
  • fbgetty
  • fgetty
  • rungetty

Vaša distribúcia Linuxu môže obsahovať buď ps_getty alebo agetty pre textové terminály. Niektoré distribúcie neposkytujú ani jednu. Bohužiaľ, často to nazývajú "getty", takže možno budete musieť určiť, ktorý z nich máte, pretože argumenty, ktoré ste zadali v / etc / inittab, sa líšia. Debian používa agetty (v balíku util-linux). RedHat a Fedora používajú ps_getty, ktorý je na adrese: ps_getty

Ako posledná možnosť sa pokúsite zistiť, ktorý getty máte, môžete si skontrolovať jeho spustiteľný kód (zvyčajne v / sbin). ps_getty má / etc / gettydefs vložené do tohto kódu. Ak chcete vyhľadávať, prejdite na / sbin a zadajte:reťazce getty grep getty Ak je getty skutočne agetty vyššie uvedené povedie k ničomu. Ak však zadávate agetty:getty -hby mali zobraziť možnosti -hLmw.

Ak nemáte getty, ktoré chcete skontrolovať ďalšie distribúcie a cudzinec program na konverziu medzi balíčkami RPM a Debian. Zdrojový kód je možné stiahnuť zo softvéru Getty.

Ak nepoužívate riadky riadenia modemu (napríklad ak používate iba minimálny počet 3 vodičov: vysielanie, príjem a bežnú signalizačnú zem), mali by ste sa o tom dozvedieť pomocou "miestneho" príznaku. Formát toho závisí od toho, ktorý getty používate.

Getty sa po prihlásení (a môže respawn)

Po prihlásení si všimnete (pomocou "top", "ps -ax" alebo "ptree"), že proces getty už nie je spustený. Čo sa s tým stalo? Prečo sa znova reštartuje, ak je váš shell zabitý? Tu je dôvod.

Po zadaní svojho užívateľského mena sa dostane getty a zavolá prihlasovací program s oznámením vášho užívateľského mena. Getty proces je nahradený prihlasovací proces. Prihlasovací proces vyžaduje zadanie hesla, kontroluje ho a spustí akýkoľvek proces určený v súbore vášho hesla. Tento proces je často bash shell. Ak áno, bash spustí a nahradí proces prihlasovania. Všimnite si, že jeden proces nahrádza iný proces a že proces bash shell začal pôvodne ako proces getty. Dôsledky tohto riešenia budú vysvetlené nižšie.

Teraz v súbore / etc / inittab, getty má byť respawn (reštart), ak je zabitý. Hovorí to tak na linku, ktorá volá getty. Ale ak je bash shell (alebo prihlasovací proces) zabitý, getty respawns (reštartuje). Prečo? No, prihlasovací proces aj bash sú náhrady za getty a dedenie

* Textový terminál

signálové spojenia vytvoria ich predchodcovia. V skutočnosti, ak pozorujete podrobnosti, všimnete si, že proces výmeny bude mať rovnaké ID procesu ako pôvodný proces. Takže bash je trochu getty v prestrojení s rovnakým identifikačným číslom procesu. Ak je bash zabitý, je to ako Getty bol zabitý (aj keď Getty už nebeží). To má za následok revolúciu.

Keď sa odhlási, všetky procesy na tomto sériovom porte sú zabité, vrátane bash shell. To sa môže tiež vyskytnúť (ak je povolené), ak je vysielač zavesený na sériový port kvapkou DCD napätia modemom. Buď odhlásenie alebo pokles v DCD bude mať za následok revolúciu. Jeden môže donútiť getty k respawn manuálne zabíjanie bash (alebo prihlásenie) buď stlačením klávesu k atď, zatiaľ čo v "hornej", alebo s "zabiť" príkaz. Pravdepodobne budete musieť zabiť so signálom 9 (ktorý nemožno ignorovať).

Ak sa getty spustí z príkazového riadku: Programy sa zastavia

Zvyčajne by ste mali behať getty / Etc / inittab a nie z príkazového riadku, alebo niektoré programy spustené na termináli môžu byť neočakávane pozastavené (zastavené). Tu je dôvod, prečo (prečo nie je pre vás dôležité) (preskočte na ďalšiu časť). Ak začnete getty pre say ttyS1 z príkazového riadku iného terminálu, povedzme tty1, potom bude mať tty1 ako "riadiaci terminál", hoci skutočný terminál, na ktorom beží, je ttyS1. Má teda nesprávny riadiaci terminál. Ak je však spustený vo vnútri súboru inittab, bude mať ttyS1 ako riadiaci terminál (správny).

Napriek tomu, že riadiaci terminál je nesprávny, prihlásenie na ttyS1 funguje správne (pretože ste dali ttyS1 ako argument pre getty). Štandardný vstup a výstup sú nastavené na ttyS1 aj keď riadiaca svorka zostáva tty11. Ostatné programy spustené na ttyS1 môžu zdediť tento štandardný vstup / výstup (ktorý je pripojený k ttyS1) a všetko je v poriadku. Ale niektoré programy môžu urobiť chybu pri pokuse o čítanie z ich riadiaceho terminálu (tty1), čo je nesprávne. Teraz tty1 môže myslieť, že tieto programy bežia na pozadí tty1, takže pokus čítať z tty1 (mal by to byť ttyS1) vedie k zastaveniu procesu, ktorý sa pokúšal čítať. (Správanie na pozadí nie je dovolené čítať z riadiaceho terminálu.). Môže sa zobraziť hlásenie: "1 + Zastavené"na obrazovke.V tomto bode ste uviazol, pretože nemôžete komunikovať s procesom, ktorý sa snaží komunikovať s vami cez nesprávny terminál.Samozrejme uniknúť z toho môžete ísť na iný terminál a zabiť proces, atď ,

agetty (môže sa nazvať getty)

Príkladový riadok v / etc / inittab:

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

S1 je z ttyS1. 23 znamená, že getty je spustený pri vstupe do úrovne run 2 alebo 3. respawn znamená, že ak getty (alebo proces, ktorý ho nahradil ako bash) je zabitý, getty sa automaticky spustí (respawn) znova. / sbin / getty je príkaz getty. -L znamená lokálne (ignorujte modemové riadiace signály). -h (nezobrazuje sa v príklade) umožňuje riadenie toku hardvéru (rovnako ako stty crtscts). 19200 je prenosová rýchlosť. ttyS1 znamená / dev / ttyS1 (COM2 v MS-DOS). vt102 je typ terminálu a tento getty nastaví premennú prostredia TERM na túto hodnotu. Neexistujú žiadne konfiguračné súbory. Zadajte príkaz "init q" na príkazovom riadku po úprave getty a uvidíte výzvu na prihlásenie.

Agettyho auto-detekcia paritných problémov

agetty program sa pokúsi automaticky odhaliť sústavu parity v termináli (bez parity). Nepodporuje 8-bitové dátové bajty a 1-bitovú paritu. Pozrite si 8bitové dátové bajty (plus parita). Ak používate stty nastaviť paritu, agetty automaticky zruší, pretože pôvodne chce paritný bit prísť ako keby bol dátový bit. Je to preto, lebo potrebujete získať posledný bit (pravdepodobne bit parity) pri zadávaní prihlasovacieho mena, aby mohol automaticky detekovať paritu. Ak teda používate paritu, povoľte ju iba v rámci textového terminálu a nechajte ju agetty automaticky ho zistiť a nastaviť ho na počítači. Ak váš terminál podporuje prijatú paritu, prihlasovací riadok bude vyzerať skreslený, kým nezadáte niečo tak, aby to mohol detegovať

parity. Zmazaná výzva odradí návštevníkov atď. Od pokusu o prihlásenie. To by mohlo byť práve to, čo chcete.

Tam je niekedy problém s automatickou detekciou parity. Stane sa to preto, že po prvom zadaní prihlasovacieho mena, agetty spustí Prihlásiť sa program dokončiť prihlásenie vás bohužiaľ, Prihlásiť sa program nemôže zistiť paritu, takže ak Getty program nedokázal určiť paritu potom Prihlásiť sa nebudú schopní to ani určiť. Ak prvý pokus o prihlásenie zlyhá, Prihlásiť sa dovolíte to skúsiť znova, atď. (všetci s paritou sú nesprávne). Nakoniec po niekoľkých neúspešných pokusoch o prihlásenie (alebo po uplynutí časového limitu) agetty spustí sa znova a začne prihlasovacie sekvencie znova. Akonáhle je Getty opäť spustený, môže byť schopný zistiť paritu na druhej skúške, takže všetko potom môže fungovať OK.

S nesprávnou paritou, Prihlásiť sa program nemôže správne čítať, čo zadávate a nemôžete sa prihlásiť. Ak váš terminál podporuje prijatú paritu, budete naďalej vidieť skomolenú obrazovku. Ak getty nerozpozná paritu, súbor typu / etc / issue sa zvyčajne vyhodí na obrazovku tesne pred príkazom pred príkazom, takže na obrazovke sa môžu objaviť ďalšie skreslené slová.

Prečo nemôže agetty zistiť paritu prvým napísaným písmenom? Tu je príklad: Predpokladajme, že detekuje 8-bitový bajt s paritným bitom 0 (bit s vysokým poradím) as nepárnym počtom 1-bitov. Aká je parita? No, nepárne číslo 1 bitov znamená, že je to nepárna parita. Ale môže to byť aj 8-bitový znak bez parity. Teraz neexistuje žiadny spôsob, ako určiť, ktoré. Ale zatiaľ sme eliminovali možnosť paritnej rovnováhy. Detekcia parity teda prebieha procesom eliminácie.

Ak je zadaný ďalší bajt podobný prvému a zároveň vylučuje možnosť rovnomernej parity, je stále nemožné určiť paritu. Táto situácia môže trvať neobmedzene a v zriedkavých prípadoch sa prihlásenie zlyhá dovtedy, kým nezmeníte prihlasovacie meno. Ak agetty nájde paritný bit 1, predpokladá sa, že ide o paritný bit a nie bit s vysokým poradím 8-bitového znaku. Preto predpokladá, že vo svojom užívateľskom mene nepoužívate meta-znaky (vysoká sada bitov) (t. J. Že vaše meno je v ASCII).

Jeden sa môže dostať do "prihlasovacej slučky" rôznymi spôsobmi. Predpokladajme, že pre svoje prihlasovacie meno zadáte iba jedno alebo dve písmená a potom stlačíte návrat. Ak tieto písmená nie sú dostatočné na detekciu parity, prihlásenie sa spustí predtým, ako je zistená parita. Niekedy sa vyskytuje tento problém, ak nemáte terminál zapnutý a / alebo pripojený pri prvom spustení agetty.

Ak sa v tejto "prihlasovacej slučke" uviažete, cesta z nej je niekoľkokrát stlačiť spätný kľúč, kým nedostanete výzvu na prihlásenie getty. Ďalšou cestou je len čakať minútu alebo tak nejaký časový limit. Následne sa príkaz Getty prihlási na obrazovku programom getty a môžete sa pokúsiť znova prihlásiť.

8 bitové dátové bajty (plus parita)

Bohužiaľ agetnosť túto paritu nedokáže rozpoznať.Od konca roka 1999 nemá možnosť deaktivovať automatickú detekciu parity a tak zistí nesprávnu paritu. Výsledkom je, že prihlasovací proces bude skomolený a parita bude chybná. Preto sa nezdá byť možné pokúsiť sa používať 8-bitové dátové bajty s paritou.

getty (časť getty_ps)

(Väčšina z toho je zo starého Serial-HOWTO od Grega Hankinsa)Pre tento getty treba vložiť položky do konfiguračného súboru a pridať položku / Etc / inittab, Tu sú niektoré príklady, ktoré sa majú použiť pre váš terminál, ktorý ste vložili do konfiguračného súboru / Etc / gettydefs.

DT38400, DT19200 atď. Sú len štítky a musia byť rovnaké ako tie, ktoré používate / Etc / inittab.

Ak chcete, môžete to urobiť Getty vytlačte zaujímavé veci v prihlasovacom banáne. V mojich príkladoch mám názov systému a sériovú linku vytlačenú. Môžete pridať ďalšie veci: blockquote

odtieň = áno

Po dokončení úprav / Etc / gettydefs, môžete skontrolovať správnosť syntaxe:

Uistite sa, že nie je iný Getty alebo uugetty konfiguračný súbor pre sériový port, ku ktorému je pripojený váš terminál, napríklad/etc/default/{uu}getty.ttySN alebo /etc/conf.{uu}getty.ttySN), pretože to pravdepodobne naruší behu Getty na termináli. Odstráňte takéto konfliktné súbory, ak skončia.

Upravte svoj / Etc / inittab súbor spustiť Getty na sériovom porte (náhrada správnych informácií pre vaše prostredie - port, rýchlosť a predvolený typ terminálu):

V tomto okamihu by ste mali vidieť prihlasovací riadok na vašom termináli. Možno budete musieť vrátiť späť, aby ste získali pozornosť terminálu.

mgetty

"M" znamená modem. Tento program je určený predovšetkým pre modemy a od polovice roka 2000 bude vyžadovať kompiláciu pre jeho použitie pre textové terminály (pokiaľ nepoužívate hardvérové ​​riadenie toku - a to zvyčajne vyžaduje ručný kábel). Pre dokumentáciu pre priamo pripojené terminály si pozrite časť "Priama" v príručke: mgetty.texi.

Pozrite sa na posledné riadky /etc/mgetty/mgetty.config ako príklad jeho konfigurácie pre terminál. Pokiaľ nepoviete "toggle-dtr no", bude si myslieť, že máte modem a zrušíte (zrušíte) pin DTR na počítači v márnom pokuse obnoviť neexistujúci modem. Na rozdiel od iných gettys, mgetty sa nebude pripájať k terminálu, kým niekto nezapadne na ľubovoľný kľúč tohto terminálu, takže uvidíte? pre terminál v top alebo ps kým sa to nestane. Záznamy sa zaznamenajú / Var / log / mgetty / môže zobraziť niekoľko varovných správ, ktoré sa vzťahujú len na modemy, ktoré môžete ignorovať.

Tu je príklad jednoduchého riadku, ktorý ste vložili / Etc / inittab: