Szövegterminálok Linuxon

14.1 Getty (használt / etc / inittab)

Bevezetés a Getty-be

Annak érdekében, hogy a soros porton (és a hozzá csatlakozó terminálon) a számítógép indításakor (vagy a futási szintek váltásakor) egy bejelentkezési folyamat futjon, egy getty parancsot kell elhelyezni az / etc / inittab fájlba. A getty futtatása a parancssorból problémákat okozhat (lásd: Ha a getty fut a parancssorból: A programok leállnak, hogy megtudják, miért). Getty GET egy TTY (terminál) megy. Minden terminálnak saját getty parancsra van szüksége. Minden egyes / etc / inittab fájlban van legalább egy getty parancs a konzol számára. Keresse meg ezt, és tegye a getty parancsokat a valósidejű terminálok mellé. Ez a fájl tartalmazhat minta getty-sorokat a szöveges terminálokhoz, amelyek megjegyzést fűznek hozzá, így mindössze annyit kell tennie, hogy elhagyja őket (eltávolítja a vezető # -et), és megváltoztat néhány érvet.

A megengedett érvek függenek attól, hogy melyik gettyet használja:
A közvetlenül csatlakoztatott terminálok számára két legjobb megoldás:

A dial-in modemekhez két legjobb megoldás (a közvetlenül csatlakoztatott terminálok elkerülése érdekében):

Egyszerű gettys, ha nem használsz igazi szöveges terminált. A legtöbb Linux-felhasználó az egyiket használja a monitoron:

A Linux disztribúció a ps_getty vagy a agetty szöveges terminálokhoz jöhet. Egyes terjesztések sem kínálnak semmit. Sajnos gyakran csak "getty" -nek nevezik, így meg kell tudnia határozni, hogy melyik van, mióta az / etc / inittab fájlban megadott argumentumok különböznek. A Debian az agetty-t használja (az util-linux csomagban). A RedHat és a Fedora a ps_getty-t használta, amely a következő helyen áll: ps_getty

Végső megoldásként megpróbálhatja meghatározni, hogy melyik getty van, ellenőrizheti a végrehajtható kódját (általában a / sbin fájlban). A ps_getty a / etc / gettydefs beágyazott ebben a kódban. A kereséshez menjen a / sbin könyvtárba és írja be:
szálak getty | grep getty
Ha a getty valóban a fenti, akkor semmi sem lesz. Ha azonban gépiesen írsz:
getty-h
meg kell mutatnia a [-hiLmw] opciókat.

Ha nincs meg a getty, akkor ellenőrizze a többi eloszlást és az idegen programot az RPM és a Debian csomagok között. A forráskód letölthető a Getty Software-ból.

Ha nem használod a modemvezérlő vonalat (például ha csak a minimális számú 3 vezetéket használod: adás, vétel és közös jelterhelés), hagyd, hogy a getty ezt "helyi" jelzővel ismerje meg. Ennek formátuma függ attól, hogy melyiket használja.

A Getty a bejelentkezés után kilép (és újra tud megjelenni)

Miután bejelentkezett, észrevesz (a "top", "ps -ax" vagy "ptree" használatával), hogy a getty folyamat már nem fut. Mi történt vele? Miért újraindul újra a getty, ha megölte a shelljét? Ezért van.

Miután megadta a felhasználónevét, a getty elveszi, és felhívja a bejelentkezési programot, hogy mondja el a felhasználónevét. A getty folyamat helyébe a bejelentkezési folyamat lép. A bejelentkezési folyamat megkérdezi a jelszavát, ellenőrzi és elindítja a jelszófájlban megadott eljárást. Ez a folyamat gyakran a bash shell. Ha igen, a bash elindul, és felváltja a bejelentkezési folyamatot. Vegyük észre, hogy egy folyamat helyett egy másik, és hogy a bash shell folyamat eredetileg getty folyamatként indult. Ennek következményeit az alábbiakban ismertetjük.

Most az / etc / inittab fájlban a gettynek újra kell indítania (újraindítás), ha megölik. Azt mondja a vonal, hogy hívja getty. De ha a bash shell (vagy a bejelentkezési folyamat) meg van ölve, a getty respawns (újraindul). Miért? Nos, mind a bejelentkezési folyamat, mind a bash a getty-nek és az öröklésnek helyettesíti

* Szöveges terminál használati útmutató

a jelkapcsolatokat az elődeik hozták létre. Valójában, ha betartja a részleteket, akkor észre fogod venni, hogy a helyettesítő folyamat azonos folyamatazonosítóval fog rendelkezni, mint az eredeti folyamat. Így a bash egyfajta getty, ugyanabban a folyamatazonosítóban álcázva. Ha bash-t ölték meg, olyan, mint a getty megölt (bár a getty már nem fut). Ez a getty újraindítását eredményezi.

Amikor kijelentkezik, a soros port összes folyamata megölik, beleértve a bash parancsikont is. Ez akkor is megtörténhet (ha engedélyezve van), ha a modemhez egy csepp DCD feszültséget küld a soros portra. Vagy a DCD kijelentkezés vagy leesés a getty újraindítását eredményezi. Az egyiket arra kényszeríthetjük, hogy a getty újrainduljon kézzel a bash (vagy login) megölésével, vagy a "top" vagy a "kill" paranccsal a k kulcs stb. Valószínűleg meg kell ölnöd a 9-es jelzéssel (amit nem lehet figyelmen kívül hagyni).

Ha a getty fut a parancssorból: A programok leállnak

A getty-t általában a / etc / inittab- ból kell futtatni a parancssorból, vagy pedig a terminálon futó programok váratlanul felfüggeszthetők (leállítva). Ezért van (menj át a következő részre, ha miért nem fontos számodra). Ha elindítod a getty parancsot a ttyS1-nek egy másik terminál parancssorából, mondjuk tty1, akkor tty1 lesz a "vezérlő terminálja", annak ellenére, hogy az aktuális terminál fut az ttyS1-ben. Így rossz irányító terminálja van. De ha az inittab fájl belsejében kezdődik, akkor ttyS1 lesz a vezérlő terminál (helyes).

Annak ellenére, hogy a vezérlő terminál nem megfelelő, a ttyS1-ben történő bejelentkezés jól működik (mivel ttyS1-et adtál a getty argumentumaként). A standard bemenet és kimenet ttyS1-re van állítva, még akkor is, ha a vezérlő terminál tty11 marad. A ttyS1-ben futó egyéb programok örökölhetik ezt a szabványos bemenetet / kimenetet (amely csatlakozik a ttyS1-hez), és minden rendben van. De egyes programok hibát követhetnek el, ha megpróbálják olvasni az ellenőrző termináltól (tty1), ami rossz. Most tty1 úgy gondolja, hogy ezek a programok a háttérben futtatják a tty1-et, így a tty1-ről (ttyS1-ről) való olvasás megkísérli megállítani az olvasni kívánt folyamatot. (A háttérfolyamat nem olvasható le a vezérlő terminálról.). Lehet, hogy valami hasonló üzenetet lát: " [1] + Megállt " a képernyőn. Ezen a ponton ragadt, mivel nem tud kommunikálni egy olyan folyamattal, amely a rossz terminálon keresztül próbál kommunikálni veled. Persze, hogy elmenekülsz ettől, eljuthatsz egy másik terminálhoz és megölik a folyamatot stb.

agetty (lehet getty)

Példa a / etc / inittab fájlban:

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

Az S1 a ttyS1-ből származik. 23 azt jelenti, hogy a getty a 2. vagy 3. futtatási szint beírása után fut be. Respawn azt jelenti, hogy ha a getty (vagy egy olyan folyamat, amely helyettesítette, mint például a bash), a getty automatikusan újraindul (respawn). / sbin / getty az getty parancs. A -L jelentése Helyi (figyelmen kívül hagyja a modem vezérlőjeleket). -h (nem látható a példában) lehetővé teszi a hardver áramlás szabályozását (ugyanúgy, mint a stty crtscts). 19200 a baud rate. A ttyS1 jelentése / dev / ttyS1 (COM2 az MS-DOS-ban). A vt102 a terminál típusa, és ez a getty beállítja a TERM környezeti változót erre az értékre. Nincsenek konfigurációs fájlok. Írja be a "init q" parancsot a parancssorba a getty szerkesztése után, és megjelenjen egy bejelentkezési prompt.

A paritásproblémák automatikus felismerése

Az agetty program megpróbálja automatikusan észlelni a terminálon belüli paritásértéket (beleértve a paritást is). Nem támogatja a 8 bites adatbájtokat és az 1 bites paritet. Lásd a 8 bites adatbájtokat (plusz paritás). Ha stty- t használ a paritás beállításához, akkor az agetty automatikusan kikapcsolja, mivel kezdetben azt szeretné, hogy a paritásbillentyű mintha ez egy adatbillentyű lenne. Ennek az az oka, hogy be kell szereznie az utolsó bitet (esetleg egy paritásbitet), miközben beírja a bejelentkezési nevét, hogy automatikusan detektálhassa a paritást. Így ha paritásszolgáltatást használsz, engedélyezd csak a szövegterminálon belül, és hagyd addig automatikusan észlelni és beállítani a számítógépet. Ha a terminál támogatja a kapott paritásokat, akkor a bejelentkezési parancs meg nem jelenik, amíg be nem ír valamit, hogy a getty észlelje

paritás. A megszakadt gyorsbillentyű megakadályozza a látogatókat, stb. Ez lehet az, amit akarsz.

Néha problémát okoz a paritás automatikus felismerése. Ez azért történik, mert a bejelentkezési név első beírása után az agetty elindítja a bejelentkezési programot, hogy befejezze a bejelentkezést. Sajnos a bejelentkezési program nem ismeri fel a paritást, ezért ha a getty program nem tudja megállapítani a paritást, akkor a bejelentkezés nem tudja meghatározni vagy. Ha az első bejelentkezési kísérlet sikertelen, a bejelentkezés lehetővé teszi, hogy újra próbálkozzon, stb. (Mindegyik paritáskészlet hibás). Végül, miután számos sikertelen bejelentkezési kísérletet (vagy egy késleltetés után), az agetty újra elindul és újrakezdi a bejelentkezési szekvenciákat. Miután a getty újra fut, lehet, hogy fel tudja ismerni a paritásokat a második próbálkozásnál, így minden rendben lehet.

Nem megfelelő párhuzamossággal a bejelentkezési program nem tudja megfelelően olvasni a beírt szöveget, és nem tud bejelentkezni. Ha a terminál támogatja a kapott paritásokat, továbbra is látni fog egy elakadt képernyőt. Ha a getty nem észleli a paritásokat, az / etc / issue fájl általában a képernyő előtt megjelenik a képernyő előtt, ezért a képernyőn több megszakadt szó jelenhet meg.

Miért nem észlelhető a paritás az első betűvel? Íme egy példa: Tegyük fel, hogy egy 8 bites bájtot észlel paritásos bitjével 0 (nagy rendű bit) és páratlan számú 1 bites értékkel. Milyen paritás van? Nos, az 1 bites páratlan szám azt jelenti, hogy furcsa paritás. De ez egy 8 bites karakter is lehet, de nincs paritás. Eddig még nincs mód annak meghatározására, hogy melyik. De eddig elhárítottuk az egyenlőség lehetőségét. A paritás kimutatása így egy elhárítási eljárással megy végbe.

Ha a következő bájt beírása hasonló az elsőhöz, és csak kiküszöböli az egyenlő paritás lehetőségét, még mindig lehetetlen meghatározni a paritást. Ez a helyzet határozatlan ideig folytatódhat, és ritkán a bejelentkezés sikertelen lesz, amíg meg nem változtatja a bejelentkezési nevét. Ha az agetty egy 1 paritásbitet talál, feltételezi, hogy ez egy paritásbit, és nem egy nagybetűs 8 bites karakter. Ezért azt feltételezi, hogy nem használ meta-karaktereket (nagy bit-készletet) a felhasználónévben (azaz, hogy a neved ASCII-ban van).

A "login hurok" különböző módokon juthat be. Tegyük fel, hogy csak egy vagy két betűt ír be a bejelentkezési nevéhez, majd nyomja meg a visszatérést. Ha ezek a betűk nem elegendők a paritásfelismeréshez, akkor a bejelentkezés a paritás észlelése előtt fut. Néha ez a probléma akkor fordul elő, ha nincs meg a terminál és / vagy csatlakoztatva, amikor az agetty elindul.

Ha elakadsz ebben a "bejelentkezési hurokban", akkor a visszatérési kulcs többszörös lesz, amíg meg nem kapod a getty login promptot. Egy másik módja az, hogy csak egy percig várj egy kis időt. Ezután a getty bejelentkezési parancsot a getty program fogja beolvasni a képernyőre, és újra próbálkozhat a bejelentkezéssel.

8 bites adatbájtok (plusz paritás)

Sajnos, az agetty nem tudja felismerni ezt a paritást. Az 1999-es évtől kezdve nincs lehetőség arra, hogy letiltja a paritás automatikus felismerését, és így rossz pontosságot érzékel. Az eredmény az, hogy a bejelentkezési folyamat megzavarodik, és a paritás hibás. Így nem tűnik megvalósíthatónak a 8 bites adatbájtok paritásos használatát.

getty (getty_ps része)

(A legtöbb ez Greg Hankins régi Serial-HOWTO-jából származik)
Ehhez a getty-hez mindegyiknek meg kell adnia egy bejegyzést egy konfigurációs fájlba, és hozzá kell adnia egy bejegyzést az / etc / inittab könyvtárba. Íme néhány példa a terminálhoz, amelyet a / etc / gettydefs konfigurációs fájlba helyezünk .

# 38400 bps Dumb terminál bejegyzés DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @L bejelentkezés: # DT38400 # 19200 bps Dumb terminál bejegyzés DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @L bejelentkezés: # DT19200 # 9600 bps Dumb terminál bejegyzés DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @L bejelentkezés: # DT9600

Ne feledje, hogy a DT38400, DT19200 stb. Csak címkék, és ugyanazoknak kell lenniük, mint az / etc / inittab fájlban .

Ha szeretné, akkor a getty- nyomtatásban érdekes dolgokat tud nyomtatni a bejelentkezési bannerben. Példáimban a rendszer nevét és a soros vonalat nyomtatom. Más dolgokat is hozzáadhat: [blockquote

árnyék = yes] @B Az aktuális érték (amelyet a @B látható időpontjában értékeltek) bps sebességgel. @D Az aktuális dátum, MM / DD / YY. @L A soros vonal, amelyhez a getty van csatlakoztatva. @S A rendszer neve. @T A jelenlegi idő, HH: MM: SS (24 órás). @U A jelenleg aláírt felhasználók száma. Ez az / etc / utmp fájlban lévő bejegyzések száma, amelyek nem null ut_name mezővel rendelkeznek. @V A VERSION értéke, ahogy azt az alapértelmezett fájl tartalmazza. Egy "@" karakter megjelenítéséhez használja a "\ @" vagy "@@" karaktereket.

Ha végzett az / etc / gettydefs szerkesztésével, ellenőrizheti, hogy a szintaxis helyes-e:

linux # getty -c / etc / gettydefs

Győződjön meg róla, hogy nincs olyan getty vagy uugetty konfigurációs fájl a soros porthoz, amelyhez a terminálja csatlakozik, például ( /etc/default/{uu}getty.ttyS N vagy /etc/conf.{uu}getty.ttyS N ) , mivel ez valószínűleg zavarja a getty futását a terminálon. Távolítsa el az ütköző fájlokat, ha kilép.

Szerkessze az / etc / inittab fájlját a getty futtatásához a soros porton (helyette a helyes információkat a környezet - port, sebesség és alapértelmezett terminál típus helyett):

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

Ezen a ponton egy bejelentkezési promptot kell látnia a terminálon. Előfordulhat, hogy vissza kell térnie, hogy megkapja a terminál figyelmét.

mgetty

Az "m" a modemet jelenti. Ez a program elsősorban a modemekhez készült, és 2000 közepétől újra kell fordítani a szöveges terminálokhoz (kivéve, ha hardveres áramlásvezérlést használ - és általában kézi kábelt igényel). A közvetlenül csatlakoztatott terminálok dokumentációját lásd a kézikönyv "Közvetlen" részében: mgetty.texi.

Nézze meg az /etc/mgetty/mgetty.config utolsó sorát egy terminál konfigurálásához. Hacsak nem mondja a "toggle-dtr no" -ot, akkor úgy fogja gondolni, hogy van egy modem, és cáfolja (megtagadja) a DTR-t a PC-n egy hihetetlen kísérletben, hogy visszaállítsa a nem létező modemet. Ellentétben más gettysekkel, a mgetty nem csatlakozik a terminálhoz, amíg valaki a terminál bármelyik kulcsát nem érinti, így egy? a terminál tetejére vagy ps-be, amíg ez meg nem történik. A / var / log / mgetty / naplófájlok néhány figyelmeztető üzenetet jeleníthetnek meg, amelyek csak olyan modemekre vonatkoznak, amelyeket figyelmen kívül hagyhat.

Íme egy példa az / etc / inittab- ban megadott egyszerű sorra :

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