Skip to main content

Terminales de texto en Linux - 14.1 Getty (usado en / etc / inittab)

Comando en Linux, crear, copiar, eliminar (Carpeta/directorio) y archivo de texto (Abril 2025)

Comando en Linux, crear, copiar, eliminar (Carpeta/directorio) y archivo de texto (Abril 2025)
Anonim

14.1 Getty (usado en / etc / inittab)

Introducción a Getty

Para que un proceso de inicio de sesión se ejecute en un puerto serie (y el terminal conectado a él) cuando la computadora se inicie (o cambie los niveles de ejecución), se debe colocar un comando getty en el archivo / etc / inittab. La ejecución de getty desde la línea de comando puede causar problemas (vea Si getty se ejecuta desde la línea de comando: los programas se detienen para ver por qué). Getty obtiene un TTY (un terminal) en marcha. Cada terminal necesita su propio comando getty. También hay al menos un comando getty para la consola en cada archivo / etc / inittab. Encuentre esto y coloque los comandos getty para los terminales reales al lado. Este archivo puede contener líneas de muestra de ejemplo para terminales de texto que están comentadas, de modo que todo lo que necesita hacer es descomentarlas (eliminar el número inicial) y cambiar algunos argumentos.

Los argumentos que están permitidos dependen de qué getty uses:Los dos mejores para los terminales conectados directamente son:

  • agetty (a veces solo se llama getty): muy fácil de configurar. No hay archivos de configuración. Ver agetty
  • getty (parte de getty_ps)

Los dos mejores para los módems de marcación de entrada (evitar los terminales conectados directamente) son:

  • mgetty: el mejor para modems; Funciona también para terminales pero inferior.
  • uugetty: sólo para módems; parte del paquete getty_ps

Sencillos envíos para usar si no usa un terminal de texto real. La mayoría de los usuarios de Linux usan uno de estos en su monitor:

  • Mingetty
  • fbgetty
  • temerario
  • Rungetty

Su distribución de Linux puede venir con ps_getty o agetty para terminales de texto. Algunas distribuciones no suministran ninguna. Desafortunadamente, a menudo solo lo llaman "getty", por lo que es posible que deba determinar cuál tiene, ya que los argumentos que coloca después en / etc / inittab son diferentes. Debian usa agetty (en el paquete util-linux). RedHat y Fedora usaron ps_getty que está en: ps_getty

Como último recurso para tratar de determinar el tipo de teléfono que tiene, puede revisar su código ejecutable (generalmente en / sbin). ps_getty tiene / etc / gettydefs incrustado en este código. Para buscarlo, ve a / sbin y escribe:cuerdas getty | grep getty Si Getty está en realidad, lo anterior resultará en nada. Sin embargo, si usted tiene tiping agetty:getty -hDebe mostrar las opciones -hiLmw.

Si no tiene el getty que desea, consulte otras distribuciones y el extraterrestre Programa para convertir entre paquetes RPM y Debian. El código fuente se puede descargar desde Getty Software.

Si no está utilizando líneas de control de módem (por ejemplo, si solo usa el número mínimo de 3 conductores: transmisión, recepción y señal de masa común), debe informar a getty utilizando una bandera "local". El formato de esto depende de que getty uses.

Getty sale después de iniciar sesión (y puede reaparecer)

Después de iniciar sesión, notará (al usar "top", "ps -ax" o "ptree") que el proceso getty ya no se está ejecutando. ¿Que le paso a eso? ¿Por qué getty se reinicia de nuevo si se mata su shell? Este es el por qué.

Después de escribir su nombre de usuario, getty lo toma y llama al programa de inicio de sesión diciéndole su nombre de usuario. El proceso getty se sustituye por el proceso de inicio de sesión. El proceso de inicio de sesión solicita su contraseña, la comprueba y comienza cualquier proceso que se especifique en su archivo de contraseña. Este proceso es a menudo el shell bash. Si es así, bash inicia y reemplaza el proceso de inicio de sesión. Tenga en cuenta que un proceso reemplaza a otro y que el proceso de shell bash se inició originalmente como el proceso getty. Las implicaciones de esto se explicarán a continuación.

Ahora, en el archivo / etc / inittab, se supone que reaparezca (reinicie) si se elimina. Lo dice en la línea que llama a getty. Pero si el shell bash (o el proceso de inicio de sesión) es eliminado, getty respawns (reinicia). ¿Por qué? Bueno, tanto el proceso de inicio de sesión como el bash son reemplazos de getty y heredan

* Indice de instrucciones de terminal de texto

Las conexiones de señal se establecen por sus predecesoras. De hecho, si observa los detalles, notará que el proceso de reemplazo tendrá la misma ID de proceso que el proceso original. Por lo tanto, bash es una especie de disfrazado con el mismo número de ID de proceso. Si se mata a bash, es como si mataran a getty (incluso aunque no se esté ejecutando más). Esto se traduce en la reaparición de getty.

