LILO and Console Splash Screens

Note:  This page is likely very outdated.  I've left it here primarily for archival purposes.  Please refer to the following to links for current information and support:
http://forums.gentoo.org/viewtopic-t-49036.html
http://forums.gentoo.org/viewtopic-t-52290.html

Purpose:

Recent versions of the top-tier Linux distributions (SuSE, Red Hat, etc.) include splash screens at the LILO prompt, and sometimes even on the console when booting the system.  While this is really no more than eye candy, it does have the "Ohh" factor that can attract other people to Linux, which is a Good Thing.

This HOWTO will detail how to enable these splash screens on other distributions, as well as how to change, customize, etc. the splash screen if your preferred distribution already includes one.  This will focus on Gentoo (since that's all I have to work with), but I'll attempt to make it as generic as possible.  Let's get started.

Update:  While this HOWTO was originally intended to be a guide for setting this up on all distributions, it currently covers Gentoo exclusively.  Many of the steps automated by the Gentoo ebuild are quite low-level (patching your kernel, modifying your bootloader, etc.), and as such it will take some time for me to figure out how to reproduce these steps manually.

Prerequisites:

  • kernel patch - included with Gentoo ebuild
  • splash screens - example artwork is included with the Gentoo ebuild; additional artwork may be obtained here

Installation and Configuration:

Installation under Gentoo is very easy, thanks to the bootsplash ebuild.  Follow the steps below to install it.  Note: These instructions are specific to bootsplash-0.4-r1.  The procedure may differ for later versions.

emerge /usr/portage/media-gfx/bootsplash-0.4-r1
ebuild /var/db/pkg/media-gfx/bootsplash-0.4-r1/bootsplash-0.4-r1.ebuild config

The ebuild command above will patch your kernel for splash screen support during boot, so the next step is to enable this in your kernel and recompile it.  Enable the following options:

Block Devices --> <*> Loopback device support
                  <*> RAM disk support
                  [*] initrd support

Console Drivers --> [*] Video mode selection support
                    Frame-buffer support --> [*] Support for frame buffer devices
                                             [*] VESA VGA graphics console
                                             [*] Use splash screen instead of boot logo

Be sure to compile and install your new kernel.

Next, you'll need to install your splash screens.  Decide which resolution you want, and substitute that in for the commands below.  By the way, it's not necessary to use the symlinks (you can call the files directly), but it does make it easier when trying to use additional splash screens.

cd /usr/share/bootsplash/
rm consolesplash* bootsplash*
ln -s gentoo-console-1024x768.cfg consolesplash.cfg
ln -s gentoo-console-1024x768.jpg consolesplash.jpg
ln -s gentoo-boot-1024x768.cfg bootsplash.cfg
ln -s gentoo-boot-1024x768.jpg bootsplash.jpg
splash -s -f bootsplash.cfg >/boot/splash_initrd
rc-update add bootsplash default

Note that there are two different splash screens, one called bootsplash and one called consolesplash.  bootsplash is displayed during the boot process, appearing once the kernel begins to load (after LILO), and until lasts until the Login: prompt.  consolesplash, as you can guess, appears at the login prompt, and remains present on any virtual terminals.  I should point out here that bootsplash is enabled and controlled by your boot loader (LILO), while consoleplash is enabled by the /etc/init.d/bootsplash init script (yes, the consolesplash init script is called bootsplash - just ignore this bad naming convention).

Why have two separate screens?  Well, in addition to the obvious reason (two separate pictures), you can also control the size and shap of the text independantly.  For example, during boot you may prefer to have a tall and narrow text area so that you can easily view the boot messages as they scroll by.  Once you login, though, you may prefer to work in a shorter but wider environment, allowing you to view more text on each line.  The default splash screens are configure like this, and details for changing them are provided below.

Now that you have your splash screens installed, the only remaining task is to configure LILO to display it during boot.  This involves two steps.  First, you have to set LILO to boot in high-resolution mode.  Second, you'll need to set it to display the image.

Decide which resolution you want to use and consult the following table for the VGA number you'll need:

   640x480  800x600  1024x768  1280x1024
256 769 771 773 775
32K 784 787 790 793
64K 785 788 791 794
16M 786 789 792 795

If you're not sure which resolution and color depth you want, I recommend 791 for 1024x768x16.  I've had the best luck with this setting.

To enable everything, add the following lines to the default stanza of your lilo.conf:

vga = 791
initrd = /boot/splash_initrd

Substitute your resolution number for 791, and don't forget to run lilo afterwards to install it.

At this point everything should be installed and configured.  Reboot, and you should be greeted by Larry the cow (yes, the default splash screen can be changed).

Configuration:

Now that you have everything setup, you'll probably want to change the splash screens.  This is pretty easy to do, but you must follow two important guidelines:

  • The images must be the same size as your console resolution
  • The images must be the same color depth as your console

You can grab additional images here.  Each of these images are 1024x768 and 16 bit.

Remember, whatever images you use must conform to the above specifications.  Once you've ensured they do, the rest of the process is relatively easy.

To change your bootsplash screen, copy the new image to /usr/share/bootsplash/, delete the bootsplash.jpg symlink pointing to the old splash screen, then recreate it pointing to your new image.  Unless your image is very similar to the old one, you'll also need to reconfigure it.  Copy the file bootsplash.cfg is linked to so you'll have a template, then open your new .cfg file in an editor.

There are 3 settings you can modify in this file: the border coordinates, the text foreground color, and the text background color.  The coordinates (in pixels) define what part of the screen will display text, and the text color settings should be self-explanatory.  Here's my bootsplash.cfg file:

/usr/share/bootsplash.cfg:
version=2
tx=20
ty=10
tw=990
th=655
fgcolor=15
bgcolor=0

Remember, the coordinates are in pixes, so this says to start the text area at (20,10) and end at (990,655).  tx and tw define, from right to left, the start and end points along the x-axis, and ty and th define from top to bottom the start and end points along the y-axis.  Don't confuse this with the mathematical coordinate system, in which the y-axis origin starts at the bottom.  This configuration also specifies to make my text white with a black bacground.

Note that it's very difficult to guess what the correct coordinates should be, so you may have to resort to trial and error by taking your best guess, rebooting to see how it looks, then trying again.

Once you're happy with the configuration, make the bootsplash.cfg is pointing to your new .cfg file, then install it as your did before:

splash -s -f bootsplash.cfg >/boot/splash_initrd
lilo

This created the new initrd file, and updates LILO to use it.

Modifying your consolesplash image is easier.  As before, copy the new image to /usr/share/bootsplash/, and update the consolesplash.jpg accordingly.  You'll also want to copy the file consolesplash.cfg is pointing to so you'll have another configuration template, then update consolesplash.cfg to point to your new .cfg file.  As above, you'll also need to make sure the .cfg file is properly configured for your new image, then save any changes.

Your new consolesplash screen should automatically be loaded by the bootsplash init script on the next reboot.  Edit /etc/init.d/bootsplash and make sure /usr/bin/splash line is pointing to /usr/share/consoleplash.cfg.  As long as consolesplash.cfg and consolesplash.jpg are linked to the correct files, you should be good to go.

Reboot and be amazed by your handiwork.

If you notice any errors in this document, or if you have trouble getting something working correctly, send me an e-mail.  It took me several tries to get everything setup correctly, so don't get discouraged if it doesn't work right away.  Good luck!