Read this from: How it works
First of all, you need to have Splashy installed. Either do this through some package for your distro or follow this link.
Also make sure you are running a 2.6 (or newer) kernel.
Your kernel must have framebuffer support and a valid framebuffer driver.
Both your BIOS and your graphics card should support VESA 2.0. If it doesn't, you will not be able to use vesafb driver. In such case, read this.
Official support from the Splashy team is available for the following Linux distributions:
Other Linux distributions known to support or include Splashy in some way include:
Other POSIX OS's known to support Splashy:
Although Splashy is developed on Debian (Ubuntu and plain vanilla Sid), Splashy was conceived to work with any POSIX based system for as long as:
Essentially this means that all modern Linux distributions work fine with Splashy, as well as the *BSD variants.
There is NO need to patch the kernel or any other system binary.
Or you get an error like ERROR: Couldn't splashy_start_splashy(). Error -2
Make sure your bootloader config file has the vga=791 splash parameter. Values bigger than 792 might not be supported by VESA; make sure that your resolution is within the allowed range.
For GRuB users this is done through the /boot/grub/menu.lst file, in the lines nonaltoptions, kopt or kernel (for the kernel you are running), adding vga=791 splash.
title Ubuntu 8.04.1, kernel 2.6.24-21-generic root (hd0,0) kernel /vmlinuz-2.6.24-21-generic root=/dev/mapper/bootdisk-root00 ro quiet vga=791 splash initrd /initrd.img-2.6.24-21-generic quiet
For LiLO users just add vga=791 splash in your kernel section or in the common parameters section (do not put in inside append=) in your /etc/lilo.conf file.
Read /usr/share/doc/splashy/README for more information.
Instead of vga=0×314 use video=MYFB (where MYFB can be any of your kernel's framebuffer drivers) in your bootloader's configuration file.
Note: In lilo, vga= is a separate configuration line. In this case, you'll have to comment out this line (or remove it) and append the video= parameter in the append= line (use spaces to separate various append values).
If you compiled you framebuffer driver(s) as module(s) you can see its/their name by doing
ls /lib/modules/`uname -r`/kernel/drivers/video/*fb.ko /lib/modules/`uname -r`/kernel/drivers/video/*/*fb.ko
Obviously, you must only take the filename (not the directory path) and remove the .ko suffix.
You might also want to set your screen resolution, colour depth and other graphical settings.
To do so you will have to add some parameters to the video= argument after the frame buffer driver, using a colon (:) as a separator:
video=<fbdriver>:<xres>x<yres>[-<bpp>][@refresh]
Note: Not all framebuffer drivers support this.
See Documentation/fb/modedb.txt in the kernel sources for more information.
Splashy doesn't depend on any kernel patch or any boot loader. All you need is to tell the kernel to load a virtual-frame-buffer (fb) as soon as possible (before Splashy starts). The best way to do this is to edit your bootloader's config file as stated previously.
Splashy will use /dev/fb0 to print to the framebuffer if that device is available. But you can use any other framebuffer device by setting the path in the FRAMEBUFFER environment variable. For example:
FRAMEBUFFER=/dev/fb1
The easiest way to handle this si tring to reinstall it.
In Debian:
apt-get --purge remove splashy usplash update-rc.d -f splashy remove
# if you want to be super kosher, then do these as well: rm -f /etc/init.d/splashy* /etc/init.d/usplash* rm -f /etc/rcS.d/S*splashy* /etc/default/splashy rm -fr /etc/splashy
GRuB users might need to edit your /boot/grub/menu.lst like:
#kopt= vga=0x314 splash
And then run:
update-grub
After that, reboot and it should work fine.
This problem occurs when the the fb driver (usually vesafb) which is loaded during boot can't work together with your video-card's framebuffer. You can check this problem by doing:
dmesg | grep fb
If the error shows up, you know what your problem is.
To solve the problem you will need to do the following: Find out what the fb driver for your video card is. Google can be great help, but sometimes it's quite obvious. You can look in the video drivers directory (do: ls /lib/modules/`uname -r`/kernel/drivers/video ) and guess which driver should work, then verify this by searching or asking someone who might know.
List the contents of the initrd directory (do: ls /lib/modules/`uname -r`/initrd ). Look for the module which was causing the error (usually vesafb. The extension of the file can be .ko or .o depending on if you are using a 2.6 kernel or an older one respectively). Now you will need to copy the correct driver to the initrd directory and remove the faulty one. Make sure that you copy the driver you need. As an example:
cp /lib/modules/`uname -r`/kernel/drivers/video/aty/atyfb.ko /lib/modules/`uname -r`/initrd/atyfb.ko rm /lib/modules/`uname -r`/initrd/vesafb.ko
Now the only thing we have to do is to make the initrd image (which is started at boot). You have to use the correct image, so check your bootloader configuration (/boot/grub/menu.lst for Grub), and look for the line which mentions initrd (Note: If you have more boot options, because you have more kernels installed for instance, you must look for the initrd line under the boot option which you are currently using). The 2.6.8.1-3-386 kernel, for example, usually uses the file initrd.img-2.6.8.1-3-386 which is located in the /boot directory. In order to make the initrd image you will have to do:
mkinitrd -o /boot/initrd.img-2.6.8.1-3-386
You must replace /boot/initrd.img-2.6.8.1-3-386 with the correct initrd file. When mkinitrd is done, you can reboot. Splashy should work now.
Are you getting this error message?
t_kernel_font: Invalid Argument
In this case it's a bug related with the /etc/init.d/console-screen.sh file that does not set the font for framebuffer properly. This bug is unsolved. The work around is to edit the /etc/splashy/config.xml file and set autoverboseonerror to ”no” (without the quotes).
This means that you have correctly setup your kernel framebuffer. In other words, it is not that the tezt is smaller, it is that the screen is wider! You have set a higher resolution to your console.
If you don't want to see Splashy during boot any more and you want to see your console messages the way they were, simply remove it and restore (or delete) your previous vga= setting from your kernel parameters. On Debian systems:
Assuming that you are using the right vga=XXX parameter to your kernel, you might still have to tell your libdirectfb to pick the right resolution and refresh rate for you. When Splashy asks DirectFB to select a video mode by width x height, DirectFB chooses the first one listed in /etc/fb.modes that matches the desired size. With the default /etc/fb.modes shipped in Debian, the first 1280×1024 mode is “1280×1024, 43 Hz, Interlaced”, which your monitor might not handle but your video card might support it. Try moving the mode that you want to the top of /etc/fb.modes (say 1280×1024 @ 60Hz).
We are aware of this and we opened a bug in Ubuntu's bug tracker:
https://launchpad.net/distros/ubuntu/+source/upstart/+bug/76304
The workaround for now is to simply apply this to /etc/event.d/rcS:
--- /etc/event.d/rcS 2006-09-13 18:47:27.000000000 -0400
+++ rcS 2006-12-18 13:12:42.000000000 -0500
@@ -14,6 +14,12 @@
# information (we enter rc1 not rcS for maintenance). Run /etc/init.d/rc
# without information so that it defaults to previous=N runlevel=S.
script
- runlevel --set S >/dev/null || true
+ set $(runlevel --set S || true)
+ if [ "$1" != "unknown" ]; then
+ PREVLEVEL=$1
+ RUNLEVEL=$2
+ export PREVLEVEL RUNLEVEL
+ fi
+
exec /etc/init.d/rcS
end script
[Update: 2008-05-26] A newer patch was applied upstream. See Directfb Git repository.
Splashy just entered Lenny (Debian testing) and the version of directfb of this release does not have this patch. Please do the following to apply this patch to it:
cd /usr/src apt-get source libdirectfb-dev cd directfb* # edit inputdrivers/keyboard/keyboard.c as the patch says apt-get install build-essentials devscripts # optional debuild -us -uc dpkg -i ../libdirectfb*.deb
This2) is a very well known issue. Thanks to the guys are RPath Linux, we have a work around that works3). This happens because of how directfb (version 1.1 and below) binds to ttyN < 7 during boot. Forcing directfb to use tty8 fixes the issue for some distributions. A better fix is to add usleep(2000) to the keyboard even thread in directfb:
only in patch2:
unchanged:
--- directfb-0.9.25.1.orig/inputdrivers/keyboard/keyboard.c
+++ directfb-0.9.25.1/inputdrivers/keyboard/keyboard.c
@@ -279,6 +279,8 @@
keyboard_set_lights( data, evt.locks );
}
+ if (readlen <= 0)
+ usleep(2000);
}
if (readlen <= 0 && errno != EINTR)
Say that you want to make sure that /sbin/splashy is in your initrd image file. You can do the following to examine its contents:
mkdir -p /tmp/initrd cd /tmp/initrd cat /boot/initrd.img | gzip -d | cpio -i
Then read the /init script (or /linuxrc) to see how the boot process works and look for /sbin/splashy (or /usr/sbin/splashy) with:
find . -name splashy
Splashy has a safety 120 seconds timeout period if it does not receive update commands from splashy_update. The reason why this is happening varies from distribution to distribution, here are possible causes for this to happen on Debian related distributions:
#!/bin/sh pidof splashy > /dev/null && touch /lib/init/rw/splashy/splashy-stopped-foo && exit 0 # where "foo" is the name of the script that Splashy needs to be stopped.
Here are examples of how to stop two known scripts in Debian that make this situation happen:
/etc/init.d/keymap.sh #!/bin/sh pidof splashy > /dev/null && touch /lib/init/rw/splashy/splashy-stopped-keymap && exit 0
/etc/init.d/console-screen.sh #!/bin/sh pidof splashy > /dev/null && touch /lib/init/rw/splashy/splashy-stopped-console-screen && exit 0
Note that Splashy LSB script will restart these two scripts if the /lib/init/rw/splashy/ files exists. See /etc/lsb-base-loggin.sh.