Is there a way to alter the colors used in TTY consoles on Linux?

13

4

By "alter colors", I mean something like change black from #000000 to #111111, and by "TTY console", I mean what you get when you do Ctrl+Alt+F1 from X11, not a terminal emulator like xterm or urxvt.

I'm using Arch Linux, but I think it has more to do with the program providing the TTY (agetty, I think).

Austin Hyde

Posted 2011-07-23T03:12:02.217

Reputation: 844

Terminals don't operate in terms of hex colors - they use color codes like those found in "/etc/shell-colors". – new123456 – 2011-07-23T04:55:09.170

1@new123456 - I don't have any file called "shell-colors" anywhere under / – Austin Hyde – 2011-07-23T18:27:43.513

Huh. You don't state your distribution here - I am running Zenwalk, so you're distribution may vary. Search for color in bash to get a list of all the escapes. – new123456 – 2011-07-23T21:24:42.550

2@new123456 - I did mention that I was using Arch, and I'm not looking for bash escape sequences for colors, like \e[0;30m for black, I'm looking for a way to customize the actual color for each named color. – Austin Hyde – 2011-07-23T23:11:52.457

>

  • Sorry - I look at tags first ;) 2. Just information, not entirely pertinent to the question but pertinent to the domain.
  • < – new123456 – 2011-07-24T02:16:07.670

    Answers

    3

    The setterm command is what you're looking for.

    setterm -foreground black -background white
    

    EDIT

    No, there is no way to alter the names of the colors as you requested. They are not referenced that way anywhere in curses, terminfo, or the terminal itself. You could change the definitions of the color indexes (0-15 i think) by editing the kernel source and recompiling.

    h0tw1r3

    Posted 2011-07-23T03:12:02.217

    Reputation: 1 408

    No, that is not what I'm looking for. I want to change the definitions of colors, not the foreground and background color. – Austin Hyde – 2011-07-23T18:22:30.210

    13

    This is entirely possible and is something I do on my Arch setup.

    You could drop something like this in a shell script and have it run at login:

    if [ "$TERM" = "linux" ]; then
        echo -en "\e]P0151515" # Black
        echo -en "\e]P1ac4142" # Red
        ...
        echo -en "\e]PEac4142" # Bright Cyan
        echo -en "\e]PFac4142" # Bright White
        clear # Clear artifacts
    fi
    

    The \e]P0 to \e]PF (base 16) are the escape sequences you need to set the 16 (8 half bright, 8 bright) colours. After which you put your desired replacement colour e.g. 151515.

    Chris Kempson

    Posted 2011-07-23T03:12:02.217

    Reputation: 203

    doesn't seem to work in ubuntu 16.04 with bash fwiw – G Gordon Worley III – 2016-09-20T17:01:43.440

    2

    This is the best command I know of:

    setterm -clear all -foreground green -bold -store
    

    You can only have 8 different color afaict. Maybe some more by using bright in front of basic 8.

    Shubham Chaudhary

    Posted 2011-07-23T03:12:02.217

    Reputation: 1 289