Cuando uno se desconecta, todos los procesos en ese puerto serie se eliminan, incluido el shell bash. Esto también puede suceder (si está habilitado) si el módem envía una señal de suspensión al puerto serie por una caída de voltaje DCD. Ya sea el cierre de sesión o la caída en DCD resultará en un reaparición de getty. Uno puede obligar a getty a reaparecer matando manualmente a bash (o iniciando sesión) ya sea presionando la tecla k, etc. mientras se encuentra en "superior" o con el comando "matar". Es probable que necesites matarlo con la señal 9 (que no se puede ignorar).

Si getty se ejecuta desde la línea de comando: los programas se detienen

Normalmente deberías ejecutar getty desde el interior. / etc / inittab y no desde la línea de comandos o, de lo contrario, algunos programas que se ejecutan en el terminal se pueden suspender (detener) inesperadamente. He aquí por qué (pase a la siguiente sección si el por qué no es importante para usted). Si inicia getty para say ttyS1 desde la línea de comando de otro terminal, diga tty1, entonces tendrá tty1 como su "terminal de control" aunque el terminal real en el que se ejecuta es ttyS1. Así tiene el terminal de control equivocado. Pero si se inicia dentro del archivo inittab, tendrá ttyS1 como terminal de control (correcto).

A pesar de que el terminal de control es incorrecto, el inicio de sesión en ttyS1 funciona bien (ya que le dio ttyS1 como argumento a getty). La entrada y salida estándar están configuradas en ttyS1 aunque el terminal de control permanece en tty11. Otros programas que se ejecutan en ttyS1 pueden heredar esta entrada / salida estándar (que está conectada a ttyS1) y todo está bien. Pero algunos programas pueden cometer el error de intentar leer desde su terminal de control (tty1), lo cual es incorrecto. Ahora tty1 puede pensar que tty1 está ejecutando estos programas en segundo plano, por lo que un intento de leer desde tty1 (debería haber sido ttyS1) hace que se detenga el proceso que intentó leer. (No se permite leer un proceso en segundo plano desde su terminal de control). Puedes ver un mensaje como: "1 + Detenido"en la pantalla. En este punto está bloqueado, ya que no puede interactuar con un proceso que intenta comunicarse con usted a través del terminal equivocado. Por supuesto, para escapar de este puede ir a otro terminal y finalizar el proceso, etc. .

agetty (puede ser nombrado getty)

Una línea de ejemplo en / etc / inittab:

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

S1 es de ttyS1. 23 significa que getty se ejecuta al entrar en los niveles de ejecución 2 o 3. respawn significa que si se elimina getty (o un proceso que lo reemplazó, como bash), getty se iniciará automáticamente (respawn) nuevamente. / sbin / getty es el comando getty. La -L significa Local (ignorar las señales de control del módem). -h (no se muestra en el ejemplo) habilita el control de flujo de hardware (igual que stty crtscts). 19200 es la velocidad en baudios. ttyS1 significa / dev / ttyS1 (COM2 en MS-DOS). vt102 es el tipo de terminal y este getty establecerá la variable de entorno TERM en este valor. No hay archivos de configuración. Escriba "init q" en la línea de comandos después de editar getty y debería ver un aviso de inicio de sesión.

La autodetección de problemas de paridad de Agetty.

los agetty El programa intentará detectar automáticamente la paridad establecida dentro del terminal (incluida la no paridad). No admite bytes de datos de 8 bits más paridad de 1 bit. Ver bytes de datos de 8 bits (más paridad). Si utiliza stty para establecer la paridad, agetty lo desarmará automáticamente, ya que inicialmente quiere que el bit de paridad llegue como si fuera un bit de datos. Esto se debe a que necesita obtener el último bit (posiblemente un bit de paridad) a medida que escribe su nombre de inicio de sesión para que pueda detectar automáticamente la paridad. Por lo tanto, si usa paridad, habilítelo solo dentro del terminal de texto y deje agetty Auto-detectarlo y configurarlo en la computadora. Si su terminal admite paridad recibida, el indicador de inicio de sesión se verá confuso hasta que escriba algo para que getty pueda detectar la

paridad. El indicador confuso disuadirá a los visitantes, etc. de intentar iniciar sesión. Eso podría ser justo lo que quieres.

A veces hay un problema con la detección automática de paridad. Esto sucede porque después de que primero escribe tu nombre de inicio de sesión, agetty comienza el iniciar sesión programa para terminar de iniciar sesión. Desafortunadamente, la iniciar sesión programa no puede detectar la paridad por lo que si el getty programa no pudo determinar la paridad entonces iniciar sesión Tampoco podrá determinarlo. Si el primer intento de inicio de sesión falla, iniciar sesión le permitirá volver a intentarlo, etc. (todo con la paridad configurada incorrectamente). Finalmente, después de varios intentos fallidos de inicio de sesión (o después de un tiempo de espera) agetty se iniciará de nuevo y comenzará de nuevo las secuencias de inicio de sesión. Una vez que getty se está ejecutando de nuevo, puede detectar la paridad en el segundo intento para que todo funcione correctamente.

