14.1 Getty (používá se v souboru / etc / inittab)
Úvod do Getty
Aby byl při spuštění počítače spuštěn přihlašovací proces na sériovém portu (a připojeném terminálu), musí být do souboru / etc / inittab vložen příkaz getty. Spuštění getty z příkazového řádku může způsobit problémy (viz Pokud se getty spustí z příkazového řádku: Programy se zastaví a zjistí proč). Getty získá GTA TTY (terminál). Každý terminál potřebuje vlastní příkaz getty. K dispozici je také alespoň jeden příkaz getty pro konzolu v každém souboru / etc / inittab. Najděte to a dejte příkazy getty pro skutečné terminály vedle něj. Tento soubor může obsahovat ukázkové řádky getty pro textové terminály, které jsou komentovány tak, že stačí je odkomentovat (odstranit přední #) a změnit několik argumentů.
Argumenty, které jsou povoleny, závisí na tom, který getty používáte:Dvě gettys nejlepší pro přímo připojené terminály jsou: Dva gettys nejlepší pro dial-in modemy (vyhnout se přímo připojeným terminálům) jsou: Jednoduché gettys použít, pokud nepoužíváte skutečný text-terminál. Většina uživatelů Linuxu používá jednu z nich na svém monitoru: Distribuce systému Linux se může dodat s ps_getty nebo agetty pro textové terminály. Některé distribuce neposkytují ani jeden. Bohužel je to často nazývá "getty", takže možná budete muset určit, který z nich máte, jelikož argumenty, které jste zadali v / etc / inittab, se liší. Debian používá agetty (v balíčku util-linux). RedHat a Fedora používají ps_getty, který je na adrese: ps_getty Jako poslední možnost, abyste se pokusili zjistit, který getty máte, můžete se podívat na jeho spustitelný kód (obvykle v / sbin). ps_getty má / etc / gettydefs vložený do tohoto kódu. Chcete-li ji vyhledat, přejděte na / sbin a zadejte:řetězce getty grep getty Pokud je getty skutečně agetty, výsledkem bude nic. Nicméně pokud máte typování agetty:getty -hby měly zobrazit možnosti -HiLmw. Pokud nemáte getty, který chcete, zkontrolujte ostatní distribuce a mimozemšťan program pro konverzi mezi balíčky RPM a Debian. Zdrojový kód lze stáhnout ze softwaru Getty. Pokud nepoužíváte modemové řídicí linky (například pokud používáte pouze minimální počet 3 vodičů: vysílací, přijímací a společnou signální zem), měli byste to nechat know-how pomocí "místní" vlajky. Formát toho závisí na tom, který getty používáte. Po přihlášení zjistíte, že proces getty již není spuštěn (pomocí příkazu "top", "ps -ax" nebo "ptree"). Co se tomu stalo? Proč se zase zase restartuje, pokud je váš shell zabit? Zde je důvod. Po zadání uživatelského jména se dostane getty a zavolá přihlašovací program, který mu oznámí vaše uživatelské jméno. Proces getty je nahrazen procesem přihlášení. Přihlašovací proces vyžaduje zadání hesla, kontroluje jej a spustí jakýkoliv proces zadaný v souboru s heslem. Tento proces je často bash shell. Pokud tomu tak je, bash spustí a nahradí proces přihlášení. Všimněte si, že jeden proces nahrazuje jiný proces a že proces bash shellu byl původně zahájen jako proces getty. Důsledky této skutečnosti budou vysvětleny níže. Nyní v souboru / etc / inittab, getty má být respawn (restart), pokud je zabit. Říká to tak na linii, která volá getty. Ale pokud je bash shell (nebo přihlašovací proces) zabit, getty respawns (restarts). Proč? No jak přihlašovací proces, tak bash jsou náhražky pro getty a dědictví * Textový terminálový textový index signálovým spojením stanoveným jejich předchůdci. Ve skutečnosti, pokud pozorujete detaily, zjistíte, že proces nahrazování bude mít stejný procesní ID jako původní proces. Takže bash je trochu getty v přestrojení se stejným identifikačním číslem procesu. Pokud je bash zabit, je to stejně jako Getty byl zabit (i když Getty už neběží). To vede k tomu, Když se někdo odhlásí, všechny procesy na tomto sériovém portu jsou zabity, včetně shell bash. To se může také stát (pokud je povoleno), pokud je vysílaný signál vyslán do sériového portu kvůli poklesu napětí DCD modemem. Buď odhlášení nebo pokles v DCD bude mít za následek gay respawning. Jeden může donutit getty k respawn ruční zabíjení bash (nebo přihlásit) buď stiskem k klíče, atd., Zatímco v "horní" nebo s "zabít" příkaz. Bude pravděpodobně třeba ji zabít se signálem 9 (což nelze ignorovat). Obvykle byste měli běžet uvnitř / etc / inittab a nikoliv z příkazového řádku nebo některé programy běžící na terminálu mohou být neočekávaně pozastaveny (zastaveny). Zde je důvod, proč (přeskočte na další část, pokud pro vás není pro vás důležité). Pokud začnete getty pro say ttyS1 z příkazového řádku jiného terminálu, řekněme tty1, pak bude mít tty1 jako "řídicí terminál", i když skutečný terminál, na němž běží, je ttyS1. Má tedy nesprávný řídící terminál. Pokud je však spuštěn uvnitř souboru inittab, bude mít ttyS1 jako řídicí terminál (správný). I když je kontrolní terminál špatný, přihlášení na ttyS1 funguje dobře (protože jste zadali ttyS1 jako argument pro getty). Standardní vstup a výstup jsou nastaveny na ttyS1, přestože řídicí svorka zůstává tty11. Jiné programy běžící na ttyS1 mohou dědit tento standardní vstup / výstup (který je připojen k ttyS1) a vše je v pořádku. Některé programy však mohou učinit chybu v pokusu číst z jejich řídícího terminálu (tty1), což je špatné. Nyní může tty1 myslet, že tyto programy běží na pozadí tty1, takže pokus číst z tty1 (měl by to být ttyS1) má za následek zastavení procesu, který se pokoušel číst. (Proces pozadí není povolen číst z jeho řídícího terminálu.). Může se zobrazit zpráva, která zní: "1 + Zastaveno"na obrazovce.V tomto okamžiku jste uvízli, protože nemůžete komunikovat s procesem, který se snaží komunikovat s vámi prostřednictvím špatného terminálu. Samozřejmě uniknout z toho můžete jít na jiný terminál a zabít proces, atd. . Ukázkový řádek v souboru / etc / inittab:
S1 je z ttyS1. 23 znamená, že getty je spuštěn po zadání úrovně běhu 2 nebo 3. respawn znamená, že pokud getty (nebo proces, který ho nahradil jako bash) je zabit, getty se automaticky spustí (respawn) znovu. / sbin / getty je příkaz getty. -L znamená lokální (ignorujte modemové řídicí signály). -h (nezobrazeno v příkladu) umožňuje řízení toku hardware (stejně jako stty crtscts). 19200 je přenosová rychlost. ttyS1 znamená / dev / ttyS1 (COM2 v systému MS-DOS). vt102 je typ terminálu a tato getty nastaví proměnnou prostředí TERM na tuto hodnotu. Neexistují žádné konfigurační soubory. Zadejte "init q" na příkazovém řádku po úpravě getty a měli byste vidět výzvu k přihlášení. The agetty program se pokusí automaticky detekovat paritní sadu v terminálu (bez parity). Nepodporuje 8bitové datové bajty a 1bitovou paritu. Viz 8bitové datové bajty (plus parita). Pokud používáte stty nastavit paritu, agetty automaticky ji zruší, protože zpočátku chce, aby paritní bit přišel jako by byl datový bit. Je to proto, že potřebujete získat poslední bit (pravděpodobně bit parity) při zadávání přihlašovacího jména tak, aby mohl automaticky detekovat paritu. Pokud tedy používáte paritu, povolte ji pouze uvnitř textového terminálu a nechte jej agetty automaticky ji zjistit a nastavit na počítači. Pokud váš terminál podporuje přijatou paritu, přihlašovací výzva bude vypadat zkresleněně, dokud nezadáte něco takového, aby mohla getty detekovat parita. Zkrácená výzva odradí návštěvníky atd. Od pokusu o přihlášení. To může být přesně to, co chcete. Někdy je problém s automatickou detekcí parity. K tomu dochází, protože po prvním zadání přihlašovacího jména, agetty spustí přihlásit se program dokončí přihlášení přihlásit se program nemůže detekovat paritu, takže pokud Getty program se pak nepodařilo určit paritu přihlásit se nebudou moci ani určit. Pokud první pokus o přihlášení selže, přihlásit se dovolí vám to zkusit znovu, apod. (všechny s nesprávnou sadou parity). Nakonec po několika neúspěšných pokusech o přihlášení (nebo po uplynutí časového limitu) agetty znovu spustit a znovu spustit přihlašovací sekvence. Jakmile je Getty opět spuštěn, může být schopen detekovat paritu na druhém pokusu, takže vše může fungovat správně. Se špatnou paritou přihlásit se program nemůže správně číst, co zadáváte a nemůžete se přihlásit. Pokud váš terminál podporuje přijatou paritu, budete i nadále zobrazovat zkreslený obraz. Pokud getty nerozpoznává paritu, soubor / etc / issue se obvykle objevuje na obrazovce těsně před příkazem před příkazem, takže na obrazovce se mohou objevit další zkreslené slova. Proč nemůže agetty detekovat paritu prvního napsaného písmena? Zde je příklad: Předpokládejme, že detekuje 8bitový bajt s paritním bitem 0 (high-order bit) as lichým počtem 1 bitů. Jaká je parita? Podivné číslo 1 bitů znamená, že je to lichá parita. Ale mohlo by to být jen 8-bitový znak bez parity. Zatím neexistuje žádný způsob, jak určit co. Ale zatím jsme vyloučili možnost parity. Detekce parity tak probíhá procesem eliminace. Pokud je další zadaný byte podobný prvnímu a zároveň vylučuje možnost rovnoměrné parity, je stále nemožné určit paritu. Tato situace může trvat neomezeně a ve výjimečných případech se přihlášení nezdaří, dokud nezměníte přihlašovací jméno. Pokud agetty nalezne paritní bit 1, předpokládá, že se jedná o paritní bit a nikoliv bit s vysokým pořadím 8-bitového znaku. Předpokládá se tedy, že ve vašem uživatelském jméně nepoužíváte metaznaky (vysoká bitová množina) (tj. Že vaše jméno je v ASCII). Jeden se může dostat do "přihlašovací smyčky" různými způsoby. Předpokládejme, že zadáte pouze jedno nebo dvě písmena pro své přihlašovací jméno a poté stiskněte návrat. Pokud tato písmena nejsou dostatečná k detekci parity, přihlašuje se přihlášení předtím, než je zjištěna parita. Někdy se k tomuto problému dojde, pokud nemáte terminál zapnutý a / nebo připojený při prvním spuštění agetty. Pokud se v této "přihlašovací smyčce" ujmete, je to způsob, jak je několikrát stisknout tlačítko návratu, dokud neobdržíte příkaz getty pro přihlášení. Jiným způsobem je jen čas vypršet minutu. Následně se na obrazovce zobrazí program getty a dostanete se znovu k přihlášení. Bohužel tato agita nemůže rozpoznat tuto paritu.Od konce roku 1999 nemá možnost zakázat automatické zjišťování parity, a tak zjistí nesprávnou paritu. Výsledkem je zkreslení přihlašovacího procesu a nesprávná parita. Zdá se tedy nemožné pokusit se použít 8bitové datové bajty s paritou. (Většina z toho je ze starého Serial-HOWTO od Greg Hankins)Pro tento getty je třeba zadat položky do konfiguračního souboru a přidat položku / etc / inittab. Zde jsou některé příklady, které se mají použít pro váš terminál, který jste vložili do konfiguračního souboru / etc / gettydefs.
Všimněte si, že DT38400, DT19200 atd. Jsou jen štítky a musí být stejné, jaké používáte / etc / inittab. Pokud chcete, můžete to udělat Getty vytiskněte zajímavé věci v přihlašovacího pruhu. Ve svých příkladech mám název systému a sériovou linku vytištěnou. Můžete přidat další věci: blockquote odstín = ano
Po dokončení úpravy / etc / gettydefs, můžete ověřit správnou syntaxi:
Ujistěte se, že není jiná Getty nebo Uugetty konfiguračního souboru pro sériový port, ke kterému je připojen váš terminál, například (/etc/default/{uu}getty.ttySN nebo /etc/conf.{uu}getty.ttySN), protože to pravděpodobně narušuje běh Getty na terminálu. Odstraňte taková konfliktní soubory, pokud skončí. Upravte svůj / etc / inittab soubor spustit Getty na sériovém portu (nahrazující správné informace pro vaše prostředí - port, rychlost a výchozí typ terminálu):
V tomto okamžiku byste měli vidět na terminálu přihlašovací příkaz. Možná budete muset zasáhnout zpět, abyste získali pozornost terminálu. "M" znamená modem. Tento program je určen především pro modemy a od poloviny roku 2000 bude vyžadovat kompilování pro jeho použití pro textové terminály (pokud nepoužíváte řízení toku hardware - a to obvykle vyžaduje ruční kabel). Pro dokumentaci pro přímo připojené svorky viz část "Přímá" příručky: mgetty.texi. Podívejte se na poslední řádky /etc/mgetty/mgetty.config pro příklad konfigurace pro terminál. Pokud neříkáte "toggle-dtr no", bude si myslet, že máte modem a odhodit (zrušit) pin DTR na PC v marném pokusu o resetování neexistujícího modemu. Na rozdíl od ostatních getty, mgetty se nepřipojí k terminálu, dokud někdo nenapadne nějaký klíč tohoto terminálu, takže uvidíš? pro terminál v horní nebo ps dokud se to nestane. Záznamy se zobrazují / var / log / mgetty / může zobrazit několik varovných zpráv, které se vztahují pouze na modemy, které můžete ignorovat. Zde je příklad jednoduché linky, kterou jste vložili / etc / inittab:
Getty se po přihlášení dostanou (a mohou respawn)
Pokud se getty spustí z příkazového řádku: Programy se zastaví
agetty (může být pojmenována getty)
S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102
Agettyho auto-detekce paritních problémů
8bitové datové bajty (plus parita)
getty (část getty_ps)
mgetty