1. Introduction

Linux isn’t the most famous operating system (OS) when it comes to eye candy. Still, there are different customization options available that make using Linux distributions a more graphical and animated experience. One such option is changing the boot and shutdown graphics.

In this tutorial, we discuss the Plymouth package for splash screen customization. First, we go through the main idea of Plymouth and its architecture. After that, we install and configure the package. Finally, we go over Plymouth theme installation and customization.

We tested the code in this tutorial on Debian 12 (Bookworm) with GNU Bash 5.2.15. Unless otherwise specified, it should work in most POSIX-compliant environments.

2. Plymouth

The Plymouth package enables the display of graphics when booting or shutting down the system. For both, we can configure images or animations that show up during the relevant process. Essentially, there are several reasons for doing this such as aesthetics and better presentation, e.g., for demonstration purposes.

Notably, Plymouth requires kernel mode setting (KMS), which depends on the specific video driver:

  • ATI or AMD: supported by most recent cards and drivers
  • NVIDIA: usually supported, but many require manual toggling
  • Intel: supported and usually enabled in Xorg

Let’s look at the basic components.

2.1. Architecture

Plymouth comprises the plymouthd daemon and the plymouth client. Usually, plymouthd starts within initrfamfs and stops when a display manager takes over.

Further, applications that want to communicate with the Plymouth daemon leverage the libply.so shared library.

Importantly, we can also use the plymouyth-theme-script package to enable scripting.

How Plymouth runs upon shutdown depends on the specific system.

2.2. Install

Usually, Plymouth is available in the native package manager:

$ apt install plymouth plymouth-themes

In this case, we employ apt.

Alternatively, we can also install plymouth-x11.

2.3. Configure

First, we may need to enable kernel mode setting via the bootloader for Plymouth to work correctly:

$ cat /etc/default/grub
[...]
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"
[...]

Specifically, for NVIDIA drivers, we add nvidia-drm.modeset=1 as a kernel boot parameter.

In this case, we also see the usual defaults of quiet and splash. Both are important for a non-verbose graphical boot procedure.

In addition, we can use the bootloader configuration to set other parameters like the resolution:

$ cat /etc/default/grub
[...]
GRUB_GFXMODE=1920x1080x32
[...]

Here, we set the resolution as 1920 by 1080 with a color depth of 32.

Finally, since we use GRUB for the examples, we apply the settings:

$ update-grub2

Although Plymouth offers and attempts to read several configuration files upon stratup, some Linux distributions ignore them:

  • /etc/plymouth/plymouthd.conf
  • /lib/plymouth/plymouthd.defaults
  • /lib/plymouth/themes/default.plymouth

At this point, we should be ready to use Plymouth.

2.4. Troubleshooting

In case of issues with the splash screen, aside from verifying the configuration, we can also check the /var/log/boot.log file:

$ cat /var/log/boot.log

Since Plymouth can write its status messages there, we might be able to understand potential problems.

3. Plymouth Themes

The main idea of Plymouth is customization. When it comes to graphics, this is primarily done via themes. Still, we can have themes that incorporate the verbose textual information during boot.

3.1. List

To list the current themes, we can use several options.

One of the more reliable methods is to check the contents of the directories that usually hold Plymouth themes:

  • /lib/plymouth/themes
  • /usr/share/plymouth/themes

Alternatively, we can use the update-alternatives command:

$ update-alternatives --config default.plymouth
There are 2 choices for the alternative default.plymouth (providing /usr/share/plymouth/themes/default.plymouth).

  Selection    Path                                                             Priority   Status
------------------------------------------------------------
  0            /usr/share/plymouth/themes/bgrt/bgrt.plymouth                     110       auto mode
  1            /usr/share/plymouth/themes/bgrt/bgrt.plymouth                     110       manual mode
* 2            /usr/share/plymouth/themes/vortex-ubuntu/vortex-ubuntu.plymouth   100       manual mode
Press  to keep the current choice[*], or type selection number

Although it also offers a choice to change the default, this command displays all current themes as well as the directory in which they reside.

3.2. Install

Of course, to configure Plymouth themes, we first find and download one locally.

After that, we copy the theme to the respective directory that we saw earlier. For example, let’s assume our theme resides at /usr/share/plymouth/themes/xorpig/xorpig.plymouth.

Now, to –install new themes, we again employ update-alternatives:

$ update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth \
  /usr/share/plymouth/themes/xorpig/xorpig.plymouth 100

Naturally, we might also want to modify the Priority and the Status, depending on the context.

Here, we install the /usr/share/plymouth/themes/xorpig/xorpig.plymouth theme as the default.

3.3. Select and Configure

If we want to select another theme at any point, we rerun update-alternatives:

$ update-alternatives --config default.plymouth
There are 2 choices for the alternative default.plymouth (providing /usr/share/plymouth/themes/default.plymouth).

  Selection    Path                                                             Priority   Status
------------------------------------------------------------
  0            /usr/share/plymouth/themes/bgrt/bgrt.plymouth                     110       auto mode
  1            /usr/share/plymouth/themes/bgrt/bgrt.plymouth                     110       manual mode
* 2            /usr/share/plymouth/themes/vortex-ubuntu/vortex-ubuntu.plymouth   100       manual mode
  3            /usr/share/plymouth/themes/xorpig/xorpig.plymouth                 120       manual mode
Press  to keep the current choice[*], or type selection number

Sometimes, it might be necessary to also update the initramfs after theme selection:

$ update-initramfs -u

In addition, the Debian-specific plymouth-set-default-theme command enables several shortcuts for listing themes and setting defaults.

3.4. Test

Since rebooting might not always be desired, we can instead test the new settings directly:

$ plymouthd && plymouth --show-splash && sleep 5 && killall plymouthd

Thus, we run the daemon, force it to –show-splash, sleep for 5 seconds for observation, and then kill the daemon.

4. Summary

In this article, we explored the Plymouth splash screen customization package and its theming options.

In conclusion, Plymouth is one of the top choices for creating a sleek and professional-looking boot and shutdown screen with different graphics options.