Como definir a cor de fundo da tela do console do Linux?

0

Observação: refiz a pergunta para esclarecer os problemas. Esta é uma pergunta trivial que pode ser respondida em várias partes porque a questão tem vários atributos.

Infelizmente, a pergunta pode ser reformulada quando a pessoa que faz a pergunta apreende (conhece) algumas partes da resposta, bem como a estrutura da pergunta.

Portanto, a questão é apresentada de um ponto de vista diferente do original.

Como alterar a configuração de cor¹ do console do Linux, usando um utilitário de shell? Como alterar a configuração de cor¹ de um emulador de terminal, usando um utilitário de shell?

Originalmente, eu queria mudar a cor de fundo do console do Linux durante a execução de um script de shell. A proposta a seguir funciona como eu queria.

#!/bin/sh

# set the background color of the terminal
tput setab 6
clear

printf "%s\n" 'background: cyan'

# do some tasks 
cd /usr/src/initramfs
pwd
ls -l

# the background of the shell output is cyan

No entanto, alguém pode encontrar várias falhas (ou dificuldades).

Por exemplo, se a tela não estiver limpa, a cor do plano de fundo será aplicada somente à saída de texto, durante a execução de um script de shell. Se o comando tput setab 6 for enviado com a linha de comando e a tela não estiver desmarcada, a cor do plano de fundo será aplicada somente a uma pequena parte do texto de saída. Se o comando tput setab 6 for enviado na linha de comando e a tela estiver desmarcada, a cor do plano de fundo será aplicada à tela inteira, mas só persistirá até que outro comando seja enviado. [...]

¹ cor de fundo

    
por Fólkvangr 10.10.2018 / 14:07

1 resposta

2

No terminal virtual do linux ("console"):

Para definir o plano de fundo para a cor 1 (vermelho):

printf %b '\e[41m' '\e[8]' '\e[H\e[J'

O primeiro escape ( setab ) define o segundo plano para a cor 1, o segundo escape define o par atual de segundo plano como o padrão e o terceiro ( clear ) limpa a tela .

A partir de agora, "vermelho" será o segundo plano padrão:

printf %b 'World\e[42mWide\e[mWeb\n'

Observe como a configuração do plano de fundo para verde com setab 2 ( \e[42 ) e a limpeza subseqüente de atributos com sgr0 ( \e[m ) não apagam nossa configuração.

Alternativamente, você pode redefinir a cor 0 (o fundo padrão, preto), através do escape "set palette" (também conhecido por initc ="initialize_color"):

printf %b '\e[40m' '\e[8]' # set default background to color 0 (black)
printf %b '\e]P0ff0000'    # redefine color 0 as 'red'

O último usa um argumento do formato nRRGGBB , em que n é o número da cor e RRGGBB é um trio hexadecimal que define a cor.

Este escape também é suportado por massa .

Para uma explicação sobre essas funções e mais, verifique as páginas de manual console_codes (4) e terminfo (5).

Eu não consegui:

a) mude a cor de fundo da tela sem limpar tudo dela com clear .

b) força-o a atualizar a margem sem caracteres da tela sem alternar entre terminais virtuais com Control-Alt-Fn.

Em emuladores de terminal do tipo xterm:

Isso define o plano de fundo para um verde claro sem ter que limpar a tela:

printf %b '\e]11;#ccffcc\a'

Também funciona bem em mlterm , rxvt , gnome-terminal , konsole etc.

A forma alternativa \e]11;rgb:cc/ff/cc\a (tirada de aqui ) não é suportada em konsole (testada com 12.16 .0 versão).

Isso não funcionará dentro de tmux ou screen .

Todas as fugas de xterm estão documentadas no arquivo ctlseqs.txt de sua origem código.

Nota:

Algumas das fugas (por exemplo, \e[8] ou \e]11;...\a ) não são incluídas no terminfo e não podem ser usadas com tput , enquanto outras (por exemplo, initc ) são muito difíceis de serem usadas em uma maneira limpa.

Uma versão greppable do banco de dados terminfo pode ser obtida por um comando como: find /usr/share/terminfo -type f -printf '%f\n' | xargs -n1 infocmp -0 -A /usr/share/terminfo

    
por 11.10.2018 / 23:10