En muchos lugares, dependiendo
En terminales virtuales y terminales reales, la TERM
variable de entorno la establece el programa al que se encadena login
y se hereda todo el camino hasta el shell interactivo que se ejecuta una vez que uno ha iniciado sesión. Donde, precisamente, esto sucede varía de un sistema a otro, y de acuerdo con el tipo de terminal.
Los terminales reales, seriales, pueden variar en tipo, de acuerdo con lo que hay en el otro extremo del cable. De manera convencional, el getty
programa se invoca con un argumento que especifica el tipo de terminal, o se pasa el TERM
programa desde los datos de configuración del servicio de un administrador de servicios.
Los terminales virtuales del kernel, como ha notado, tienen un tipo fijo. A diferencia de NetBSD, que puede variar el tipo de terminal virtual del kernel sobre la marcha, Linux y los otros BSD tienen un único tipo de terminal fijo implementado en el programa de emulación de terminal incorporado del kernel. En Linux, ese tipo coincide linux
con la base de datos terminfo. (La emulación de terminal de kernel de FreeBSD es un xterm
subconjunto limitado desde la versión 9.)
- En los sistemas que usan
mingetty
o vc-get-tty
(del paquete nosh) el programa "sabe" que solo puede estar hablando con un terminal virtual, y conectan los tipos de terminal virtual "conocidos" apropiados para el sistema operativo para el que se compiló el programa.
- En sistemas systemd, uno puede ver esto en el
/usr/lib/systemd/system/getty@.service
archivo de la unidad ( /lib/systemd/system/getty@.service
en sistemas no fusionados), que leeEntorno = TERM = Linux
establecer la TERM
variable en el entorno pasado a agetty
.
Para terminales virtuales del kernel, uno no cambia el tipo de terminal. El programa emulador de terminal en el núcleo no cambia, después de todo. Es incorrecto cambiar el tipo. En particular, esto arruinará el cursor / tecla de edición de reconocimiento de secuencia CSI. Las linux
secuencias de CSI enviado por emulador de terminal del núcleo de Linux son diferentes a los xterm
o vt100
las secuencias CSI enviado por los programas de emulación de terminal GUI en modo DEC VT.
Su emulador de terminal GUI es uno de los muchos programas, desde el demonio SSH hasta screen
, que utiliza pseudo terminales. El tipo de terminal depende de qué programa de emulador de terminal se esté ejecutando en el lado maestro del pseudo-terminal y de cómo esté configurado. La mayoría de los emuladores de terminal GUI iniciarán el programa en el lado esclavo con una TERM
variable cuyo valor coincida con su emulación de terminal en el lado maestro. Programas como el servidor SSH intentarán "pasar" el tipo de terminal que se encuentra en el extremo del cliente de la conexión. Por lo general, hay algún menú u opción de configuración para elegir entre las emulaciones de terminal.
La mano agarradora
La forma correcta de detectar la capacidad de color no es cablear una lista de tipos de terminales en su secuencia de comandos. Hay muchos tipos de terminales que admiten color.
La forma correcta es mirar lo que dice termcap / terminfo sobre su tipo de terminal.
color = 0
si tput Co> / dev / null 2> & 1
luego
prueba "` tput Co` "-gt 2 && color = 1
colores elif tput> / dev / null 2> & 1
luego
prueba "` tput colors` "-gt 2 && color = 1
fi
Otras lecturas
- Jonathan de Boyne Pollard (2018).
TERM
. nosh Guide . Softwares