Userspace
From Bootsplash
Contents |
Utilities Overview
When you have a kernel with bootsplash capability (see Kernel stuff) you can use the bootsplash and control it's behaviour with a set of userspace utilities:
- "splash" is used to attach a picture to an initrd or change the picture while the system is running. splash can also be used to trigger command execution when a specified runlevel script is reached. This can for example be used to show animations during bootup.
- "fbresolution", written by Florent Villard (warly@mandrakesoft.com) shows the currently used resolution.
- "fbmngplay" is a utility to display mng animations on the framebuffer console using libmng. fbmngplay is official part of libmng.
- "fbtruetype" is a utility to render text using a truetype font to the framebuffer console.
The kernel bootsplash can be configured using the /proc/splash interface. To be able to use script triggered startup actions such as moving a progress bar, you have to patch your runlevel scripts to call the "splash.sh" script.
Download these utilities at ftp://ftp.bootsplash.org/pub/bootsplash/rpm-sources/bootsplash/bootsplash-3.1.tar.bz2
The splash utility
The splash utility is a multifunction tool that allows you to:
- attach pictures to an initrd.
- attach a jpg picture including the bootsplash config header to an initrd with:
splash -s -f \ /etc/bootsplash/themes/current/config/bootsplash-1024x768.cfg \ >> /boot/initrd
- You can add several pictures like this, if you intend to boot your machine with several resolutions.
- use a new picture on the fly
- show a new bootsplash graphics on the fly on the first console by using
splash -s -u 0 \ /etc/bootsplash/themes/current/config/bootsplash-1024x768.cfg
- any other console can be used by specifying -u [console number] where the console number starts at 0 (i.e. by default you have 0-5)
- trigger events during bootup
- we suggest that you add a function to your init scripts that is called every time an init script is started. This can either be done in the runlevel scripts themselves or by the script/program scheduling it (i.e. /etc/init.d/rc)
function rc_splash()
{
test "$SPLASH" != "no" && test "$_rc_splash" -eq 1 && /sbin/splash "$1"
progress=$(( $progress + 1 ))
}
- when adding the rc_splash call to your runlevel script scheduler, do it
about like this:
for i in $runrc/S${rex}*; do
[..]
# send information to bootsplash handler.
rc_splash "$i start"
[..]
done
- the splash program will look for the file
/etc/bootsplash/themes/current/config/animations.cfg which looks like the following:
[ .. ] fsck start:bootanim start fsck.mng fsck stop:bootanim stop [ .. ]
so when %i is "fsck" and the runlevel script is executed during system start, the bootanim start fsck.mng
Basically, it's a list of bootup hooks that are associated with a command to be executed when a certain service is started/stopped during boot/shutdown.
The syntax is this:
[service] [start|stop]:[command-to-execute]
"Service" is almost always the name of an executed init script. There are some additional hooks for finetuning. See the SuSE 8.1 theme's config file "animations.cfg"
The splash scripts
- The splash.sh wrapper script, which:
- - paints a truetype rendered text during bootup and shutdown at predefined coordinates
- - moves a progress bar, if there is one, using the proc interface.
- - reads the config file /etc/bootsplash/themes/current/config/bootsplash-[X]x[Y].cfg
- The bootanim wrapper script.
This script starts/stops animations played with fbmngplay. It looks for these animations in /etc/bootsplash/themes/current/animations/ per default. It will likely be called from the file animations.cfg. When you want to play an animation when apache is started, you would write: apache start:bootanim start animation.mng To fade out an animation, run bootanim stop. Bootanim can also play multiple animations in a row, each synchronized to a certain point in bootup. This can be used to keep the last picture of an animation visible after playing the animation. To achieve this, use bootanim start with option -m and multiple mng files. To move on to the next animation, use bootanim next later on. Before playing the next animation (esp. at the same position as before), you need to find a hook that can properly stop the boot animation (esp. when playing looped animations). It's also advised to have an entry in your config file that stops running animations as soon as the final system runlevel is reached: master:bootanim stop
Progress bar handling in the init scripts
To have a progress bar during bootup you need the following
- A theme that contains a progress bar.
Look in the Theme section for information on how to add a progress bar and for example themes.
- The above function rc_splash (or comparable functionality)
- The splash.sh script (called from rc_splash as a wrapper to the splash utility)
Additionally you need to make your runlevel script scheduler (i.e. /etc/init.d/rc) aware of the number of scripts to be executed in the current runlevel:
#
# initialize boosplash progressbar variables
#
runrc=/etc/init.d/rc${RUNLEVEL}.d
prerc=/etc/init.d/rc${PREVLEVEL}.d
SSC=($runrc/S*)
case "$SSC" in
*\*) sscripts=0 ;;
*) sscripts=${#SSC[*]}
esac
export sscripts
if test "$PREVLEVEL" != "N" ; then
KSC=($prerc/K*)
case "$KSC" in
*\*) kscripts=0 ;;
*) kscripts=${#KSC[*]}
esac
export kscripts
fi
if [ "$PREVLEVEL" == "N" -a "$RUNLEVEL" == "5" ]; then
export progress=16
sscripts=$(( $sscripts+15 ))
else
export progress=0
fi
To switch the bootsplash off when the final runlevel is reached you can add the following to the runlevel script scheduler at the according place:
rc_splash "master"
This will cause most themes to switch off the bootsplash screen.
What distributions support this per default?
Currently only SuSE Linux 8.2 and newer support all features of the bootsplash v3. Please note that SuSE Linux 8.2 holds the themes in /usr/share/splash/themes. It keeps a temporary copy of the currently used config files in /etc/bootsplash to be used when /usr is not available (i.e. on a different partition). Patches to runlevel scripts of all distributions are welcome and can be linked here, if desired. Contact Stefan Reinauer.
