Alterar cores no console/terminal virtual

Alterar cores no console/terminal virtual

Existe uma maneira de alterar todas as cores disponíveis no console/terminal virtual?
Por console, quero dizer o que você obtém após pressionar CTRL + ALT + F1 e nada como xterm ou urxvt. Então, acho que isso significaria alterar

Posso alterar 8 cores usando sequências de escape como esta:

echo -en "\e]PY######"

onde Y é o ID numérico da cor (0 a 7) e ###### é o valor hexadecimal da cor.

Meu objetivo final é portar o esquema de cores solarizado para o console, porque quero ter a mesma aparência do vim, independentemente de estar no console ou no X.

Alguma sugestão sobre isso?

htop em xterm:
htop em xterm, cores solarizadas

htop no console, após aplicar as 8 cores:
htop no console, depois de aplicar as 8 cores consegui

Responder1

O console do framebuffer TTY não tem como ter mais de 8 a 16 cores sem hackear o kernel, veja esta citação: "Embora o frame-buffer do Linux suporte 256 (ou mais) cores, o driver do console do Linux não; portanto, os aplicativos do console ainda são limitado a 16 cores no console Linux, com buffer de quadros ou não."

Portanto, você não pode ter mais do que 16 ou 8 cores. Há um tutorial sobre como alterar as cores do terminal framebuffer (também conhecido como ctrl+alt+1) usando os mesmos comandos descritos em ~/.bashrc:cores no tutorial TTY

Responder2

Experimente esta função bash no console. Apropriadamente, não funciona em um terminal X (acho que por causa das guias). Verifique especialmente os três arquivos usados ​​​​por último, a saber

/sys/module/vt/parameters/default_red
/sys/module/vt/parameters/default_grn
/sys/module/vt/parameters/default_blu

clr () {
    clear # GFX bug otherwise
    setterm -regtabs 4
    Color_names="bla red gre yel blu mag cya whi"
    Color_arr=($Color_names)

    tput setaf 4
    tput setab 7
    echo -n "            normal             "
    tput sgr0

    echo -n " "

    tput setaf 7
    tput setab 4   
    echo "            bright             "

    tput sgr0
    for cmd in sgr0 bold
    do
        tput $cmd
        for m in 0 1 2 3 4 5 6 7
        do
            tput setaf $m
            echo -n ${Color_arr[$m]}" "
        done
    done
    echo

    tput sgr0
    cat /sys/module/vt/parameters/default_red \
        /sys/module/vt/parameters/default_grn \
        /sys/module/vt/parameters/default_blu | sed s/,0/", "/g | \
                                                sed s/^0/" "/g | \
                                                tr "," "\t"
}

Editar em resposta ao comentário

Por exemplo, altere o segundo dígito no arquivo verde ( sys/module/vt/parameters/default_grn) para 170- isso dará à segunda cor (com índice 1) tanto verde quanto vermelho, e nada de azul (pelo menos no meu caso, porque tenho o dígito correspondente em default_red 170, e 0em default_blu).

Agora, digite tput setaf 1; echo hi. Aqui você coloca a cor de primeiro plano na cor com índice 1 (aquela que você alterou) e depois imprime. (Observe o oneliner com dois pontos para separar os comandos, caso contrário, seu prompt poderá redefinir o tputintervalo entre eles.)

Se parecer o mesmo de sempre, tente echo -n '\033]R'a tputlinha novamente. Agora,ambos"oi" deve ser meio amarelo.

Deixe-me saber se você fizer funcionar (ou não).

informação relacionada