132 lines
2.8 KiB
Markdown
132 lines
2.8 KiB
Markdown
---
|
|
publish: true
|
|
permalink: /os/plymouth
|
|
title: Plymouth
|
|
created: 2026-02-05T09:31:46.739-07:00
|
|
modified: 2026-02-05T12:18:10.585-07:00
|
|
tags:
|
|
- boot
|
|
- splash
|
|
- luks
|
|
cssclasses: ""
|
|
---
|
|
|
|
Plymouth provides a graphical boot splash screen, including during LUKS password entry.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
sudo pacman -S plymouth
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### mkinitcpio (systemd hooks)
|
|
|
|
I use systemd-based initramfs hooks. Edit `/etc/mkinitcpio.conf`:
|
|
|
|
```bash
|
|
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole plymouth sd-encrypt block filesystems resume fsck)
|
|
```
|
|
|
|
Key points:
|
|
- Using `systemd` not `udev`
|
|
- Using `sd-vconsole` not `keymap consolefont`
|
|
- Using `sd-encrypt` not `encrypt`
|
|
- `plymouth` comes **after** `sd-vconsole` and **before** `sd-encrypt`
|
|
|
|
Regenerate initramfs:
|
|
```bash
|
|
sudo mkinitcpio -P
|
|
```
|
|
|
|
### Kernel Parameters
|
|
|
|
Add `splash` to your bootloader config.
|
|
|
|
**For Limine** (`/boot/EFI/limine/limine.conf`):
|
|
```
|
|
cmdline: quiet splash rd.luks.uuid=<UUID> root=/dev/mapper/root ...
|
|
```
|
|
|
|
> **Note:** With systemd hooks, use `rd.luks.uuid=` instead of `cryptdevice=`
|
|
|
|
**For systemd-boot** (`/boot/loader/entries/arch.conf`):
|
|
```
|
|
options quiet splash rd.luks.uuid=<UUID> root=/dev/mapper/root ...
|
|
```
|
|
|
|
### Set Theme
|
|
|
|
```bash
|
|
# List available themes
|
|
plymouth-set-default-theme -l
|
|
|
|
# Set theme (and rebuild initramfs)
|
|
sudo plymouth-set-default-theme -R spinner
|
|
```
|
|
|
|
Popular themes:
|
|
- `spinner` — Simple spinner (default)
|
|
- `bgrt` — Uses manufacturer logo from ACPI
|
|
- `fade-in` — Fading star field
|
|
|
|
### Install more themes
|
|
|
|
```bash
|
|
paru -S plymouth-theme-arch-logo
|
|
paru -S plymouth-theme-monoarch
|
|
```
|
|
|
|
## LUKS Integration
|
|
|
|
Plymouth displays the LUKS password prompt graphically instead of the text console.
|
|
|
|
For this to work with systemd hooks:
|
|
1. `plymouth` hook must be before `sd-encrypt` hook
|
|
2. `splash` must be in kernel parameters
|
|
3. Use `rd.luks.uuid=` for LUKS device specification
|
|
|
|
## systemd vs udev Hooks
|
|
|
|
| udev-based | systemd-based |
|
|
|------------|---------------|
|
|
| `udev` | `systemd` |
|
|
| `keymap consolefont` | `sd-vconsole` |
|
|
| `encrypt` | `sd-encrypt` |
|
|
| `cryptdevice=UUID=...:name` | `rd.luks.uuid=...` |
|
|
|
|
## Testing
|
|
|
|
Test without rebooting:
|
|
```bash
|
|
sudo plymouthd
|
|
sudo plymouth --show-splash
|
|
# Press Enter to dismiss
|
|
sudo plymouth quit
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### No splash on boot
|
|
|
|
1. Verify `splash` is in kernel params
|
|
2. Check hook order in mkinitcpio.conf
|
|
3. Regenerate initramfs: `sudo mkinitcpio -P`
|
|
|
|
### LUKS prompt is text-only
|
|
|
|
The `plymouth` hook must come **before** `sd-encrypt`:
|
|
```bash
|
|
HOOKS=(... sd-vconsole plymouth sd-encrypt ...)
|
|
```
|
|
|
|
### View boot messages
|
|
|
|
Remove `quiet` temporarily to see boot messages if Plymouth isn't working.
|
|
|
|
## Resources
|
|
|
|
- Arch Wiki: https://wiki.archlinux.org/title/Plymouth
|
|
- Arch Wiki (mkinitcpio systemd): https://wiki.archlinux.org/title/Mkinitcpio#Common_hooks
|