Alterar o plano de fundo do terminal do script bash na plataforma, de maneira independente do ambiente de desktop?

Alterar o plano de fundo do terminal do script bash na plataforma, de maneira independente do ambiente de desktop?

Como posso alterar a cor de fundo do terminal de uma forma que utilize SOMENTE o protocolo do terminal e não dependa de NENHUMA configuração (como em "perfis") armazenada em um programa de terminal específico ou no ambiente em que está sendo executado?

Quero ser capaz de escrever um script que altere de forma confiável a cor de fundo do terminal para quem fizer login na máquina usando um terminal e executar o script.

Uma resposta rápida e confiável sobre “isso é impossível” será tão apreciada quanto uma solução. Tal resposta, no entanto, só será aceita por um especialista que conheça exaustivamente os protocolos de terminal e possa atestar a ausência de tal recurso.

Responder1

Isto é impossível. Não sou um especialista que conhece exaustivamente os protocolos de terminal, mas estou ciente da existência de terminais que não têm como alterar a cor de fundo. Este é o caso, por exemplo, de terminais burros, como os fornecidos pelaesperarou por M-x shellno Emacs. Este também é o caso da maioria dos terminais de hardware, mas poucas pessoas os utilizam hoje em dia.

A maioria dos emuladores de terminal tem uma maneira de alterar a cor de fundo. Os emuladores de terminal em geral copiam o xterm para a interface entre o aplicativo e o terminal; portanto, quando você quiser um recurso como esse, experimente o método xterm e espere que funcione em alguns, mas não em todos os emuladores de terminal. Procure osequências de controle xterme veja se um se encaixa no que você deseja.

Para alterar a cor de fundo de todo o terminal, háOSC 11; color BEL, ou seja

printf '\e]11;%s\a' "$color"

Isso funciona em xterm, urxvt, gnome-terminal, konsole e lxterm, mas não em rxvt, xfce4-terminal, terminator ou Emacs M-x term. A mudança de cor de fundo sobrevive a uma reinicialização do terminal. Você também pode alterar a cor do primeiro plano substituindo 11;por 10;.

Essa é a cor de fundo padrão, é claro. Em qualquer terminal que suporte essa sequência de escape e na maioria dos outros terminais que suportem cores de alguma forma, você pode alterar a cor de fundo do texto exibido posteriormente com \e[41m(para vermelho).

Se a sequência de escape não for suportada em um terminal, você não terá como descobrir. Você pode tentar encontrar uma sequência de escape que consulte o terminal e que seja suportada no mesmo conjunto de terminais, mas geralmente não existe tal sequência.

Mudar para vídeo reverso \e[?5hprovavelmente funciona na maioria dos terminais, mas não sobrevive a uma reinicialização do terminal. Você poderia fazer isso e depois definir a cor de primeiro plano, dessa forma haveria um efeito visual na maioria dos terminais.

informação relacionada