¿Qué tipo de terminal estoy usando?

¿Qué tipo de terminal estoy usando?

He probado esto tanto con Ubuntu 12.04 como con Debian 7. Cuando lo haga

echo $TERM

yo obtengo

xterm

Pero si uso el menú desplegable "ayuda" > "acerca de", entonces dice gnome terminal 3.4.1.1.

¿Esto significa que estoy usando solo gnome-terminal? ¿O simplemente xterm? ¿O es gnome-terminal una extensión de xterm? Estoy confundido.

Respuesta1

¿Que es $TERMpor?

La $TERMvariable es para que la utilicen las aplicaciones para aprovechar las capacidades de ese terminal.

Por ejemplo, si un programa quiere mostrar texto en color, primero debe averiguar si el terminal que está utilizando admite texto en color y, si lo hace, cómo hacerlo.

La forma en que esto funciona es que el sistema mantiene una biblioteca de terminales conocidos y sus capacidades. En la mayoría de los sistemas esto está presente /usr/share/terminfo(también existe termcap, pero es heredado y ya no se usa mucho).

Entonces digamos que tiene un programa que quiere mostrar texto en rojo. Básicamente hace una llamada a la biblioteca terminfo que dice "dame la secuencia de bytes que tengo que enviar para el texto rojo para la terminal xterm". Luego simplemente toma esos bytes y los imprime.
Puede intentarlo usted mismo haciendo tput setf 4; echo hi. Esto obtendrá la setfcapacidad terminfo y le pasará un parámetro de 4, que es el color que desea.


Por qué el terminal gnome miente sobre sí mismo:

Ahora digamos que tienes un nuevo y brillante emulador de terminal que acaba de ser lanzado y la biblioteca terminfo del sistema aún no tiene una definición para él. Cuando su aplicación busca cómo hacer algo, fallará porque no se conoce el terminal.

La forma en que su terminal evita esto es mintiendo sobre quién es. Entonces tu terminal gnome dice "soy xterm".

Xterm es un terminal muy básico que existe desde los albores de X11 y, por lo tanto, la mayoría de los emuladores de terminal admiten lo que admite. Entonces, cuando el terminal gnome dice que es un xterm, es más probable que tenga una definición en la biblioteca terminfo.

La desventaja de mentir sobre el tipo de terminal es que el terminal en realidad podría admitir mucho más que xterm (por ejemplo, muchos terminales nuevos admiten 256 colores, mientras que los terminales más antiguos solo admiten 16). Por lo tanto, tiene una compensación: obtener más funciones o tener más compatibilidad. La mayoría de terminales optarán por una mayor compatibilidad y, por tanto, optarán por anunciarse como xterm.

Si desea anular esto, muchos terminales ofrecerán alguna forma de configurar el comportamiento. Pero también puedes simplemente hacerlo export TERM=gnome-terminal.

Respuesta2

La TERMvariable de entorno indica la terminal.tipo, no la terminalsolicitud. TERMtiene un propósito específico: le dice a las aplicaciones que se ejecutan en ese terminal cómo interactuar con el terminal.

Las aplicaciones interactúan con los terminales escribiendo secuencias de escape: secuencias de caracteres que incluyen caracteres no imprimibles y tienen efectos como mover el cursor, borrar parte de la pantalla, cambiar el color actual, etc. En los viejos tiempos, diferentes marcas de terminales físicos tenían diferentes conjuntos de secuencias de escape. Por tanto el sistema operativo mantiene una base de datos de tipos de terminales y sus características. La base de datos tradicional estermcap(“CAPACIDADES TERMINALES”); Muchos sistemas y aplicaciones modernos han cambiado ainformación terminológica. Ambas bases de datos están indexadas por el nombre del tipo de terminal y las aplicaciones las consultan utilizando el nombre del tipo de terminal de las TERMvariables de entorno.

Hoy en día, la mayoría de terminales utilizan unconjunto estándar de secuencias de escapecon algunos conjuntos comunes de extensiones, por lo que no verás muchos valores diferentes de TERM. La mayoría de los emuladores de terminal GUI son compatibles conxterm, el terminal X tradicional (que todavía se utiliza y se mantiene).

Los emuladores de terminal que difieren de xterm pueden agregar su propia entrada a la base de datos del terminal con su propio nombre. Sin embargo, esto no encaja bien con los shells remotos. Un programa que se ejecuta en la máquina A pero que se muestra en la máquina B, por ejemplo porque se inició a través de ssh de B a A, necesita consultar la base de datos del terminal en la máquina A. Los métodos de inicio de sesión remoto, como ssh, transfieren la TERMvariable de entorno, pero esto es útil sólo cuando la base de datos del terminal de B también tiene una entrada para el valor usuario en A. Por lo tanto, muchos emuladores de terminal se apegan a TERM=xtermlo que es prácticamente universalmente conocido.

La diferenciación entre terminales en general no proviene de la forma en que las aplicaciones interactúan con ellos, sino de la forma en que los terminales interactúan con el usuario y se adaptan a su entorno. Por ejemplo, Gnome Terminal se ve bien en Gnome y proporciona pestañas y otras sutilezas; Konsole se ve bien en KDE y proporciona pestañas y otras sutilezas; urxvt tiene un requisito de memoria pequeño; Console2 se ejecuta en Windows; screen y tmux proporcionan sesiones que se pueden conectar a diferentes terminales principales; etcétera. Dado que ninguna de estas características marca la diferencia en las aplicaciones que se ejecutan en la terminal, la mayoría de los emuladores de terminal utilizan TERM=xterm.

Para saber en qué terminal se está ejecutando un shell (suponiendo que el shell se esté ejecutando directamente en un terminal), mire el padre del shell:

ps -p$PPID

Respuesta3

La variable de entorno TERM no significa el terminal que está utilizando.

Citando gnu.org:

La variable de entorno TERM contiene un identificador para las capacidades de la ventana de texto. Puede obtener una lista detallada de estas capacidades usando el comando > 'infocmp', usando 'man 5 terminfo' como referencia.

Al producir texto con directivas de color incrustadas, msgcat mira la variable TERM. Las ventanas de texto actuales suelen admitir al menos 8 colores. Sin embargo, a menudo la ventana de texto admite 16 o más colores, aunque la variable TERM esté configurada en un identificador que denota solo 8 colores admitidos. Puede valer la pena establecer la variable TERM en un valor diferente en estos casos:

xtermEn la mayoría de los casos, se construye con soporte para 16 colores. También se puede construir con soporte para 88 o 256 colores (pero no ambos). Puede intentar configurar TERM en xterm-16color, xterm-88color o xterm-256color. rxvt

rxvtA menudo se construye con soporte para 16 colores. Puede intentar configurar TERM en rxvt-16color. consola

consolaTambién suele estar construido con soporte para 16 colores. Puede intentar configurar TERM en konsole-16color o xterm-16color.

Después de configurar TERM, puede verificarlo invocando 'msgcat --color=test' y viendo si el resultado parece un mapa de color razonable. La variable de entorno TERM contiene un identificador para las capacidades de la ventana de texto. Puede obtener una lista detallada de estas posibilidades utilizando el comando 'infocmp', utilizando 'man 5 terminfo' como referencia.

Respuesta4

Creo que vale la pena señalar que puedes encontrar la respuesta a tu pregunta inicial ejecutando ps -p $$, es decir, aprender cuál es el proceso con el pid actual. El resultado de muestra es:

    PID TTY          TIME CMD
3045221 pts/17   00:00:00 bash

lo cual tiene bastante claro de qué terminal se trata.

información relacionada