Skip to main content

Testing plymouth bootscreens

Just how difficult is it to test plymouth bootscreens?

Helluva annoying...

It took me a whole day to figure out which components were acting together to present a splashscreen at boot time; and I still haven't figured out how to make the boot process smooth.

Smooth booting

What do I mean with a smooth boot-process? Well, what I would like is to hit the power button of my machine:

  • immediately get the splashscreen
  • seamlessly transition to a login-screen or a login animation
  • transition to the desktop.

At the moment, what I get is:

  • a glimpse of "GRUB Menu 2"
  • some kernel messages
  • a black screen for a few milliseconds
  • the splash-screen
  • a black screen for a few milliseconds (again)
  • the login screen

Actually testing boot splash screens

To test on OpenseSuse 15.2, these are the steps I had to take in order for plymouth to simulate a boot.

#!/bin/bash

# Install Xephyr and X11 renderer for plymout
sudo zypper install plymouth-x11-renderer xorg-x11-server-extra

# start Xephr
Xehpyr :2 &

#####################
# as root (sudo -s)

# point to Xephyr display
export DISPLAY=:2

# get active theme
plymouth-set-default-theme

# list available themes
plymouth-set-default-theme --list

# Set theme
plymouth-set-default-theme breeze # breeze is a theme you need to install

# Test plymouth theme in Xephyr for 10 seconds
plymouthd ; plymouth --show-splash && for ((I=0; I<10; I++)); do sleep 1 ;  plymouth --update=test$I ; done ; plymouth --quit

# Actually apply a theme
plymouth-set-default-theme -R breeze # Notice the -R !

Below, a video of me running those commands.

To find other bootscreens, installing the KDE store system settings plugin was useful. The plugin however can't activate the screens on OpenSuse :/ Of course they can also be downloaded from the KDE store directly.

# From KDE Frameworks
sudo zypper install plymouth-kcm

# Find and download plymouth theme in KDE system settings > Start & Stop

Common problems

A few bootscreens had a few problems and had install scripts specific for debian derivatives.

Finding the plymouth data directory

On OpenSuse, it's /usr/share/plymouth. Other distributions can find the data directory by tacking on "plymouth" to the datadir found in plymouth-set-default-theme.

grep "PLYMOUTH_DATADIR=" $(sudo which plymouth-set-default-theme)

Install script doesn't work on my system

Luckily, installing isn't too difficult and can be done manually. Say you want to install Cyanide Plymouth Theme.

After downloading the zip, unzip it to a directory of your choice e.g /tmp/Cyanide-Plymouth-Theme.

Then find the .plymouth file. For this theme it looks like

[Plymouth Theme]
Name=cyanide
Description=display a sci-fi ring
Comment=created By Aditya Shakya (@adi1090x)
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/cyanide
ScriptFile=/usr/share/plymouth/themes/cyanide/cyanide.script

Rename your directory and .plymouth file to the field in [Plymouth Theme].Name. In our case that's cyanide --> cyanide/cyanide.plymouth.

This is necessary as plymouth-set-default-theme currently looks for ${THEME_NAME}/${THEME_NAME}.plymouth

With that done, make sure .plymouth and .script are both executable (chmod +x cyanide/cyanide.{plymouth,script}).

You can then move the whole cyanide directory to the plymouth data directory.

plymouth --show-splash crashes immediately

Probably the bootscreen's scripts aren't executable. The .script and .plymouth files can be found in the install location and have to be executable.

If there are other issues, run plymouth --debug --no-daemon in a separate shell (don't forget to export DISPLAY=:2) and then rerun the simulation line from above. plymouthd should spit out some (hopefully readable) debug lines.

The logo says "bizcom"

Some boot screens expect a logo to be present. For some reason, that location is hardcoded to be /usr/share/plymouth/bizcom.png on opensuse.

Conclusion

There's a lot of room for improvement, but I'm glad this exists at all and that it's opensource. Figuring this out would've been a terrible pain in the neck otherwise.


Image by drunken_duck on openclipart.org