Text-Terminals en Linux

14.1 Getty (usado en / etc / inittab)

Introdución a Getty

Para que se execute un proceso de inicio de sesión nun porto serie (eo terminal conectado a el) cando a computadora se inicia (ou cambia os niveis de execución), un comando getty debe ser colocado no ficheiro / etc / inittab. Executar getty desde a liña de comandos pode causar problemas (consulte Se getty executado desde a liña de comandos: os programas póñense parar para ver por que). Getty GETs un TTY (un terminal) indo. Cada terminal precisa o seu propio comando getty. Tamén hai polo menos un comando getty para a consola en cada ficheiro / etc / inittab. Busque isto e coloque os comandos getty para os terminais reais ao seu carón. Este ficheiro pode conter liñas de exemplo de getty para os terminais de texto que se comentan de xeito que todo o que cómpre facer é descompoñelos (elimine o número principal) e modifique algúns argumentos.

Os argumentos que se permiten dependen do getty que use:
Dous dos gettys mellores para terminais conectados directamente son:

Os dous modos mellores para obter módems de acceso telefónico (evitar os terminais conectados directamente) son:

Empregados simples para usar se non usa un verdadeiro terminal de texto. A maioría dos usuarios de Linux usan un destes no seu monitor:

A distribución de Linux pode vir con ps_getty ou agetty para terminais de texto. Algunhas distribucións non ofrecen ningunha. Desafortunadamente, adoitan chamalo "getty" polo que pode ter que determinar o que ten dende que os argumentos que puxo despois en / etc / inittab difiren. Debian usa agetty (no paquete util-linux). RedHat e Fedora usaron ps_getty que está en: ps_getty

Como último recurso para intentar determinar que getty ten, pode comprobar o seu código executable (xeralmente en / sbin). ps_getty ten / etc / gettydefs incrustado neste código. Para buscar isto, vai a / sbin e escribe:
cordas getty | grep getty
Se getty é realmente agetty o anterior non producirá nada. Non obstante, se tes typing agetty:
getty -h
debería amosar as opcións [-hiLmw].

Se non ten o getty queres verificar outras distribucións e o programa extra para converter entre paquetes RPM e Debian. O código fonte pode descargarse de Getty Software.

Se non está a usar liñas de control de módem (por exemplo, se só usa o número mínimo de 3 condutores: transmisión, recepción e chan de sinal común), debería deixar que Getty coñeza isto usando unha bandeira "local". O formato deste depende do que getty usa.

Getty sae despois do inicio de sesión (e pode recuperarse)

Despois de iniciar sesión notarás (usando "top", "ps -ax" ou "ptree") que o proceso getty xa non se está executando. Que lle pasou? Por que getty reinicia de novo se o seu casca é morto? Vela por que.

Despois de escribir o seu nome de usuario, getty lévase e chama ao programa de inicio de sesión que lle indica o nome de usuario. O proceso getty substitúese polo proceso de inicio de sesión. O proceso de inicio de sesión solicita o seu contrasinal, comproba e inicia calquera proceso especificado no seu ficheiro de contraseña. Este proceso é moitas veces o bash shell. Se é así, bash comeza e substitúe o proceso de inicio de sesión. Teña en conta que un proceso substitúe a outro e que o proceso de bash shell iniciouse inicialmente como o proceso getty. As implicacións deste serán explicadas a continuación.

Agora no ficheiro / etc / inittab, se supón que getty respawn (reiniciar) se morreu. Di iso na liña que chama getty. Pero se o shell bash (ou o proceso de inicio de sesión) é morto, getty respawns (reinicia). Por que? Ben, tanto o proceso de inicio de sesión como o bash son reemplazos para getty e herdar

* Índice de How-To do Terminal de Texto

as conexións de sinal establecidas polos seus predecesores. De feito, se observas os detalles, notarás que o proceso de substitución terá o mesmo ID de proceso que o proceso orixinal. Así, bash é un tipo de getty disfrazado co mesmo número de identificación do proceso. Se bash é asasinado, é como se mata a getty (aínda que o getty xa non está funcionando). Isto resulta en recuperación de getty.

Cando un sae, todos os procesos nese porto serial son asasinados, incluíndo o shell bash. Isto tamén pode ocorrer (se está activado) se un sinal de hangup é enviado ao porto serie por unha caída de tensión DCD polo módem. Ou a saída ou a caída en DCD dará lugar a rescate de getty. Pódese forzar a recuperación do rescate manualmente ao matar manualmente (ou ingresar) ou premendo a tecla k, etc. mentres que en "arriba" ou co comando "matar". Probablemente deberá matalo co sinal 9 (que non se pode ignorar).

Se getty é executado desde a liña de comandos: os programas están detidos

