Qual tipo de terminal estou usando?

Qual tipo de terminal estou usando?

Eu testei isso com Ubuntu 12.04 e Debian 7. Quando faço isso

echo $TERM

eu recebo

xterm

Mas se eu usar o menu suspenso "ajuda" > "sobre", ele diz gnome terminal 3.4.1.1.

Isso significa que estou usando apenas o gnome-terminal? Ou apenas xterm? Ou o gnome-terminal é uma extensão do xterm? Estou confuso.

Responder1

Para que é $TERM?

A $TERMvariável deve ser usada por aplicativos para aproveitar os recursos desse terminal.

Por exemplo, se um programa deseja exibir texto colorido, ele deve primeiro descobrir se o terminal que você está usando suporta texto colorido e, em caso afirmativo, como fazer texto colorido.

A forma como isso funciona é que o sistema mantém uma biblioteca de terminais conhecidos e seus recursos. Na maioria dos sistemas, isso está presente /usr/share/terminfo(também existe o termcap, mas seu legado não é mais usado).

Digamos que você tenha um programa que deseja exibir texto em vermelho. Basicamente, faz uma chamada para a biblioteca terminfo que diz "me dê a sequência de bytes que devo enviar para o texto em vermelho para o terminal xterm". Em seguida, basta pegar esses bytes e imprimi-los.
Você pode tentar fazer isso sozinho tput setf 4; echo hi. Isso obterá o setfrecurso terminfo e passará para ele um parâmetro de 4, que é a cor desejada.


Por que o terminal gnome mente sobre si mesmo:

Agora, digamos que você tenha um emulador de terminal novinho em folha que acabou de ser lançado e a biblioteca terminfo do sistema ainda não tenha uma definição para ele. Quando seu aplicativo procurar como fazer algo, ele falhará porque o terminal não é conhecido.

A maneira como seu terminal contorna isso é mentindo sobre quem ele é. Então seu terminal gnome está dizendo "Eu sou xterm".

Xterm é um terminal muito básico que existe desde o início do X11 e, portanto, a maioria dos emuladores de terminal suporta o que ele suporta. Então, pelo terminal gnome dizendo que é um xterm, é mais provável que haja uma definição na biblioteca terminfo.

A desvantagem de mentir sobre o tipo de terminal é que o terminal pode realmente suportar muito mais do que o xterm (por exemplo, muitos terminais novos suportam 256 cores, enquanto terminais mais antigos suportam apenas 16). Então você tem uma compensação: obter mais recursos ou ter mais compatibilidade. A maioria dos terminais optará por mais compatibilidade e, portanto, optará por se anunciar como xterm.

Se você quiser substituir isso, muitos terminais oferecerão alguma forma de configurar o comportamento. Mas você também pode simplesmente fazer export TERM=gnome-terminal.

Responder2

A TERMvariável de ambiente indica o terminaltipo, não o terminalaplicativo. TERMtem um propósito específico: informa aos aplicativos executados naquele terminal como interagir com o terminal.

Os aplicativos interagem com os terminais escrevendo sequências de escape - sequências de caracteres que incluem caracteres não imprimíveis e têm efeitos como mover o cursor, apagar parte da tela, alterar a cor atual, etc. Antigamente, diferentes marcas de terminais físicos tinham diferentes conjuntos de sequências de escape. Portanto, o sistema operacional mantém um banco de dados de tipos de terminais e suas características. O banco de dados tradicional étermcap(“Capacidades Terminais”); muitos sistemas e aplicativos modernos mudaram parainformações do termo. Ambos os bancos de dados são indexados pelo nome do tipo de terminal e os aplicativos os consultam usando o nome do tipo de terminal das TERMvariáveis ​​de ambiente.

Hoje em dia, a maioria dos terminais utiliza umconjunto padrão de sequências de escapecom alguns conjuntos comuns de extensões, então você não verá muitos valores diferentes de TERM. A maioria dos emuladores de terminal GUI são compatíveis comtermo x, o terminal X tradicional (que ainda é usado e mantido).

Emuladores de terminal diferentes do xterm podem adicionar sua própria entrada ao banco de dados do terminal com seu próprio nome. No entanto, isso não combina bem com shells remotos. Um programa em execução na máquina A, mas que está sendo exibido na máquina B, por exemplo, porque foi iniciado por meio de ssh de B para A, precisa consultar o banco de dados do terminal na máquina A. Métodos de login remoto, como ssh, carregam a TERMvariável de ambiente, mas isso é útil apenas quando o banco de dados do terminal de B também possui uma entrada para o valor user em A. Portanto, muitos emuladores de terminal seguem TERM=xtermo que é praticamente universalmente conhecido.

A diferenciação entre terminais em geral não vem da forma como as aplicações interagem com eles, mas pela forma como os terminais interagem com o usuário e se adaptam ao seu ambiente. Por exemplo, o Terminal Gnome fica bem no Gnome e fornece guias e outras sutilezas; O Konsole fica bem no KDE e oferece abas e outras sutilezas; urxvt tem um pequeno requisito de memória; Console2 é executado no Windows; screen e tmux fornecem sessões que podem ser anexadas a diferentes terminais pai; e assim por diante. Como nenhum desses recursos faz diferença nos aplicativos executados no terminal, a maioria dos emuladores de terminal usa o TERM=xterm.

Para descobrir em qual terminal um shell está sendo executado (assumindo que o shell está sendo executado diretamente em um terminal), observe o pai do shell:

ps -p$PPID

Responder3

A variável de ambiente TERM não significa o terminal que você está usando.

Citando gnu.org:

A variável de ambiente TERM contém um identificador para os recursos da janela de texto. Você pode obter uma lista detalhada dessas capacidades usando o comando > 'infocmp', usando 'man 5 terminfo' como referência.

Ao produzir texto com diretivas de cores incorporadas, msgcat analisa a variável TERM. As janelas de texto hoje normalmente suportam pelo menos 8 cores. Freqüentemente, porém, a janela de texto suporta 16 ou mais cores, mesmo que a variável TERM esteja definida como um identificador que denota apenas 8 cores suportadas. Pode valer a pena definir a variável TERM com um valor diferente nestes casos:

termo xé na maioria dos casos construído com suporte para 16 cores. Também pode ser construído com suporte para 88 ou 256 cores (mas não ambos). Você pode tentar definir TERM como xterm-16color, xterm-88color ou xterm-256color. rxvt

rxvtgeralmente é construído com suporte para 16 cores. Você pode tentar definir TERM como rxvt-16color. console

consoletambém costuma ser construído com suporte para 16 cores. Você pode tentar definir TERM como konsole-16color ou xterm-16color.

Depois de definir TERM, você pode verificá-lo invocando 'msgcat --color=test' e verificando se a saída parece um mapa de cores razoável. A variável de ambiente TERM contém um identificador para os recursos da janela de texto. Você pode obter uma lista detalhada dessas capacidades usando o comando 'infocmp', usando 'man 5 terminfo' como referência.

Responder4

Acho que vale ressaltar que você pode descobrir a resposta para sua pergunta inicial executando ps -p $$, ou seja, saber qual é o processo com o pid atual. A saída de amostra é:

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

o que é bastante claro sobre qual terminal é.

informação relacionada