fbsplash::troubleshooting

Some services do not start during boot when using splashutils 1.1.9.x

With the new versions of splashutils, additional kernel command line arguments such as CONSOLE=/dev/tty1 and quiet are necessary for things to work properly. Starting with 1.1.9, splashutils use a separate tty for the silent mode. The silent tty is normally not switched to the KD_GRAPHICS mode, so all text printed to that tty will appear on the silent image. The default behaviour of /sbin/init is to output all messages to the foregroud tty (/dev/console). This conflicts with what we want in splashutils, thus CONSOLE=/dev/tty1 has to be used to inform init which tty to print the messages to.

Unfortunately, the very option which allows us to do stuff the way we like, may break some service scripts. On my system the affected services were hddtemp and svscan. I have opened bugs for both of them: #86550 (hddtemp) and #86562 (svscan).

But why are things breaking in the first place? init forces all programs it starts to have a controlling tty. By default, the controlling tty is /dev/console. When the CONSOLE= option is used, a user-specified tty is used as the controlling tty. Some services in /etc/init.d don't detach themselves from their controlling tty. When /dev/console is used, it doesn't seem to be a problem, but when a specific tty such as /dev/tty1 takes its place, things start to break. The service starts normally and works properly till the boot-up is finished. After that, it gets killed. This might be confusing, as it seems as if the service just hasn't started.

To fix the problem, a call to setsid() is necessary. setsid() switches the program to a new session, thus detaching it from any controlling ttys. The setsid() call can either be embedded in the code (hddtemp) or added directly in the initscript (svscan). If you happen to be using a package which breaks when CONSOLE=/dev/tty1 is used, please open a bug for it and assign it either to me, or, better yet, to the maintainer of the package (if you know who that is). In the latter case, please provide a link to this page.

The silent splash screen sort of blinks just before "Initializing the kernel" is replaced with "Booting the system".

The scripts from splashutils-gentoo-0.1.8 (splashutils-1.1.9.4 and newer) automatically select a silent splash tty that does not cause conflicts with any services (such as consolefont). Which tty is selected depends on the RC_TTY_NUMBER setting from /etc/conf.d/rc. For example, if RC_TTY_NUMBER is set to 11, tty12 will be used for silent splash. The default silent splash tty is tty8 and this tty is always used by the splash utilities contained in an initramfs, unless the setting is overridden by the tty:n splash option in the kernel command line.

The blinking can occur when the user hasn't specified the tty:n option and a tty other than tty8 is selected by the scripts as the silent tty. Adjust the initial silent tty to RC_TTY_NUMBER+1 to avoid this side effect. For example, if RC_TTY_NUMBER is set to 11, you should use splash=silent,theme:name,tty:12 on your kernel command line.

The kernel messages are all over the silent splash during the initial stages of the system boot-up.

Make sure you have added the quiet option to your kernel command line. If for some reason that doesn't solve the problem completely, you can still use the kdgraphics splash option (eg. splash=silent,kdgraphics,theme:linux).

The F2 key doesn't seem to work. I can switch from silent to verbose, but not the other way around.

Make sure you have compiled your kernel with CONFIG_INPUT_EVDEV=y.

The silent splash screen suddenly gets all black at one point during the boot. The progress bar seems to work, but I have to switch to verbose and back to be able to see the splash picture again.

The described effect can occur when a service (consolefont, usually) messes with the silent splash tty. There are a number of ways of fixing the problem:

  • use the kdgraphics kernel command line option
  • adjust the RC_TTY_NUMBER variable in /etc/conf.d/rc
  • manually set the silent splash tty via the tty:n kernel command line splash option

The splash doesn't work and I get error messages about 8 bpp pictures that cannot be found.

This means you're running in a 8 bpp mode (ie. a mode, when no more than 256 colors can simultaneously be displayed on the screen). 8 bpp modes are partially supported by fbsplash. The verbose and silent images will work, if appropriate image files are provided (ie. images with indexed, 256-color palette; please refer to the splashutils documentation for more details). The progress bar, boot icons, and other fancy stuff will not work in 8 bpp modes.

Most of the time you won't want to run your framebuffer in a 8 bpp mode. In order to avoid it (some framebuffer drivers tend to set 8 bpp by default) you have to explicitly specify the color depth on the kernel command line, for example: video=radeonfb:1280x1024-32@75. The -32 represents the bit depth (in this case it's 32 bits per pixel).