Normalmente debería executar getty desde o interior / etc / inittab e non desde a liña de comandos ou ben algúns programas que se executan no terminal poden suspenderse de xeito inesperado (parado). Aquí está o porqué (omita a seguinte sección se o motivo non é importante para ti). Se inicia Getty por dicir ttyS1 da liña de comandos doutro terminal, digamos tty1, entón terá tty1 como o seu "terminal de control" aínda que o terminal real en que se execute sexa ttyS1. Así ten o terminal de control incorrecto. Pero se comezou dentro do ficheiro inittab, terá ttyS1 como o terminal de control (correcto).

Aínda que o terminal de control está mal, o inicio de sesión en ttyS1 funciona moi ben (dado que deu ttyS1 como argumento para getty). A entrada e a saída estándar establécense en ttyS1 a pesar de que o terminal de control permaneza tty11. Outros programas executado en ttyS1 poden herdar esta entrada / saída estándar (que está conectada a ttyS1) e todo está ben. Pero algúns programas poden cometer o erro de tentar ler do seu terminal de control (tty1) o que está mal. Agora tty1 pode pensar que estes programas están sendo executados en segundo plano por tty1 polo que un intento de ler de tty1 (debería ter sido ttyS1) resulta na parada do proceso que intentaba ler. (Non se pode ler un proceso de fondo desde o seu terminal de control.). Pode ver unha mensaxe coma: " [1] + Detido " na pantalla. Neste punto estás atrapado xa que non podes interactuar cun proceso que estás a comunicar contigo a través dun terminal incorrecto. Por suposto, para escapar deste pode ir a outro terminal e matar o proceso, etc.

agetty (pode ser chamado getty)

Unha liña de exemplo en / etc / inittab:

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

S1 é de ttyS1. 23 significa que getty é executado ao entrar nos niveis de execución 2 ou 3. respawn significa que se getty (ou un proceso que o substituíu como bash) é morto, getty volveuse a iniciar (respawn) automaticamente. / sbin / getty é o comando getty. O -L significa Local (ignora os sinais de control de módem). -h (non amosado no exemplo) permite o control de fluxo de hardware (mesmo como crtscts stty). 19200 é a taxa de baudios. ttyS1 significa / dev / ttyS1 (COM2 en MS-DOS). vt102 é o tipo de terminal e este getty estabelecerá a variable de ambiente TERMO a este valor. Non hai ficheiros de configuración. Escriba "init q" na liña de comando despois de editar o getty e debería ver un aviso de inicio de sesión.

Detección automática de problemas de paridade de Agetty

O programa agetty tentará detectar automaticamente o conxunto de paridades dentro do terminal (incluíndo ningunha paridade). Non admite os bytes de datos de 8 bits máis a paridade de 1 bit. Consulte bytes de datos de 8 bits (máis paridade). Se usa stty para definir a paridade, a agetty automaticamente a desfacerá, xa que inicialmente quere que o bit de paridade se realice coma se fose un bit de datos. Isto é porque precisa obter o último bit (posiblemente un bit de paridade) mentres escribe o seu nome de usuario para que poida detectar automaticamente a paridade. Deste xeito, se usa a paridade, habilítaa só dentro do terminal de texto e deixe que o detecte automaticamente e configure isto na computadora. Se o seu terminal admite a paridade recibida, a solicitude de inicio de sesión verá descoidado ata que escriba algo para que o getty poida detectar

paridade. O indicador descarado disuadirá aos visitantes, etc., de tentar iniciar sesión. Isto podería ser só o que quere.

Ás veces hai un problema coa detección automática da paridade. Isto ocorre porque despois de escribir o seu nome de usuario, agetty inicia o programa de inicio de sesión para rematar o inicio de sesión. Por desgraza, o programa de inicio de sesión non pode detectar paridade polo que se o programa getty non puido determinar a paridade, entón o inicio de sesión non poderá determinar tampouco. Se o primeiro intento de inicio de sesión falla, o inicio de sesión permítelle probar de novo, etc. (todo o conxunto de paridades é incorrecto). Eventualmente, despois de varios intentos de iniciar sesión (ou despois dun tempo de espera) agetty volverá a reiniciar e iniciar as secuencias de inicio de sesión de novo. Unha vez que o getty está a executarse de novo, pode ser capaz de detectar a paridade na segunda proba para que todo poida funcionar.

Con paridade incorrecta, o programa de inicio de sesión non pode ler correctamente o que escribe e non pode iniciar sesión. Se o seu terminal admite paridade recibida, continuará a ver unha pantalla confusa. Se o getty non detecta a paridade, un ficheiro / etc / issue normalmente será descargado á pantalla xusto antes do antes da solicitude, polo que poden aparecer máis palabras confusas na pantalla.

Por que non se pode detectar a paridade coa primeira letra escrita? Aquí tes un exemplo: Supoña que detecta un byte de 8 bits co seu bit de paridade 0 (bit de orde) e cun número impar de 1 bits. Que paridade é? Ben, o número impar de 1 bit implica que é paridade estraña. Pero tamén podería ser un personaxe de 8 bits sen paridade. Non hai xeito ata agora para determinar cal. Pero ata agora eliminamos a posibilidade de paridade paritaria. A detección da paridade prodúcese así por un proceso de eliminación.

