Switching from pbsplash to Plymouth

April 30, 20261 min. read

We've been working on improving the boot splash screen experience in postmarketOS for a while now, and we're happy to share that we've switched from pbsplash to Plymouth. Plymouth is widely used across many Linux distributions and is a big improvement over pbsplash.

pbsplash didn't use DRM, so display rotation wasn't supported. It also had to be killed and restarted every time the displayed message changed, which was messy to handle in the initramfs and caused graphical flickering. On top of that, we had to maintain custom systemd units and workarounds that still had rough edges. Plymouth solves all of this and integrates cleanly with systemd and OpenRC out of the box, reducing our maintenance burden significantly.

A nice new feature is the ability to toggle the splash at runtime by pressing Esc on devices with a keyboard, or the power button on phones and tablets. With pbsplash, seeing the console required modifying the kernel cmdline and rebooting, which on some devices meant reflashing a boot image.

Device compatibility

Plymouth requires DRM for rendering. It does have a framebuffer renderer, but it hasn't been well tested and may not work correctly on all devices. Devices using downstream kernels without DRM support may not have a working splash screen. We think this is an acceptable tradeoff, since we consider downstream kernels to be a transitional step toward mainline support.

Devices with hardcoded u-boot scripts will need a device maintainer to add splash to the kernel cmdline. Some devices (for instance older Samsung devices) have bootloaders that override the kernel cmdline entirely, making it impossible to enable the splash on those devices. These devices will only see a blinking cursor while they are booting, but otherwise boot should be unaffected by this.

If you use full disk encryption, unl0kr is still used for the unlock prompt, since Plymouth does not have an on-screen keyboard.

Disabling the splash

To toggle the splash during boot or shutdown, press Esc on a keyboard or the power button on devices without one.

To permanently disable the splash, create /etc/kernel-cmdline.d/nosplash.conf with the following content:

-splash

Also see