Altera cores no console / terminal virtual

7

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

Eu posso mudar 8 das cores usando seqüências de escape como:

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

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

Meu objetivo final é portar o esquema de cores solarizado para o console, porque quero parecer vim mesmo assim, independentemente de estar no console ou no X.

Alguma sugestão sobre isso?

htop in xterm:
htop em xterm, cores solarizadas

htop no console, depois de aplicar as 8 cores:
htop no console, depois de aplicar as 8 cores que pude

    
por Daniel Jour 26.04.2013 / 19:41

2 respostas

6

TTY framebuffer console não tem como ter mais do que 8-16 cores sem kernel hacking, veja esta frase: "Embora o buffer de quadros do Linux suporte 256 (ou mais) cores, o driver do console Linux não; portanto, console os aplicativos ainda são limitados a 16 cores no console do Linux, buffer de quadros ou não. "

Assim, 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 do TTY

    
por 29.04.2013 / 19:53
3

Experimente esta função bash no console. Apropriadamente, não funciona em um terminal X (acho que por causa das abas). Especialmente confira os três arquivos usados por último, ou seja,

/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 não azul (pelo menos no meu caso , porque tenho o dígito correspondente em default_red 170 e 0 in default_blu ).

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

Se ele aparecer como sempre, tente echo -n '3]R' e, em seguida, a linha tput novamente. Agora, ambos "hi" s devem ser amarelos.

Deixe-me saber se você conseguir que ele funcione (ou não).

    
por 26.04.2013 / 23:23