Que tipo de terminal estou usando?

44

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

echo $TERM

Eu obtenho

xterm

Mas se eu usar o menu suspenso "ajuda" > "about" então 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.

    
por mulllhausen 03.10.2013 / 05:52

3 respostas

43

O que é $TERM ?

A variável $TERM é usada pelos aplicativos para aproveitar os recursos desse terminal.

Por exemplo, se um programa quiser 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 maneira como isso funciona é que o sistema mantém uma biblioteca de terminais conhecidos e suas capacidades. Na maioria dos sistemas, isso é em /usr/share/terminfo (também há termcap, mas o legado não é mais usado).

Então, digamos que você tenha um programa que queira exibir texto em vermelho. Basicamente, ele faz uma chamada para a biblioteca terminfo que diz " me dê a seqüência de bytes que eu tenho que enviar para texto em vermelho para o terminal xterm ". Então ele pega esses bytes e os imprime.
Você mesmo pode tentar isso fazendo tput setf 4; echo hi . Isso obterá o recurso setf terminfo e passará um parâmetro de 4 , que é a cor desejada.

Por que o terminal do gnome é sobre si mesmo:

Agora vamos dizer que você tem um emulador de terminal novo e brilhante que acabou de ser lançado, e a biblioteca terminfo do sistema ainda não tem uma definição para ele. Quando seu aplicativo for procurar algo, ele falhará porque o terminal não é conhecido.

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

O Xterm é um terminal muito básico que existe desde o alvorecer do X11, e assim a maioria dos emuladores de terminal suportam o que suporta. Então, pelo terminal do gnome dizendo que é um xterm, é mais provável que tenha 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 novos terminais suportam 256 cores, enquanto terminais mais antigos suportam apenas 16). Então você tem uma compensação, obtenha mais recursos ou tenha mais compatibilidade. A maioria dos terminais irá optar por mais compatibilidade e, assim, optar por se anunciar como xterm .

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

    
por 03.10.2013 / 06:33
23

A variável de ambiente TERM indica o terminal tipo , não o terminal aplicação . TERM tem um propósito específico: diz aos aplicativos em execução nesse terminal como interagir com o terminal.

As aplicações interagem com 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 do ecrã, alterar a cor atual, etc. Antigamente, diferentes marcas de física terminais tinham conjuntos diferentes de seqüê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 (“CAPinal CAPabilities”); muitos sistemas e aplicativos modernos mudaram para terminfo . 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 variáveis de ambiente TERM .

Atualmente, a maioria dos terminais usa um conjunto padrão de seqüências de escape com alguns conjuntos comuns de extensões, então você ganhou ' Não vemos muitos valores diferentes de TERM . A maioria dos emuladores de terminal GUI é compatível com o xterm , o tradicional terminal X (que ainda é usado e mantido).

Emuladores de terminal que diferem 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 os 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 ssh de B para A, precisa consultar o banco de dados do terminal na máquina A. Métodos de login remotos, como ssh, carregam o ambiente TERM variável, mas isso é útil somente quando o banco de dados de terminal de B também possui uma entrada para o usuário de valor em A. Portanto, muitos emuladores de terminal aderem a TERM=xterm , 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 maneira como os terminais interagem com o usuário e se encaixam em seu ambiente. Por exemplo, o Gnome Terminal fica bem no Gnome e fornece guias e outras sutilezas; O Konsole fica bem no KDE e fornece abas e outras sutilezas; O 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 para os aplicativos em execução no terminal, a maioria dos emuladores de terminal usa TERM=xterm .

Para descobrir qual terminal um shell está executando, veja o pai do shell:

ps -p$PPID
    
por 04.10.2013 / 02:59
9

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

Citando gnu.org :

The environment variable TERM contains a identifier for the text window's capabilities. You can get a detailed list of these cababilities by using the > ‘infocmp’ command, using ‘man 5 terminfo’ as a reference.

When producing text with embedded color directives, msgcat looks at the TERM variable. Text windows today typically support at least 8 colors. Often, however, the text window supports 16 or more colors, even though the TERM variable is set to a identifier denoting only 8 supported colors. It can be worth setting the TERM variable to a different value in these cases:

xterm is in most cases built with support for 16 colors. It can also be built with support for 88 or 256 colors (but not both). You can try to set TERM to either xterm-16color, xterm-88color, or xterm-256color. rxvt

rxvt is often built with support for 16 colors. You can try to set TERM to rxvt-16color. konsole

konsole too is often built with support for 16 colors. You can try to set TERM to konsole-16color or xterm-16color.

After setting TERM, you can verify it by invoking ‘msgcat --color=test’ and seeing whether the output looks like a reasonable color map. The environment variable TERM contains a identifier for the text window's capabilities. You can get a detailed list of these cababilities by using the ‘infocmp’ command, using ‘man 5 terminfo’ as a reference.

    
por 03.10.2013 / 06:31