Cuando abro una ventana de terminal con el emulador de terminal de GNOME en la GUI del escritorio, la variable de entorno TERM de shell se predetermina al valor xterm
.
Si uso CTL+ ALT+ F1para cambiar a una ventana TTY de consola y echo $TERM
el valor se establece en linux
.
Mi motivación para preguntar es que dentro de mi ~/.bashrc
archivo se usa una variable para determinar si se proporciona un caparazón de color o simplemente un monocromo anticuado.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
Tanto en el shell de la consola como en el shell del emulador de terminal Gnome si escribo
export TERM=xterm-color
source /.bashrc
ambas conchas cambian al modo de color (algo que me gustaría que ocurriera siempre en ambas).
¿Dónde se establecen los TERM
valores predeterminados y dónde es el mejor lugar para cambiar sus valores predeterminados, si es posible? Parece que no hay nada en la GUI del emulador de terminal para seleccionar o establecer el valor TERM predeterminado.
Pensé en agregar la línea export TERM=xterm-color
en la parte superior de mi ~/.bashrc
archivo, pero mi instinto me dice que esta no es la mejor solución y que mis búsquedas en Google todavía no me han dado una buena respuesta.
Estoy ejecutando Ubuntu 15.04 Desktop Edition (basado en Debian).
Respuestas:
En muchos lugares, dependiendo
En terminales virtuales y terminales reales, la
TERM
variable de entorno la establece el programa al que se encadenalogin
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 elTERM
programa desde los datos de configuración del servicio de un administrador de servicios.init
sistemas de van Smoorenburg , se puede ver esto en las/etc/inittab
entradas, que leerán algo similar a El último argumento paraagetty
en esa líneavt100-nav
, es el tipo de terminal establecido para/dev/ttyS0
. Entonces,/etc/inittab
es dónde cambiar el tipo de terminal para terminales reales en tales sistemas./usr/lib/systemd/system/[email protected]
archivo de la unidad (/lib/systemd/system/[email protected]
en sistemas no fusionados), que lee establecer laTERM
variable en el entorno pasado aagetty
. Este archivo de unidad de servicio es donde cambiar el tipo de terminal para terminales reales en tales sistemas. Tenga en cuenta que se aplica a todos los terminales reales que emplean esta plantilla de unidad de servicio. (Para cambiarlo solo por terminales individuales, se debe crear una instancia manual de la plantilla).init
toma el tipo de terminal del tercer campo de la entrada de cada terminal en la/etc/ttys
base de datos y lo estableceTERM
en el entorno con el que se ejecutagetty
. Entonces/etc/ttys
es donde uno cambia el tipo de terminal para terminales reales en los BSD.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 unxterm
subconjunto limitado desde la versión 9.)mingetty
ovc-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./usr/lib/systemd/system/[email protected]
archivo de la unidad (/lib/systemd/system/[email protected]
en sistemas no fusionados), que lee establecer laTERM
variable en el entorno pasado aagetty
.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 losxterm
ovt100
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 unaTERM
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.
Otras lecturas
TERM
. nosh Guide . Softwaresfuente
[ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes
. (ncurses 5.9)tput Co
devuelve "capacidad terminfo desconocida" en Jessie y Xenial.tput colors
ytput setaf 1
ambos parecen funcionar aunque admito que no entiendo por qué .Consulte /ubuntu//a/614714/398785 para obtener una respuesta detallada sobre por qué creo que
TERM=xterm-color
es un enfoque incorrecto y Ubuntu.bashrc
es obsoleto. Le recomiendo que vaya conTERM=xterm-256color
(que es el valor predeterminado desde gnome-terminal 3.16, pero también seguro de usar con terminales gnome más antiguos), y ajuste su.bashrc
correspondiente.fuente
.bashrc
es obsoleto). "El .bashrc de Ubuntu está obsoleto".xterm-256color
causahtop
un error en su diseño como este en Ubuntu 18.04.