14.1 Getty (utilitzat a / etc / inittab)
Introducció a Getty
Per tenir un procés d'inici de sessió en un port sèrie (i el terminal connectat a ell) quan s'inicia l'ordinador (o canvia els nivells d'execució) s'ha d'introduir una comanda getty al fitxer / etc / inittab. Executar getty des de la línia de comandaments pot causar problemes (consulteu Si getty s'executa des de la línia de comandaments: els programes es deixen de veure per què). Getty aconsegueix un TTY (un terminal). Cada terminal necessita la seva pròpia comanda getty. També hi ha almenys una ordre getty per a la consola en cada fitxer / etc / inittab. Trobeu això i posa els comandaments getty per als veritables terminals que hi ha al costat. Aquest fitxer pot contenir línies d'obtenció d'exemple per a terminals de text que es comenten de manera que tot el que heu de fer és descomptar-los (suprimiu el número líder) i canviar alguns arguments.
Els arguments que es permeten depenen del getty que utilitzeu:Dos accesstys millors per als terminals connectats directament són: Dos accesstys millors per als mòdems de marcatge (evitant terminals connectats directament) són: Aplicacions simples per usar si no utilitzeu un terminal de text real. La majoria d'usuaris de Linux fan servir un d'ells al monitor: La vostra distribució de Linux pot venir amb ps_getty o agetty per a terminals de text. Algunes distribucions no subministren cap de les dues. Malauradament, solen cridar-lo "getty", per tant, és possible que necessiteu determinar quina tens, ja que els arguments que heu posat després de / etc / inittab difereixen. Debian utilitza agetty (en el paquet util-linux). RedHat i Fedora utilitzen ps_getty que es troba a: ps_getty Com a últim recurs per intentar determinar quin getty té, podeu comprovar el codi executable (normalment a / sbin). ps_getty té / etc / gettydefs incrustat en aquest codi. Per cercar-lo, aneu a / sbin i escrigui:cadenes getty | grep getty Si getty és realment agutty, l'anterior no generarà res. Tanmateix, si teniu l'escriptura agutty:getty-hhauria de mostrar les opcions -hiLmw. Si no teniu el getty, voleu comprovar altres distribucions i el estranger programa per convertir entre paquets RPM i Debian. El codi font es pot descarregar de Getty Software. Si no utilitzeu línies de control de mòdem (per exemple, si només utilitzeu el nombre mínim de 3 conductors: transmissió, recepció i senyal de senyal comú), heu de permetre que Getty ho sàpiga utilitzant un indicador "local". El format d'això depèn del fet que utilitzeu. Després d'iniciar la sessió, us advertireu (usant "top", "ps -ax" o "ptree") que ja no s'està executant el procés getty. Què li va passar? Per què el getty torna a reiniciar si el vostre intèrpret d'ordres és assassinat? Heus aquí per què. Després d'escriure el vostre nom d'usuari, Getty ho pren i truca al programa d'inici de sessió que us indica el vostre nom d'usuari. El procés getty se substitueix pel procés d'inici de sessió. El procés d'inici de sessió demana la vostra contrasenya, el comprova i inicia qualsevol procés especificat al vostre fitxer de contrasenya. Aquest procés sol ser la closca bash. Si és així, bash inicia i substitueix el procés d'inici de sessió. Tingueu en compte que un procés substitueix a un altre i que el procés de shell bash va començar originalment com a procés getty. Les implicacions d'això s'explicaran a continuació. Ara, en el fitxer / etc / inittab, se suposa que getty reprendrà (reiniciar) si és assassinat. Es diu així a la línia que diu "getty". Però si el shell bash (o el procés d'inici de sessió) moren, getty respawns (reinicia). Per què? Bé, tant el procés d'inici de sessió com el bash són reemplaçaments per getty i hereta * Índex d'ús de Terminal de text les connexions de senyals establertes pels seus predecessors. De fet, si observeu els detalls, us adonareu que el procés de substitució tindrà el mateix ID del procés que el procés original. Així, bash és una mena de getty disfressat amb el mateix número d'identificació del procés. Si bash és assassinat, és just com es va assassinar a getty (tot i que ja no s'executa). Això dóna lloc a la recuperació d'un getty. Quan es tanca, tots els processos en aquest port serial són assassinats incloent el shell bash. Això també pot passar (si està habilitat) si un senyal de penjat s'envia al port sèrie mitjançant una baixada de voltatge DCD pel mòdem. O la sortida o la caiguda de DCD provocaran la recuperació d'un getty. Un pot forçar el rescat per manipular manualment bash (o inici de sessió) ja sigui fent clic a la tecla k, etc. mentre està a "dalt" o amb l'ordre "kill". És probable que hàgiu de matar-lo amb el senyal 9 (que no es pot ignorar). Normalment hauríeu d'executar getty des de dins / etc / inittab i no des de la línia d'ordres, o bé alguns programes que s'executen al terminal es poden suspendre inesperadament (es va aturar). Heus aquí perquè (salteu a la següent secció si el motiu no és important per a vosaltres). Si comenceu getty per dir ttyS1 des de la línia de comandaments d'un altre terminal, diguem tty1, llavors tindrà tty1 com el seu "terminal de control" tot i que el terminal real que s'executa és ttyS1. Per tant, té el terminal de control incorrecte. Però si s'inicia al fitxer inittab, tindrà ttyS1 com a terminal de control (correcte). Tot i que el terminal de control no funciona, l'inici de sessió a ttyS1 funciona bé (ja que vau donar ttyS1 com a argument per getty). L'entrada i la sortida estàndard s'estableixen en ttyS1 tot i que el terminal de control es manté tty11. Altres programes executats a ttyS1 poden heretar aquesta entrada / sortida estàndard (que està connectat a ttyS1) i tot està ben. Però alguns programes poden cometre l'error d'intentar llegir des del terminal de control (tty1) que està malament. Ara tty1 pot pensar que aquests programes s'estan executant en segon pla per tty1, de manera que un intent de llegir de tty1 (que hauria d'haver estat ttyS1) resulta en aturar el procés que intentava llegir. (No es pot llegir un procés de fons des del terminal de control.). Podeu veure un missatge com: "1 + S'ha aturat"a la pantalla. En aquest moment estàs atrapat, ja que no podeu interactuar amb un procés que intenteu comunicar-vos amb el terminal incorrecte. Per descomptat, per escapar-ne, podeu anar a un altre terminal i matar el procés, etc. . Una línia d'exemple a / etc / inittab:
S1 és de ttyS1. 23 significa que el getty s'executa al entrar en els nivells d'execució 2 o 3. respawn significa que si getty (o un procés que el va substituir com bash) és mort, getty es tornarà a engegar automàticament (respawn). / sbin / getty és l'ordre getty. El -L significa local (ignora senyals de control de mòdem). -h (no es mostra a l'exemple) permet el control del flux de maquinari (igual que els càlculs estables). 19200 és la taxa de baudios. ttyS1 significa / dev / ttyS1 (COM2 en MS-DOS). vt102 és el tipus de terminal i aquest getty establirà la variable d'entorn TERM a aquest valor. No hi ha fitxers de configuració. Escriviu "init q" a la línia d'ordres després d'editar el getty i haureu de veure un indicador d'inici de sessió. El agetty el programa intentarà detectar automàticament el conjunt de paritats dins del terminal (incloent-hi la paritat). No suporta bytes de dades de 8 bits més la paritat de 1 bit. Vegeu bytes de dades de 8 bits (més paritat). Si utilitzeu Stty per establir la paritat, agetty ho anul·larà automàticament ja que inicialment vol que el bit de paritat passi com si es tractés d'un bit de dades. Això és degut a que necessita obtenir l'últim bit (possiblement un bit de paritat) a mesura que escriu el nom d'inici de sessió perquè pugui detectar la paritat automàticament. D'aquesta manera, si utilitzeu la paritat, habiliteu-la només a l'interior del terminal de text i deixeu-ho agetty detecta-la automàticament i configureu-la a l'ordinador. Si el vostre terminal admet la paritat rebuda, l'indicatiu d'inici de sessió es mostrarà desordenat fins que escriviu alguna cosa per tal que el detector pugui detectar-lo paritat L'indicador més confús esborrarà als visitants, etc., d'intentar iniciar sessió. Això podria ser el que vols. De vegades hi ha un problema amb la detecció automàtica de la paritat. Això passa perquè després d'escriure el vostre nom d'usuari, agetty comença el iniciar Sessió programa per acabar de tancar sessió. Malauradament, el iniciar Sessió El programa no pot detectar la paritat, així que si el getty El programa no va poder determinar la paritat iniciar Sessió tampoc no podrà determinar-la. Si el primer intent d'inici de sessió falla, iniciar Sessió et permetrà provar de nou, etc. (tot amb la paritat equivocada). Finalment, després d'una sèrie d'intents fallits d'inici de sessió (o després d'un temps d'espera) agetty tornar a iniciar-se i començar de nou les seqüències d'inici de sessió. Una vegada que el getty torna a funcionar, pot ser capaç de detectar la paritat en el segon intent perquè tot funcioni. Amb la paritat equivocada, la iniciar Sessió el programa no pot llegir correctament el que escriu i no podeu iniciar la sessió. Si el vostre terminal admet la paritat rebuda, continuareu veient una pantalla confusa. Si getty no detecta la paritat, el fitxer / etc / issue normalment es deixa a la pantalla just abans de l'inici de l'avís, de manera que es poden mostrar paraules més nítides a la pantalla. Per què no es pot detectar la paritat amb la primera lletra escrita? Heus aquí un exemple: Suposem que detecta un byte de 8 bits amb la seva bit de paritat 0 (bit d'ordre superior) i amb un nombre estrany de bits de 1. Quina paritat és? Bé, el nombre imparell d'1 bit implica que és una paritat estranya. Però també podria ser un personatge de 8 bits sense paritat. Ara no hi ha manera de determinar quins. Però fins ara hem eliminat la possibilitat d'igual paritat. La detecció de la paritat procedeix així d'un procés d'eliminació. Si el següent byte escrit és similar al primer i també només elimina la possibilitat de paritat, encara no es pot determinar la paritat. Aquesta situació pot continuar indefinidament i, en casos excepcionals, l'inici de sessió fallarà fins que canvieu el nom d'inici de sessió. Si agetty troba un bit de paritat de 1, suposarà que aquest és un bit de paritat i no un bit d'ordre superior d'un caràcter de 8 bits. Per tant, se suposa que no utilitzeu meta-caràcters (conjunt de bits alts) al vostre nom d'usuari (és a dir, que el vostre nom es troba a ASCII). Un pot entrar en un "inici de sessió" de diverses maneres. Suposem que només escriviu una sola lletra o dues per al vostre nom d'usuari i després feu una devolució. Si aquestes lletres no són suficients per a la detecció de paritat, l'inici de sessió s'executa abans que s'hagi detectat la paritat. De vegades, aquest problema passa si no teniu el terminal connectat i / o quan s'inicia per primera vegada. Si us queden atrapats en aquest "inici de sessió", una sortida és fer clic a la tecla de retorn diverses vegades fins que obtingueu l'indicatiu d'inici de sessió de getty. Una altra manera és esperar un minut o menys per un temps d'espera. A continuació, el programa Getty posarà a la pantalla el missatge d'inici de sessió de Getty i podràs tornar a intentar iniciar sessió. Malauradament, l'agutty no pot detectar aquesta paritat.A finals de 1999 no té cap opció per desactivar la detecció automàtica de la paritat i, per tant, detectarà la paritat incorrecta. El resultat és que el procés d'inici de sessió serà il·legible i la paritat es defectuarà. Per tant, no sembla factible intentar utilitzar bytes de dades de 8 bits amb paritat. (La major part d'això és de l'antic Serial-HOWTO de Greg Hankins)Per a aquest getty, cal posar les entrades en un fitxer de configuració i afegir una entrada / etc / inittab. A continuació, es mostren algunes entrades d'exemple per al vostre terminal que heu introduït al fitxer de configuració / etc / gettydefs.
Tingueu en compte que la DT38400, DT19200, etc. són només etiquetes i han de ser les mateixes que utilitzeu / etc / inittab. Si ho voleu, podeu fer-ho getty imprimiu coses interessants al bàner d'inici de sessió. En els meus exemples, tinc el nom del sistema i la línia serial impresa. Podeu afegir altres coses: blockquote ombra = sí
Quan hagis acabat d'editar / etc / gettydefs, podeu verificar que la sintaxi és correcta fent:
Assegureu-vos que no hi ha cap altre getty o uugetty fitxer de configuració del port sèrie que el vostre terminal està connectat a (com (/etc/default/{uu}getty.ttySN o /etc/conf.{uu}getty.ttySN), ja que això probablement interfereixi amb l'execució getty en una terminal. Elimineu aquests fitxers conflictius si surten. Editeu la vostra / etc / inittab fitxer per executar getty al port sèrie (substituint la informació correcta per al vostre entorn: port, velocitat i tipus de terminal predeterminat):
En aquest punt, hauríeu de veure un indicador d'inici de sessió al vostre terminal. És possible que hagueu de prémer la devolució per cridar l'atenció del terminal. El "m" significa mòdem. Aquest programa és principalment per a mòdems i, a partir de mitjans de 2000, requerirà recompilar per utilitzar-lo per a terminals de text (llevat que utilitzeu el control de flux de maquinari, i que normalment requereix un cable fet a mà). Per a la documentació de terminals connectats directament, consulteu la secció "Directa" del manual: mgetty.texi. Mireu les últimes línies de /etc/mgetty/mgetty.config per a un exemple de configuració d'un terminal. A no ser que diguis "toggle-dtr no", pensareu que teniu un mòdem i deixeu anar (nega) el PIN DTR al PC en un intent inútil de restablir el mòdem inexistent. A diferència d'altres "gettys", mgetty no s'adhereix a un terminal fins que algú toca cap tecla d'aquest terminal, així que veurà un? per a la terminal a superior o ps fins que això passi. Els registres / var / log / mgetty / pot mostrar alguns missatges d'advertència que només s'apliquen als mòdems que podeu ignorar. Aquí teniu un exemple de la línia senzilla que heu introduït / etc / inittab:
Getty surt després de l'inici de sessió (i pot tornar a aparèixer)
Si getty s'executa des de la línia de comandaments: els programes s'aturen
agetty (es pot anomenar getty)
S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102
Detecció automàtica de problemes de paritat d'Agetty
Bytes de dades de 8 bits (més paritat)
getty (part de getty_ps)
mgetty