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 支持開箱即用的平滑過渡,無需額外配置。

對於其他顯示管理器,您可以使用 display-manager.service 的以下附加片段獲得平滑過渡:

/etc/systemd/system/display-manager.service.d/plymouth.conf
[Unit]
Conflicts=plymouth-quit.service
After=plymouth-quit.service rc-local.service plymouth-start.service systemd-user-sessions.service
OnFailure=plymouth-quit.service

[Service]
ExecStartPost=-/usr/bin/sleep 30
ExecStartPost=-/usr/bin/plymouth quit --retain-splash

預覽主題[編輯 | 編輯原始碼]

主題可以在不重新生成 initrd 的情況下預覽。按 Ctrl+Alt+F6 切換到文本終端,使用 root 登錄並鍵入:

# plymouthd
# plymouth --show-splash

再按 Ctrl+Alt+F6 並輸入如下命令退出預覽:

# plymouth --quit

您也可以在運行中的 X.Org 會話以 root 身份運行它們,但 Plymouth 窗口會覆蓋終端窗口並將本身置頂。所以請準備好虛擬桌面。

更換背景圖片[編輯 | 編輯原始碼]

某些主題(如 spinner 和 BGRT)可以改變其背景圖像。只需將 /usr/share/plymouth/themes/spinner/background-tile.png 替換為你想要的圖片。一旦改變主題就要重新生成 initrd。

缺少 BGRT 圖片[編輯 | 編輯原始碼]

如果您使用的是 BGRT 主題,但 UEFI 沒有提供供應商徽標,則可以將回退鏡像放置到 /usr/share/plymouth/themes/spinner/bgrt-fallback.png 中以顯示它。

放慢啟動速度以顯示完整的動畫[編輯 | 編輯原始碼]

在啟動時間非常快的系統上,如果需要顯示整個動畫,則可能需要使用包含 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,該方法將不起作用。

疑難解答[編輯 | 編輯原始碼]

禁用的內核參數[編輯 | 編輯原始碼]

如果在啟動過程中遇到問題,可以使用以下內核參數臨時禁用 Plymouth:

plymouth.enable=0 disablehooks=plymouth

調試[編輯 | 編輯原始碼]

要將調試輸出寫入 /var/log/plymouth-debug.log,請添加以下內核參數:

plymouth.debug

密碼提示不更新[編輯 | 編輯原始碼]

當在 Mkinitcpio 中使用 systemd 而不是 udev 鉤子時,在通過 Plymouth 腳本處理它的主題上密碼提示可能不會更新。

您可以嘗試切換到開發版本 plymouth-gitAUR 或使用來自 Mkinitcpio#常用鉤子的替代品。

顯示未居中[編輯 | 編輯原始碼]

當在啟動過程中啟用了多個監視器時,某些主題可能無法使顯示居中。

您可以使用內核級顯示模式設置#Forcing modes 禁用特定的監視器。

另見[編輯 | 編輯原始碼]