Con paridad errónea, la iniciar sesión el programa no puede leer correctamente lo que escribe y no puede iniciar sesión. Si su terminal admite paridad recibida, seguirá viendo una pantalla confusa. Si getty no puede detectar la paridad, un archivo / etc / issue generalmente se descarga en la pantalla justo antes del aviso, por lo que pueden aparecer más palabras confusas en la pantalla.

¿Por qué Agetty no puede detectar la paridad con la primera letra escrita? Aquí hay un ejemplo: supongamos que detecta un byte de 8 bits con su bit de paridad 0 (bit de orden superior) y con un número impar de 1 bit. ¿Qué paridad es? Bueno, el número impar de 1 bits implica que es paridad impar. Pero también podría ser un personaje de 8 bits sin paridad. Hasta ahora no hay forma de determinar cuál. Pero hasta ahora hemos eliminado la posibilidad de paridad par. La detección de la paridad se produce así por un proceso de eliminación.

Si el siguiente byte escrito es similar al primero y también elimina la posibilidad de paridad, es imposible determinar la paridad. Esta situación puede continuar indefinidamente y en casos raros el inicio de sesión fallará hasta que cambie su nombre de inicio de sesión. Si Agetty encuentra un bit de paridad de 1, asumirá que este es un bit de paridad y no un bit de orden superior de un carácter de 8 bits. Por lo tanto, se supone que no utiliza los metacaracteres (conjunto de bits altos) en su nombre de usuario (es decir, que su nombre está en ASCII).

Uno puede entrar en un "bucle de inicio de sesión" de varias maneras. Supongamos que solo escribe una o dos letras para su nombre de inicio de sesión y luego pulsa regresar. Si estas letras no son suficientes para la detección de paridad, entonces el inicio de sesión se ejecuta antes de que se haya detectado la paridad. A veces, este problema ocurre si no tiene el terminal encendido y / o conectado cuando se inicia Agetty por primera vez.

Si se queda atascado en este "bucle de inicio de sesión", una forma de salir de él es presionando la tecla de retorno varias veces hasta que aparezca el indicador de inicio de sesión de getty. Otra forma es simplemente esperar un minuto más o menos por un tiempo de espera. Luego, el programa getty colocará en la pantalla el aviso de inicio de sesión de getty y puede intentar iniciar sesión nuevamente.

Bytes de datos de 8 bits (más paridad)

Desafortunadamente, Agetty no puede detectar esta paridad.A partir de finales de 1999, no tiene opción para deshabilitar la autodetección de paridad y, por lo tanto, detectará paridad incorrecta. El resultado es que el proceso de inicio de sesión será confuso y la paridad será incorrecta. Por lo tanto, no parece factible tratar de usar bytes de datos de 8 bits con paridad.

getty (parte de getty_ps)

(La mayor parte de esto es del antiguo Serial-HOWTO de Greg Hankins)Para esto, hay que poner entradas en un archivo de configuración y agregar una entrada en / etc / inittab. Aquí hay algunas entradas de ejemplo para usar en su terminal que puso en el archivo de configuración. / etc / gettydefs.

Tenga en cuenta que DT38400, DT19200, etc. son solo etiquetas y deben ser las mismas que utiliza en / etc / inittab.

Si quieres, puedes hacer getty Imprimir cosas interesantes en el banner de inicio de sesión. En mis ejemplos, tengo el nombre del sistema y la línea de serie impresos. Puedes añadir otras cosas: blockquote

sombra = sí

Cuando hayas terminado de editar / etc / gettydefs, puedes verificar que la sintaxis es correcta haciendo:

Asegúrate de que no haya otro getty o Uugetty archivo de configuración para el puerto serie al que está conectado su terminal, tal como (/etc/default/{uu}getty.ttySnorte o /etc/conf.{uu}getty.ttySnorte), ya que esto probablemente interferirá con la ejecución getty en una terminal. Eliminar esos archivos conflictivos si salen.

Edita tu / etc / inittab archivo para ejecutar getty en el puerto serie (sustituyendo en la información correcta para su entorno - puerto, velocidad y tipo de terminal predeterminado):

En este punto, debería ver un aviso de inicio de sesión en su terminal. Es posible que tengas que pulsar volver para llamar la atención del terminal.

Mgetty

La "m" significa modem. Este programa es principalmente para módems y, a partir de mediados de 2000, requerirá una recompilación para usarlo en terminales de texto (a menos que use el control de flujo de hardware, y eso generalmente requiere un cable hecho a mano). Para obtener la documentación de los terminales conectados directamente, consulte la sección "Directa" del manual: mgetty.texi.

Mira las ultimas lineas de /etc/mgetty/mgetty.config para un ejemplo de configurarlo para un terminal. A menos que diga "toggle-dtr no", pensará que tiene un módem y suelta (niega) el pin DTR en la PC en un vano intento de restablecer el módem inexistente. A diferencia de otros gettys, mgetty no se adjuntará a un terminal hasta que alguien presione alguna tecla de ese terminal, ¿así que verá un? para la terminal en parte superior o PD hasta que esto suceda Los registros en / var / log / mgetty / puede mostrar algunos mensajes de advertencia que solo son aplicables a los módems que puede ignorar.

Aquí hay un ejemplo de la línea simple que pones / etc / inittab: