Skip to main content

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:

  • agetty (néha csak getty): nagyon könnyű beállítani. Nincs konfigurációs fájl. Lásd agetty
  • getty (getty_ps része)

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

  • mgetty: a legjobb a modemekhez; a terminálokhoz is működik, de rosszabb
  • uugetty: csak modemek esetén; a getty_ps csomag része

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

  • mingetty
  • fbgetty
  • fgetty
  • rungetty

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-hmeg kell mutatnia a [-hiLmw] opciókat.

Ha nincs meg a getty, akkor ellenőrizze az egyéb terjesztéseket és a idegen program konvertálni 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

Általában getty-t kell futtatnod belülről / Etc / inittab és nem 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] + leállt"a képernyőn.Ekkor megakadtunk, mert nem tudunk kapcsolatba lépni azzal a folyamattal, amely a rossz terminálon keresztül próbál kommunikálni veled, természetesen ennek elkerülése érdekében el lehet menni egy másik terminálhoz, és megölheti 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.

Agetty a paritás problémáinak automatikus felderítése

A agetty a 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 használsz stty a paritás beállítása, agetty automatikusan leválasztja, mivel kezdetben azt szeretné, hogy a paritás bit úgy jöhessen át, mintha adatbit 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 egyenlőséget használsz, engedélyezd csak a szövegterminálon belül és hagyd agetty automatikusan észleli és beállítja a számítógépre. 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 miután először írta be a bejelentkezési nevét, agetty elindítja a Belépés A program befejezni a bejelentkezést. Sajnos a Belépés a program nem tudja észlelni a paritást, tehát ha a getty program nem tudta meghatározni a paritást Belépés nem lesz képes meghatározni sem. Ha az első bejelentkezési kísérlet sikertelen, Belépés megpróbálhatja újra, stb. (mindegyik a paritással rosszul van beállítva). Végül, miután számos sikertelen bejelentkezési kísérletet (vagy egy időtúllépés után) agetty újra elindul és újrakezdi a bejelentkezési sorozatokat. 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ő paritással a Belépés a program nem tudja megfelelően olvasni a beírt karaktereket, és nem tud bejelentkezni. Ha a terminál támogatja a kapott paritásokat, továbbra is látni fogja a megkülönböztetett 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 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 / Etc / inittab. Íme néhány olyan példa, amelyet a terminálnak a konfigurációs fájlba helyezett használatához használnia kell / Etc / gettydefs.

Ne feledje, hogy a DT38400, DT19200 stb. Csak címkék, és meg kell egyeznie a használatával / Etc / inittab.

Ha akarod, akkor megteheti getty érdekes dolgokat nyomtasson 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]

Amikor elkészült a szerkesztés / Etc / gettydefs, akkor ellenőrizheti, hogy a szintaxis helyes-e:

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

Szerkessze / Etc / inittab fájlt futtatni getty a soros porton (a helyes információ helyére a környezet - port, sebesség és alapértelmezett terminál típus helyett):

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ézd meg az utolsó sorokat /etc/mgetty/mgetty.config például 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 számára felső vagy ps amíg ez meg nem történik. A naplók / Var / log / mgetty / néhány figyelmeztető üzenetet jeleníthet meg, amelyek csak olyan modemekre vonatkoznak, amelyeket figyelmen kívül hagyhat.

Íme egy példa az Ön által megadott egyszerű sorra / Etc / inittab: