Plymouth
Plymouth 是一个来自 Fedora 的项目,现在被列为 freedesktop.org 的官方资源之一,提供无闪烁的图形启动过程。它依赖于内核模式设置 (KMS) 以尽早设置显示器的原生分辨率,然后提供一个美观的启动画面,一直显示到登录管理器。
准备工作
Plymouth 主要使用 KMS 来显示图形,但在 UEFI 系统上,它可以利用 EFI 帧缓冲。
如果您无法使用 KMS,例如因为您正在使用专有驱动程序,或者如果您不想使用 EFI 帧缓冲,请考虑使用 Uvesafb,因为它适用于宽屏分辨率。如果您既没有 KMS 也没有帧缓冲,Plymouth 将回退到文本模式。
安装
Plymouth 可通过稳定软件包 plymouth 获取。对于开发版本,请使用 plymouth-gitAUR。
默认情况下,Plymouth 将启动消息记录到 /var/log/boot.log
中,并且不显示图形启动画面。
- 如果您想看到启动画面,请将
splash
添加到 内核参数 中。 - 如果您想要静默启动,也请添加
quiet
。 - 如果您想禁用日志记录,请添加
plymouth.boot-log=/dev/null
。或者,添加plymouth.nolog
,它也会禁用控制台重定向。
要在早期启动时启动 Plymouth,您必须配置您的 initramfs 生成器以创建包含 Plymouth 的映像。
mkinitcpio
将 plymouth
添加到 mkinitcpio.conf
中的 HOOKS
数组中。
/etc/mkinitcpio.conf
HOOKS=(... plymouth ...)
如果您正在使用 systemd
hook,它必须在 plymouth
之前。
此外,如果您的系统使用 dm-crypt 加密,请确保将 plymouth
放置在 encrypt
或 sd-encrypt
hook 之前。
最后,重新生成 initramfs。
dracut
安装 Plymouth 后,dracut 将自动检测到它并将其添加到您的 initramfs 映像中。如果自动检测失败,您可以强制 dracut 包含 Plymouth,方法是将以下行添加到您的 dracut 配置中
/etc/dracut.conf.d/myflags.conf
add_dracutmodules+=" plymouth "
配置
Plymouth 可以在文件 /etc/plymouth/plymouthd.conf
中进行配置。您可以在 /usr/share/plymouth/plymouthd.defaults
中查看默认值。
更改主题
Plymouth 附带了一系列主题
- BGRT:Spinner 的变体,如果可用,则保留 OEM 徽标(BGRT 代表 Boot Graphics Resource Table,启动图形资源表)
- Fade-in:“简单的淡入淡出主题,带有闪烁的星星”
- Glow:“企业主题,带有饼图启动进度,然后是发光的 emerging 徽标”
- Script:“脚本示例插件”(尽管描述如此,但似乎是一个非常不错的 Arch 徽标主题)
- Solar:“太空主题,带有剧烈闪耀的蓝色恒星”
- Spinner:“带有加载微调器的简单主题”
- Spinfinity:“在屏幕中心显示旋转的无限符号的简单主题”
- Tribar:“带有三色进度条的文本模式主题”
- Text:“带有三色进度条的文本模式主题”
- Details:“详细回退主题”
Arch 将默认主题设置为 bgrt[1]。可以通过运行以下命令来确认这一点
$ plymouth-set-default-theme
可以通过编辑配置文件来更改主题
/etc/plymouth/plymouthd.conf
[Daemon] Theme=theme
或通过运行
# plymouth-set-default-theme -R theme
每次更改主题时,都必须重建 initrd
。-R
选项确保它被重建(否则手动重新生成 initramfs)。
安装新主题
您可以从 AUR 安装其他主题。 [2],或者,plymouth-kcm 提供了与 KDE Plasma 设置的集成,并提供 AUR 上不可用的主题。
可以使用以下命令列出所有当前安装的主题
$ plymouth-set-default-theme -l
或
$ ls /usr/share/plymouth/themes
bgrt details fade-in glow script solar spinfinity spinner text tribar
显示延迟
Plymouth 有一个配置选项可以延迟启动画面
/etc/plymouth/plymouthd.conf
[Daemon] ShowDelay=5
在启动速度快的系统上,您可能只会看到启动主题的闪烁,然后您的 DM 或登录提示符就准备好了。您可以将 ShowDelay
设置为比启动时间更长的间隔(以秒为单位),以防止这种闪烁,并且只显示空白屏幕。默认值为 0 秒,因此您应该不需要将其更改为不同的值,以便在启动期间更早地看到启动画面。
HiDPI
编辑配置文件
/etc/plymouth/plymouthd.conf
[Daemon] DeviceScale=an-integer-scaling-factor
技巧与提示
显示启动消息
在启动期间,您可以通过按 Esc
键切换到启动消息。
平滑过渡
GDM 开箱即用地支持平滑过渡。
预览主题
可以通过运行以下命令预览当前配置的主题[3]
# plymouthd; plymouth --show-splash; sleep 5; plymouth --quit
sleep
调用,允许在定义的延迟后将控制权返回给用户;请勿删除它。更改背景图片
您可以为基于两步的主题(例如 spinner 和 bgrt)添加背景图片。只需将您想要的图片放入 /usr/share/plymouth/themes/spinner/background-tile.png
。主题更改后,不要忘记重新生成 initrd。
缺少 BGRT 图像
如果您正在使用 BGRT 主题,但 UEFI 没有提供供应商徽标,您可以将回退图片放入 /usr/share/plymouth/themes/spinner/bgrt-fallback.png
以显示它。
或者,设置以下内容以保留固件背景
/etc/plymouth/plymouthd.conf
UseFirmwareBackground=true
减慢启动速度以显示完整动画
在启动时间非常快的系统上,如果需要显示完整动画,则可能需要在 plymouth-quit.service
中添加一个延迟,使用包含 ExecStartPre=/usr/bin/sleep 5
的 drop-in snippet。请参阅 这篇 reddit 帖子。
或者,可以使用一个新的 systemd 服务,它与 plymouth 同时启动,并等待动画所需的整个持续时间。此方法将确保不会感知到启动时间的不一致,因为它不是在动画之后添加的时间,而是在动画期间运行的延迟。
/etc/systemd/system/plymouth-wait-for-animation.service
[Unit] Description=Waits for Plymouth animation to finish Before=plymouth-quit.service display-manager.service [Service] Type=oneshot ExecStart=/usr/bin/sleep duration_of_your_animation [Install] WantedBy=plymouth-start.service
然后启用该服务。
使用 SimpleDRM
在使用 UEFI 的设备上,Plymouth 能够使用 SimpleDRM 驱动程序在 UEFI 帧缓冲上显示启动画面。这使得启动画面可以出现在加载 GPU 驱动程序需要太长时间的较快机器上(例如,具有 AMD GPU 的系统),并且还消除了主板启动画面和 Plymouth 之间的任何闪烁。
要启用 SimpleDRM,请将 plymouth.use-simpledrm
添加到您的 内核参数 中。有关此选项的更多信息,请参阅 Plymouth 问题 264。
故障排除
使用内核参数禁用
如果您在启动期间遇到问题,您可以使用以下 内核参数 临时禁用 Plymouth
plymouth.enable=0 disablehooks=plymouth
调试
要将调试输出写入 /var/log/plymouth-debug.log
,请添加以下内核参数
plymouth.debug
密码提示未更新
当在 Mkinitcpio 中使用 systemd
而不是 udev
hooks 时,密码提示可能不会在使用 Plymouth 脚本处理它的主题上更新。
您可以尝试切换到开发版本 plymouth-gitAUR 或使用 Mkinitcpio#Common hooks 中的替代方案。
显示未居中
当启动期间启用多个显示器时,某些主题可能难以使显示居中。
您可以使用 内核模式设置#强制模式 来禁用特定的显示器。