Ubuntu – How to customize a full-screen console background (TTY)

ttyvirtual-console

I used to use full-screen consoles (those opened with Ctrl+Alt+F1F6) actively and have come to an idea that I would like to try decorating it with a "wallpaper" of a sort (a rather dark and monotonous one of course so that it wouldn't decrease readability), perhaps this could look and feel nice (or not, but I need to try). It would even better if I could set different pictures as different console's background (one for Ctrl+Alt+F1, another for Ctrl+Alt+F2 etc).

The fact the consoles have much higher resolution that pure text mode provides suggests that full-fledged graphical mode is used for them and everything is possible. But how?

Best Answer

I'm pretty sure that the Linux console driver does not have this ability built in, however there is an application called fbterm which can do this. In order to make background images work, you will also need a utility which can display an image on the framebuffer such as fbi:

sudo apt-get install fbterm fbi

fbterm does not actually read or display background images itself, it expects some other program to set up the background image on the screen before it starts. There are instructions in the fbterm man page on how to do this using fbv, an absolutely antiquated and unsupported utility I couldn't even get to compile on a modern Ubuntu system. fbi is a much cleaner and nicer image viewer for the framebuffer, but unfortunately does not have the "set it and exit" functionality of the simpler fbv, and thus interferes with fbterm if you try to use it directly. However, I was able to come up with an alternative which works:

First, you will need to use fbi and cat to display the image you want and then dump it to a "framebuffer raw format" image file. As root, in a framebuffer console, run:

( sleep 1; cat /dev/fb0 > nifty-background.fbimg ) & fbi -t 2 -1 --noverbose -a nifty-background.png

(This will display the image for a couple of seconds and then exit, having saved the result in the file nifty-background.fbimg. Replace nifty-background.fbimg and nifty-background.png with whatever filenames you wish, of course.)

The first part of the command waits for 1 second before catting the framebuffer contents to a file. At the same time, the second part (after the &) launches fbi to display the image on the framebuffer, so that when the cat command gets around to executing (1 second later), there's an image there to dump. The reason they're in that order is because I found that fbi had issues if it wasn't running in the foreground, which means it has to be the last command in the list.

From then on, whenever you want to run fbterm, you can start it like so (you may want to create a little wrapper script):

export FBTERM_BACKGROUND_IMAGE=1
cat nifty-background.fbimg > /dev/fb0; fbterm
Related Question