Plymouth

出自 ArchWiki

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 放置在 encryptsd-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 附带了一系列主题

  1. BGRT:Spinner 的变体,如果可用,则保留 OEM 徽标(BGRT 代表 Boot Graphics Resource Table,启动图形资源表)
  2. Fade-in:“简单的淡入淡出主题,带有闪烁的星星”
  3. Glow:“企业主题,带有饼图启动进度,然后是发光的 emerging 徽标”
  4. Script:“脚本示例插件”(尽管描述如此,但似乎是一个非常不错的 Arch 徽标主题)
  5. Solar:“太空主题,带有剧烈闪耀的蓝色恒星”
  6. Spinner:“带有加载微调器的简单主题”
  7. Spinfinity:“在屏幕中心显示旋转的无限符号的简单主题”
  8. Tribar:“带有三色进度条的文本模式主题”
  9. Text:“带有三色进度条的文本模式主题”
  10. 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

重新生成 initramfs

技巧与提示

显示启动消息

在启动期间,您可以通过按 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 5drop-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

然后启用该服务。

注意: 如果您从 initramfs 启动 Plymouth,则以前的方法都无效。

使用 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 中的替代方案。

显示未居中

当启动期间启用多个显示器时,某些主题可能难以使显示居中。

您可以使用 内核模式设置#强制模式 来禁用特定的显示器。

参见