Quando abro uma janela de terminal com o emulador de Terminal GNOME na GUI da área de trabalho, a variável de ambiente TERM do shell é padronizada com o valor xterm
.
Se eu usar CTL+ ALT+ F1para alternar para uma janela TTY do console e echo $TERM
o valor estiver definido como linux
.
Minha motivação para perguntar é que, dentro do meu ~/.bashrc
arquivo, uma variável é usada para determinar se um shell de cor é fornecido ou apenas o monocromático antiquado.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
No shell do console e no emulador do Gnome Terminal, se eu digitar
export TERM=xterm-color
source /.bashrc
as duas conchas mudam para o modo de cor (algo que eu gostaria que acontecesse sempre nas duas).
Onde os TERM
valores padrão são definidos, por favor, e onde é o melhor local para alterar os padrões, se possível? Parece não haver nada na GUI do emulador de terminal para selecionar ou definir o valor TERM padrão.
Eu considerei apenas adicionar a linha export TERM=xterm-color
ao topo do meu ~/.bashrc
arquivo, mas meu instinto diz que essa não é a melhor solução e minhas pesquisas no Google ainda não me levaram a uma boa resposta.
Estou executando o Ubuntu 15.04 Desktop Edition (baseado em Debian).
Respostas:
Em muitos lugares, dependendo
Em terminais virtuais e terminais reais, a
TERM
variável de ambiente é configurada pelo programa que é encadeadologin
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 aoTERM
programa a partir dos dados de configuração de serviço de um gerente de serviço.init
sistemas van Smoorenburg , pode-se ver isso nas/etc/inittab
entradas, que lerão algo ao longo das linhas de O último argumentoagetty
nessa linha,,vt100-nav
é o tipo de terminal definido para/dev/ttyS0
. Então/etc/inittab
é onde mudar o tipo de terminal para terminais reais em tais sistemas./usr/lib/systemd/system/[email protected]
arquivo da unidade (/lib/systemd/system/[email protected]
em sistemas não mesclados), que lê definindo aTERM
variável no ambiente passado paraagetty
. Esse arquivo de unidade de serviço é onde alterar o tipo de terminal para terminais reais nesses sistemas. Observe que isso se aplica a todos os terminais reais que empregam esse modelo de unidade de serviço. (Para alterá-lo apenas para terminais individuais, é necessário instanciar manualmente o modelo.)init
pega o tipo de terminal no terceiro campo da entrada de cada terminal no/etc/ttys
banco de dados e defineTERM
no ambiente em que é executadogetty
. Assim/etc/ttys
é onde se muda o tipo de terminal para terminais reais nos BSDs.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 é umxterm
subconjunto limitado desde a versão 9.)mingetty
ouvc-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./usr/lib/systemd/system/[email protected]
arquivo da unidade (/lib/systemd/system/[email protected]
em sistemas não mesclados), que lê definindo aTERM
variável no ambiente passado paraagetty
.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 dosxterm
ouvt100
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 umaTERM
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.
Leitura adicional
TERM
. Guia nosh . Softwares.fonte
[ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes
. (ncurses 5.9)tput Co
retorna "capacidade terminfo desconhecida" em Jessie e Xenial.tput colors
etput setaf 1
ambos parecem funcionar, embora eu admita que não entendo o porquê .Por favor, consulte /ubuntu//a/614714/398785 para obter minha resposta detalhada sobre por que eu acho que
TERM=xterm-color
é a abordagem errada e a do Ubuntu.bashrc
é obsoleta. Eu recomendo que você vá comTERM=xterm-256color
(que é o padrão desde o gnome-terminal 3.16, mas também é seguro para uso com os terminais gnome-antigos) e ajuste-o de.bashrc
acordo.fonte
.bashrc
é obsoleto). "O .bashrc do Ubuntu é obsoleto."xterm-256color
causahtop
uma bagunça no seu layout como este no Ubuntu 18.04.