跳转到内容

Plymouth

来自 Arch Linux 中文维基


Plymouth 是一个来自于 Fedora 社区的提供漂亮的启动界面的项目,现在它被列入了freedesktop.org 的官方资源之中。它依靠 KMS 尽可能早的设置显示器的原始分辨率显示,之后产生漂亮的启动界面直至出现登录界面。

准备

Plymouth 依靠 KMS(Kernel Mode Setting,内核级显示模式设置)显示图形界面。在 UEFI 系统中,Plymouth 可以使用 EFI 帧缓冲。

如果使用了私有驱动, 无法启用 KMS,或者只是不想使用 EFI 帧缓冲,那么可以考虑使用支持大屏分辨率的 Uvesafb。如果既没有KMS也没有framebuffer,那么Plymouth将使用文本模式。

安装

需要稳定版本请安装 plymouthplymouth-gitAUR是开发版本。

默认情况下,Plymouth 将引导消息记录到 /var/log/boot.log,并且不显示启动画面。

  • 要显示启动画面,将 splash 加入内核参数
  • 需要静默启动, 再添加 quiet
  • 要禁用日志,添加 plymouth.nolog

安装 Plymouth 后,如果想要在启动早期阶段就启用,需要配置 initramfs 生成器,创建含有Plymouth的镜像。

mkinitcpio

plymouth添加到 mkinitcpio.confHOOKS 列表中:

/etc/mkinitcpio.conf
HOOKS=(... plymouth ...)

然后使用 mkinitcpio -P 命令重新生成 initramfs

如果你正在使用 systemd 钩子,它必须在 plymouth 之前。

如果你的系统使用 dm-crypt 加密,请确保将 plymouth 钩子置于 crypt 钩子之前。

dracut

安装 Plymouth 之后,dracut 会自动捕获并将其添加到 initramfs 镜像中。如果自动捕获失败,可以在 dracut 配置文件中添加下列几行来强制 dracut 引入 Plymouth:

/etc/dracut.conf.d/myflags.conf
add_dracutmodules+=" 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: "伴随着新兴标志的饼状引导进度条的企业主题"
  4. Script: "脚本案例插件" (漂亮的 Arch Logo 主题)
  5. Solar: "带有燃烧的蓝色星球的空间主题"
  6. Spinner: "带有加载框的简单主题"
  7. Spinfinity: "显示旋转的无穷大标志的主题"
  8. Tribar: "带三色进度条的文本模式主题"
  9. (Text: "带三色进度条的文本模式主题")
  10. (Details: "详细信息回退主题")

默认选择 bgrt,可以通过修改配置文件设置其它主题, 例如:

/etc/plymouth/plymouthd.conf
[Daemon]
Theme=fade-in

或者执行

# plymouth-set-default-theme -R theme

每次更换主题,initrd 都必须重新构建。-R选项可确保其被重建(或者手动重新生成 initramfs):

安装新主题

可以通过 AUR 安装其它主题,或者 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

对于启动很快的系统,可能在显示管理器或登录提示准备好前只能看到启动画面闪过。可以设置 ShowDelay 为一个比启动时间更长的值(以秒为单位)来避免这种闪烁以及黑屏。默认值为0秒,因此您不需要将其更改为其他值,就可以在引导过程中更早地看到您的启动。

HiDPI

编辑配置文件:

/etc/plymouth/plymouthd.conf
DeviceScale=an-integer-scaling-factor

然后重建 initrd。

提示与技巧

显示启动消息

启动时按 Esc 键可以切换到启动消息。

平滑过渡

GDM 支持开箱即用的平滑过渡,无需额外配置。

预览主题

可以通过在getty[1]:中运行以下命令来预览当前配置的主题

# 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

放慢启动速度以显示完整的动画

在启动时间非常快的系统上,如果需要显示整个动画,则可能需要使用包含 ExecStartPre=/usr/bin/sleep 5附加片段plymouth-quit.service 添加延迟。见这篇 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 动画所需的时间

[Install]
WantedBy=plymouth-start.service

然后启用这个服务。

注意:如果使用 initramfs 启动了 Plymouth,该方法将不起作用。

使用 SimpleDRM

对于使用 UEFI 的设备,Plymouth 默认使用 SimpleDRM 驱动程序在 UEFI 帧缓冲上显示启动画面。这使得在更快但加载 GPU 驱动耗时较长的机器上(例如,使用 AMD GPU 的系统),启动画面也能够显示出来,同时还能消除主板启动画面与 Plymouth 之间的闪烁。

在旧式 UEFI 系统上,如果 efifb 无法以原生模式启动,而只能以 640x32、800x600 或 1024x768 分辨率运行,Plymouth 将默认不使用 SimpleDRM。

警告:使用此方法时,次要的显示器在启动过程中不会点亮。如果您的笔记本使用扩展坞连接屏幕,全盘加密的密码提示可能无法显示。

要禁用 SimpleDRM,请在您的内核参数中添加 plymouth.use-simpledrm=0。有关此选项的更多信息,请参见 Plymouth 问题 #264

疑难解答

禁用的内核参数

如果在启动过程中遇到问题,可以使用以下内核参数临时禁用 Plymouth:

plymouth.enable=0 disablehooks=plymouth

调试

要将调试输出写入 /var/log/plymouth-debug.log,请添加以下内核参数:

plymouth.debug

密码提示不更新

当在 Mkinitcpio 中使用 systemd 而不是 udev 钩子时,在通过 Plymouth 脚本处理它的主题上密码提示可能不会更新。

您可以尝试切换到开发版本 plymouth-gitAUR 或使用来自 Mkinitcpio#常用钩子的替代品。

显示未居中

当在启动过程中启用了多个监视器时,某些主题可能无法使显示居中。

您可以使用内核级显示模式设置#Forcing modes 禁用特定的监视器。

另见