Em muitos lugares, dependendo
Em terminais virtuais e terminais reais, a TERM
variável de ambiente é configurada pelo programa que é encadeado login
e é herdada por todo o caminho até o shell interativo que é executado quando o usuário faz logon. Onde, precisamente, isso acontece varia de sistema para sistema e de acordo com o tipo de terminal.
Os terminais reais, seriais, podem variar em tipo, de acordo com o que está na outra extremidade do fio. Portanto, convencionalmente, o getty
programa é chamado com um argumento que especifica o tipo de terminal ou é transmitido ao TERM
programa a partir dos dados de configuração de serviço de um gerente de serviço.
Os terminais virtuais do kernel, como você observou, têm um tipo fixo. Diferentemente do NetBSD, que pode variar rapidamente o tipo de terminal virtual do kernel, o Linux e os outros BSDs têm um único tipo de terminal fixo implementado no programa de emulação de terminal interno do kernel. No Linux, esse tipo corresponde linux
ao banco de dados terminfo. (A emulação de terminal do kernel do FreeBSD é um xterm
subconjunto limitado desde a versão 9.)
- Em sistemas que usam
mingetty
ou vc-get-tty
(do pacote nosh), o programa "sabe" que ele só pode estar conversando com um terminal virtual e conectam os tipos de terminal virtual "conhecidos" apropriados ao sistema operacional para o qual o programa foi compilado.
- Nos sistemas systemd, é possível ver isso no
/usr/lib/systemd/system/getty@.service
arquivo da unidade ( /lib/systemd/system/getty@.service
em sistemas não mesclados), que lêAmbiente = TERM = linux
definindo a TERM
variável no ambiente passado para agetty
.
Para terminais virtuais do kernel, não se altera o tipo de terminal. O programa emulador de terminal no kernel não muda, afinal. É incorreto alterar o tipo. Em particular, isso estragará o reconhecimento de sequência CSI da tecla cursor / edição. As linux
seqüências CSI enviados pelo emulador de terminal do kernel Linux são diferentes dos xterm
ou vt100
seqüências CSI enviados por programas de emulador de terminal GUI no modo VT DEC.
O emulador de terminal da GUI é um dos muitos programas, do daemon SSH ao screen
, que usa pseudo-terminais. Qual é o tipo de terminal depende de qual programa emulador de terminal está sendo executado no lado principal do pseudo-terminal e como ele está configurado. A maioria dos emuladores de terminal da GUI inicia o programa no lado escravo com uma TERM
variável cujo valor corresponde à emulação do terminal no lado mestre. Programas como o servidor SSH tentarão "passar" pelo tipo de terminal localizado na extremidade do cliente da conexão. Geralmente, há algum menu ou opção de configuração para escolher entre emulações de terminal.
A mão emocionante
A maneira correta de detectar a capacidade de cores não é conectar uma lista de tipos de terminais em seu script. Existem muitos tipos de terminais compatíveis com cores.
O caminho certo é observar o que termcap / terminfo diz sobre o seu tipo de terminal.
color = 0
se tput Co> / dev / null 2> & 1
então
teste "` tput Co` "-gt 2 && color = 1
cores elif tput> / dev / null 2> & 1
então
teste "` cores de saída` "-gt 2 && color = 1
fi
Leitura adicional
- Jonathan de Boyne Pollard (2018).
TERM
. Guia nosh . Softwares.