Se o seguinte byte tipificado é similar ao primeiro e tamén só elimina a posibilidade de paridade uniforme, aínda é imposible determinar a paridade. Esta situación pode continuar indefinidamente e, en casos excepcionais, o inicio de sesión fallará ata que cambie o nome de usuario. Se a agetty atopa un bit de paridade de 1, suporá que isto é un bit de paridade e non un bit de orde superior dun carácter de 8 bits. Supón, así, que non usa meta-caracteres (conxunto de bit alto) no seu nome de usuario (é dicir, que o seu nome está en ASCII).

Pódese entrar nun "bucle de inicio de sesión" de varias maneiras. Supoña que só escriba unha única letra ou dúas para o seu nome de usuario e despois pulse retorno. Se estas letras non son suficientes para a detección de paridade, o inicio de sesión executarase antes de que se detecte a paridade. Ás veces este problema ocorre se non ten o terminal activado e / ou conectado cando se inicia por primeira vez.

Se quedas atrapado neste "loop de inicio de sesión", un xeito de saír dela é pulsar a tecla de retorno varias veces ata que obteñas a solicitude de inicio de sesión de getty. Outra forma é agardar un minuto ou máis por un tempo de espera. A continuación, o prompt de inicio de sesión de getty será colocado na pantalla polo programa getty e podes tentalo de novo para iniciar sesión.

Bytes de datos de 8 bits (máis paridade)

Desafortunadamente, a agresividade non pode detectar esta paridade. A finais de 1999 non ten opción para deshabilitar a detección automática da paridade e así detectará a paridade incorrecta. O resultado é que o proceso de inicio de sesión será ilegal e que a paridade se equivocará. Por iso, non parece factible intentar usar os bytes de datos de 8 bits con paridade.

getty (parte de getty_ps)

(A maior parte disto é do antigo Serial-HOWTO de Greg Hankins)
Para este getty, hai que poñer as entradas nun ficheiro de configuración e engadir unha entrada en / etc / inittab . Aquí tes algunhas entradas de exemplo que usarás para o teu terminal que poñas no ficheiro de configuración / etc / gettydefs .

# 38400 bps Entrada Dumb Terminal DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S login: # DT38400 # 19200 bps Entrada Dumb Terminal DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S login: # DT19200 # 9600 bps Entrada Dumb Terminal DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ L inicio de sesión: # DT9600

Teña en conta que o DT38400, DT19200, etc. son só etiquetas e deben ser as mesmas que usa en / etc / inittab .

Se o desexa, pode facer impresións de impresión getty no banner de inicio de sesión. Nos meus exemplos, teño o nome do sistema e a liña serial impresa. Podes engadir outras cousas: [blockquote

sombra = si] @ B A velocidade actual (valorada no momento en que se ve o @ B). @D A data actual, en MM / DD / YY. @L A liña de serie á que está conectado getty. @S O nome do sistema. @ T A hora actual, en HH: MM: SS (24 horas). @U Número de usuarios conectados. Este é un reconto do número de entradas no ficheiro / etc / utmp que teñen un campo ut_name non nulo. @ V O valor de VERSION, como se indica no ficheiro de valores predeterminados. Para mostrar un só carácter '@', use '\ @' ou '@@'.

Cando remate de editar / etc / gettydefs , pode verificar que a sintaxe é correcta facendo:

linux # getty -c / etc / gettydefs

Asegúrese de que non haxa outro ficheiro de configuración getty ou uugetty para o porto serie que o seu terminal está conectado (por exemplo, /etc/default/{uu}getty.ttyS N ou /etc/conf.{uu}getty.ttyS N ) , xa que isto probablemente interfire co running getty nun terminal. Elimina eses ficheiros conflitantes se saen.

Edite o ficheiro / etc / inittab para executar getty no porto serie (substituíndo a información correcta para o seu entorno: porto, velocidade e tipo de terminal predeterminado):

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

Neste punto, debería ver un aviso de inicio de sesión no seu terminal. Pode ter que facer unha volta para obter a atención do terminal.

muxty

O "m" significa modem. Este programa é principalmente para módems e a partir de mediados de 2000 necesitará recompilar para usalo para terminais de texto (a menos que use control de fluxo de hardware e que normalmente require un cable feito a man). Para a documentación de terminais directamente conectados, consulte a sección "Directo" do manual: mgetty.texi.

Mire as últimas liñas de /etc/mgetty/mgetty.config para un exemplo de configuralo para un terminal. A menos que diga "toggle-dtr non" pensará que ten un módem e soltar (negar) o pin DTR no PC nun intento inútil de restablecer o módem inexistente. En contraste con outros Gettys, Mgetty non se conectará a un terminal ata que alguén atope calquera tecla dese terminal para que vexa un? para o terminal superior ou ps ata que isto ocorre. Os rexistros en / var / log / mgetty / poden amosar algunhas mensaxes de advertencia que só se aplican aos módems que pode ignorar.

Aquí tes un exemplo da liña sinxela que pon en / etc / inittab:

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