14.1 Getty (folosit în / etc / inittab)
Introducere în Getty
Pentru ca un proces de conectare să funcționeze pe un port serial (și terminalul conectat la acesta) atunci când computerul pornește (sau comută niveluri de execuție), trebuie introdusă o comandă getty în fișierul / etc / inittab. Rularea getty din linia de comandă poate provoca probleme (vedeți dacă getty rulează din linia de comandă: programele se opresc pentru a vedea de ce). Getty primește un TTY (terminal). Fiecare terminal are nevoie de propria comandă getty. Există, de asemenea, cel puțin o comandă getty pentru consola în fiecare fișier / etc / inittab. Găsiți acest lucru și puneți comenzile getty pentru terminalele reale de lângă acesta. Acest fișier poate conține eșantioane de linii getty pentru terminalele de text care sunt comentate, astfel încât tot ce trebuie să faceți este să le dezcomentați (eliminați numărul de conducere #) și să schimbați câteva argumente.
Argumentele care sunt permise depind de ce getty folosiți:Două gettys cele mai bune pentru terminalele conectate direct sunt: Cele două cele mai bune gettys pentru modemurile dial-in (evitați pentru terminalele conectate direct) sunt: Simple gettys de utilizat dacă nu utilizați un terminal text real. Majoritatea utilizatorilor Linux folosesc unul dintre acestea la monitorul lor: Distribuția dvs. Linux poate să apară fie cu ps_getty, fie agetty pentru terminalele de text. Unele distribuții nu furnizează niciunul. Din păcate, ele adesea o numesc "getty", astfel încât ar putea fi necesar să determinați ce dintre ele aveți, deoarece argumentele pe care le puneți în / etc / inittab diferă. Debian folosește agetty (în pachetul util-linux). RedHat și Fedora au folosit ps_getty care este la: ps_getty Ca o ultimă soluție, încercați să determinați ce getty aveți, ați putea verifica codul executabil (de obicei în / sbin). ps_getty are / etc / gettydefs încorporat în acest cod. Pentru ao căuta, accesați / sbin și tastați:siruri de caractere grep getty În cazul în care getty este de fapt agetty de mai sus va duce la nimic. Cu toate acestea, dacă aveți tastatură agetty:getty -har trebui să afișeze opțiunile -hiLmw. Dacă nu aveți gustul pe care doriți să îl verificați pe alte distribuții și pe străin program pentru conversia între pachetele RPM și Debian. Codul sursă poate fi descărcat de la software-ul Getty. Dacă nu utilizați linii de control modem (de exemplu, dacă utilizați doar numărul minim de 3 conductori: transmiteți, primiți și semnalele comune de semnal), ar trebui să lăsați-o pe getty să știe acest lucru folosind un steag "local". Formatul acestui lucru depinde de ce getty utilizați. După ce vă conectați, veți observa (prin utilizarea "top", "ps -ax" sau "ptree") că procesul getty nu mai rulează. Ce s-a intamplat cu el? De ce reluarea getty se repeta dacă shell-ul tău este ucis? Iata de ce. După ce introduceți numele de utilizator, getty îl primește și solicită programul de conectare să-i spună numele de utilizator. Procesul getty este înlocuit de procesul de conectare. Procesul de autentificare solicită parola, verifică-l și pornește orice proces este specificat în fișierul de parolă. Acest proces este de multe ori shell-ul bash. Dacă da, bash începe și înlocuiește procesul de autentificare. Rețineți că un proces înlocuiește altul și că procesul shell-ului bash a început inițial ca proces getty. Implicațiile acestui lucru vor fi explicate mai jos. Acum, în fișierul / etc / inittab, getty se presupune că respawn (restart) dacă este ucis. Se spune așa pe linia care cheamă getty. Dar dacă shell-ul bash (sau procesul de conectare) este ucis, getty respawns (repornește). De ce? Ei bine, atât procesul de conectare, cât și bash-ul sunt înlocuiri pentru getty și moștenire * Text-Terminal Cum-To Index conexiunile de semnal stabilită de predecesorii lor. De fapt, dacă observați detaliile, veți observa că procesul de înlocuire va avea același ID de proces ca și procesul inițial. Astfel, bash este un fel de getty în deghizare cu același ID de proces. Daca bash-ul este ucis, este la fel ca ghetoul a fost ucis (chiar daca getty nu mai functioneaza). Acest lucru are drept rezultat respirația getty. Când se deconectează, toate procesele de pe portul serial sunt ucise, inclusiv shell-ul bash. Acest lucru se poate întâmpla (dacă este activat) dacă un semnal suspendat este trimis la portul serial printr-o picătură de tensiune DCD de către modem. Ori deconectarea sau scăderea în DCD va avea ca rezultat reacția getty respawning. Se poate forta getty să respawn prin uciderea manuală bash (sau login), fie prin lovirea tasta k, etc în timp ce în "sus" sau cu "kill" comanda. Probabil că va trebui să o omori cu semnalul 9 (care nu poate fi ignorat). În mod normal, ar trebui să fugi de la interior / Etc / inittab și nu din linia de comandă sau altfel unele programe care rulează pe terminal pot fi suspendate în mod neașteptat (oprit). Iată de ce (treceți la următoarea secțiune dacă motivul nu este important pentru dvs.). Dacă începeți getty pentru say ttyS1 din linia de comandă a unui alt terminal, spuneți tty1, atunci va avea tty1 ca "terminal de control", chiar dacă terminalul real pe care rulează este ttyS1. Astfel are un terminal greșit de control. Dar dacă a început în interiorul fișierului inittab, acesta va avea ttyS1 ca terminal de control (corect). Chiar dacă terminalul de control este greșit, login-ul la ttyS1 funcționează bine (din moment ce ai dat ttyS1 ca argument pentru getty). Intrarea și ieșirea standard sunt setate la ttyS1 chiar dacă terminalul de control rămâne tty11. Alte programe care rulează la ttyS1 pot moșteni această intrare / ieșire standard (care este conectată la ttyS1) și totul este OK. Dar unele programe pot face greșeala de a încerca să citească de la terminalul de control (tty1), care este greșit. Acum, tty1 poate crede că aceste programe se execută în fundal de către tty1, astfel încât o încercare de a citi de la tty1 (ar fi trebuit să fie ttyS1) duce la oprirea procesului care a încercat să citească. (Un proces de fundal nu este permis să citească de la terminalul său de control.). S-ar putea să vedeți un mesaj de genul: "1 + Oprit"pe ecran În acest moment sunteți blocați deoarece nu puteți interacționa cu un proces care încearcă să comunice cu dvs. prin terminalul greșit Desigur, pentru a scăpa de acest lucru puteți merge la alt terminal și a ucide procesul etc. . O linie de exemplu în / etc / inittab:
S1 este de la ttyS1. 23 înseamnă că getty se execută la intrarea în nivele de rulare 2 sau 3. respawn înseamnă că dacă getty (sau un proces care la înlocuit ca bash) este ucis, getty va porni automat (respawn) din nou. / sbin / getty este comanda getty. -L înseamnă Local (ignorarea modemului de control). -h (nu este prezentat în exemplu) permite controlul debitului hardware (același lucru cu stty crtscts). 19200 este rata baud. ttyS1 înseamnă / dev / ttyS1 (COM2 în MS-DOS). vt102 este tipul de terminal și acest getty va seta variabila de mediu TERM la această valoare. Nu există fișiere de configurare. Introduceți "init q" pe linia de comandă după editarea getty și ar trebui să vedeți un prompt de conectare. agetty programul va încerca să detecteze automat setul de paritate din interiorul terminalului (inclusiv nici o paritate). Nu suportă octeți de date pe 8 biți și paritate pe 1 biți. Vedeți octeți de date pe 8 biți (plus paritate). Dacă utilizați stty pentru a stabili paritatea, agetty va dezactiva automat, deoarece inițial dorește ca bitul de paritate să vină ca și cum ar fi fost un bit de date. Acest lucru se datorează faptului că trebuie să obțineți ultimul bit (posibil un bit de paritate) pe măsură ce tastați numele de conectare, astfel încât acesta să poată detecta automat paritatea. Astfel, dacă utilizați paritatea, activați-o numai în interiorul terminalului text și lăsați-o agetty detecta automat și a setat-o la calculator. Dacă terminalul dvs. acceptă paritatea primită, promptul de autentificare va arăta eronat până când tastați ceva, astfel încât getty să poată detecta paritate. Prognoza deformată va împiedica vizitatorii, etc. să încerce să se autentifice. Asta ar putea fi exact ceea ce vrei. Există uneori o problemă cu detectarea automată a parității. Acest lucru se întâmplă deoarece, după ce introduceți mai întâi numele de conectare, agetty pornește Logare program pentru a termina logarea în tine. Din păcate, Logare programul nu poate detecta paritatea astfel încât în cazul în care getty programul nu a reușit să determine paritatea atunci Logare nu o va putea determina. Dacă prima încercare de conectare nu reușește, Logare vă va permite să încercați din nou, etc. (toate cu paritatea setată greșită). În cele din urmă, după o serie de încercări eșuate de a vă conecta (sau după un timp de expirare) agetty va porni din nou și va porni din nou secvențele de autentificare. Odată ce getty rulează din nou, poate fi capabil să detecteze paritatea pe a doua încercare, astfel încât totul poate funcționa OK. Cu paritate greșită, Logare programul nu poate citi corect ceea ce tastați și nu vă puteți conecta. Dacă terminalul dvs. acceptă paritatea primită, veți continua să vedeți un ecran deformat. Dacă getty nu reușește să detecteze paritatea, un fișier / etc / issue este, de obicei, aruncat pe ecran chiar înainte de prompt, astfel încât pe ecran pot apărea mai multe cuvinte greșite. De ce nu poate detecta agetty paritatea prin introducerea primei litere? Iată un exemplu: Să presupunem că detectează un octet de 8 biți cu bitul său de paritate 0 (biți de înaltă ordine) și cu un număr impar de 1 biți. Care este paritatea? Ei bine, imparatul număr de 1 biți implică faptul că este o paritate ciudată. Dar ar putea fi doar un caracter de 8 biți fără paritate. Nu există nici un fel de până acum pentru a determina care. Dar până acum am eliminat posibilitatea parității. Detecția parității se realizează printr-un proces de eliminare. Dacă următoarea byte tastată este similară cu cea din primul octet și, de asemenea, elimină doar posibilitatea de paritate parțială, este încă imposibil să se determine paritatea. Această situație poate continua pe termen nelimitat și, în cazuri rare, conectarea va eșua până când nu vă schimbați numele de conectare. Dacă agetty găsește un bit de paritate de 1, va presupune că acesta este un bit de paritate și nu un bit de ordin înalt al unui caracter de 8 biți. Se presupune că nu utilizați meta-caractere (setul de biți înalt) în numele dvs. de utilizator (adică numele dvs. este în ASCII). Se poate ajunge într-o "buclă de conectare" în diverse moduri. Să presupunem că introduceți doar o singură literă sau două pentru numele dvs. de conectare și apoi apăsați retur. Dacă aceste litere nu sunt suficiente pentru detectarea parității, atunci conectarea rulează înainte ca paritatea să fi fost detectată. Uneori, această problemă se întâmplă dacă nu aveți terminalul activat și / sau conectat când pornește pentru prima oară. Dacă rămâneți blocat în această "buclă de conectare", o cale de ieșire din ea este să apăsați tasta de revenire de mai multe ori până când primiți promptul de autentificare getty. O altă modalitate este să așteptați doar un minut pentru un timp de expirare. Apoi, promptul de conectare getty va fi pus pe ecran de programul getty și puteți încerca din nou să vă conectați. Din păcate, agetty nu poate detecta această paritate.Începând cu sfârșitul anului 1999, nu are opțiunea de a dezactiva detectarea automată a parității și, astfel, va detecta o paritate incorectă. Rezultatul este că procesul de conectare va fi eronat și paritatea va fi setată greșit. Astfel, nu pare fezabil să încerci să folosești octeți de date pe 8 biți cu paritate. (Cele mai multe dintre acestea sunt de la vechiul serial-HOWTO de Greg Hankins)Pentru acest getty trebuie să introduceți intrări într-un fișier de configurare și să adăugați o intrare în / Etc / inittab. Iată câteva exemple de intrări de utilizat pentru terminalul pe care le-ați introdus în fișierul de configurare / etc / gettydefs.
Rețineți că DT38400, DT19200, etc. sunt doar etichete și trebuie să fie aceleași pe care le utilizați / Etc / inittab. Dacă vrei, poți să faci getty tipăriți lucruri interesante în bannerul de conectare. În exemplele mele, am imprimat numele sistemului și linia serială. Puteți adăuga alte lucruri: blockquote umbra = yes
După ce ați terminat de editat / etc / gettydefs, puteți verifica dacă sintaxa este corectă:
Asigurați-vă că nu există altul getty sau uugetty config pentru portul serial pe care terminalul dvs. este atașat, cum ar fi (/etc/default/{uu}getty.ttySN sau /etc/conf.{uu}getty.ttySN), deoarece acest lucru va interfera, probabil, cu funcționarea getty pe un terminal. Eliminați aceste fișiere în conflict dacă părăsesc acestea. Editați-vă / Etc / inittab fișier pentru a rula getty pe portul serial (înlocuind informațiile corecte pentru mediul dvs. - port, viteză și tip terminal implicit):
În acest moment, ar trebui să vedeți un prompt de conectare pe terminalul dvs. S-ar putea să fiți nevoiți să reveniți pentru a obține atenția terminalului. "M" înseamnă modem. Acest program este destinat în primul rând modemurilor, iar la jumătatea anului 2000 va necesita o recompilare pentru utilizarea acestuia pentru terminalele de tip text (cu excepția cazului în care utilizați controlul fluxului hardware - și de obicei necesită un cablu manual). Pentru documentația pentru terminalele conectate direct, consultați secțiunea "Direct" a manualului: mgetty.texi. Uită-te la ultimele linii /etc/mgetty/mgetty.config pentru un exemplu de configurare a acestuia pentru un terminal. Cu excepția cazului în care spui "toggle-dtr no", va crede că ai un modem și lăsați (negați) pinul DTR de la PC într-o încercare zadarnică de resetare a modemului inexistent. Spre deosebire de alte gettys, mgetty nu se va atașa la un terminal până când cineva nu lovește nici o cheie a acelui terminal, așa că o să vezi? pentru terminalul din top sau ps până se întâmplă acest lucru. Au fost înregistrate buștenii / Var / log / mgetty / pot afișa câteva mesaje de avertizare care se aplică numai modemurilor pe care le puteți ignora. Iată un exemplu al liniei simple pe care o introduceți / Etc / inittab:
Getty iese după conectare (și poate respawn)
Dacă rulează getty din linia de comandă: Programele se opresc
agetty (poate fi numit getty)
S1: 23: respawn: / sbin / getty-L 19200 ttyS1 vt102
Auto-detectarea de către Agetty a problemelor de paritate
8 octeți octeți de date (plus paritate)
getty (parte din getty_ps)
mgetty