Text-Terminals a Linux

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-h
hauria de mostrar les opcions [-hiLmw].

Si no teniu el getty, voleu comprovar altres distribucions i el programa estranger 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.

Getty surt després de l'inici de sessió (i pot tornar a aparèixer)

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 Com-Index 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).

Si getty s'executa des de la línia de comandaments: els programes s'aturen

Normalment haureu d'executar getty des de l'interior / etc / inittab i no des de la línia d'ordres, o bé alguns programes que s'executen al terminal poden ser inesperadament suspès (aturat). 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] + Va deixar " a la pantalla. En aquest punt estàs atrapat ja que no podeu interaccionar amb un procés que intenteu comunicar-vos amb un terminal incorrecte. Per descomptat, per escapar-se d'això, podeu anar a un altre terminal i matar el procés, etc.

agetty (es pot anomenar getty)

Una línia d'exemple a / etc / inittab:

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

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ó.

Determinació automàtica de problemes d'igualtat d'aguts

El programa agetty 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, l' agetty la 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 que l' agetty la detecti automàticament i la configureu 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ò succeeix perquè després d'escriure el vostre nom d'usuari, agetty inicia el programa d' inici de sessió per finalitzar el registre. Malauradament, el programa d' inici de sessió no pot detectar la paritat, de manera que si el programa getty no ha pogut determinar la paritat, el login no serà capaç de determinar tampoc. Si el primer intent d'inici de sessió falla, l' inici de sessió us permetrà intentar-ho de nou, etc. (tot amb el paritat establert incorrecte). Finalment, després d'una sèrie d'intents fallits d'inici de sessió (o després d'un temps d'espera), l' agetty s'iniciarà de nou i s'iniciarà 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 una paritat equivocada, el programa d' inici de sessió 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ó.

Bytes de dades de 8 bits (més paritat)

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.

getty (part de getty_ps)

(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 a / etc / inittab . Aquí teniu algunes entrades d'exemple per al vostre terminal que heu introduït al fitxer de configuració / etc / gettydefs .

# 38400 bps Entrada de terminal tonto DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S inici de sessió: # DT38400 # 19200 bps Entrada de terminal muda DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S login: # DT19200 # 9600 bps Entrada terminal tèrmica DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @L inici de sessió: # DT9600

Tingueu en compte que la DT38400, DT19200, etc. són només etiquetes i han de ser les mateixes que s'utilitzen a / etc / inittab .

Si ho voleu, podeu crear impressions d' impressió getty a la safata 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í] @ B La velocitat actual (avaluada en el moment en què es veu la @ B). @D La data actual, en MM / DD / YY. @L La línia de sèrie a la qual s'adjunta getty. @S El nom del sistema. @ T L'hora actual, a HH: MM: SS (24 hores). @ U El nombre d'usuaris que estan signats actualment. Aquest és un recompte de la quantitat d'entrades en el fitxer / etc / utmp que tenen un camp ut_name no nul. @ V El valor de VERSION, tal com s'indica al fitxer de valors predeterminats. Per mostrar un sol caràcter '@', utilitzeu '\ @' o '@@'.

Quan hàgiu acabat d'editar / etc / gettydefs , podeu verificar que la sintaxi és correcta fent:

linux # getty -c / etc / gettydefs

Assegureu-vos que no hi ha cap altre fitxer de configuració getty o uugetty per al port sèrie que el vostre terminal està connectat a ( /etc/default/{uu}getty.ttyS N o /etc/conf.{uu}getty.ttyS N ) , ja que probablement interfereix amb running getty en un terminal. Elimineu aquests fitxers conflictius si surten.

Editeu el fitxer / etc / inittab per executar getty al port sèrie (substituint la informació correcta per al vostre entorn: port, velocitat i tipus de terminal predeterminat):

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

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.

mgetty

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 del 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 darreres 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 al terminal a la part superior o ps fins que això passi. Els registres a / var / log / mgetty / poden 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 a / etc / inittab:

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