How to change Ubuntu loading splash/background in Ubuntu 10.04
Ubuntu 10.04 採用 Plymouth 取代 xsplash ,所以 Ubuntu 9.10 及以前版本的啟動畫面修改方式全都不適用。但是 Plymouth 提供了更簡單的修改方式。
Ubuntu 10.04 的 Plymouth 設定文件都放置在 /lib/plymouth 目錄內。與主題樣式有關的設定文件放置於 /lib/plymouth/themes ,預設主題樣式文件為 default.plymouth。其內容大致如下:
[Plymouth Theme] Name=Ubuntu Logo Description=A theme that features a blank background with a logo. ModuleName=script [script] ImageDir=/lib/plymouth/themes/ubuntu-logo ScriptFile=/lib/plymouth/themes/ubuntu-logo/ubuntu-logo.script
觀其內容,稍有經驗的使用者應該很快就能理解該如何下手修改了。
第一段 [Plymouth Theme] 中的 ModuleName 指示 Plymouth 載入它的 script.so 模組處理主題內容。基本上,這一段的內容固定不變。
第二段 [script] 就是配合 script.so 模組的設定項目了。顧名思義,ImageDir 指示啟動畫面圖檔的放置目錄;ScriptFile 指示啟動畫面處理過程的指令稿內容。這個指令稿使用的是 Plymouth script 語法,指令稿的內容並不難讀懂。通常我們只需要修改幾處變數內容即可;除非你要做繁複的畫面特效,否則不需要深入了解。
快速修改法
稍有經驗的使用者在看完 default.plymouth 的內容後,大概就知道如何修改了。如果你只是想要換一下啟動畫面的Logo影像,那麼只需要把你的圖檔複製到 /lib/plymouth/themes/ubuntu-log ,替換掉原本的 ubuntu_logo.png 即可。我建議先將原本的 ubuntu_logo.png 備份起來。
$ cd /lib/plymouth/themes/ubuntu-logo
$ sudo mv ubuntu_logo.png ubuntu_logo.png.bak
$ sudo cp /your/image ubuntu_logo.png
若你想一併換掉底下跑動的啟動進度顯示圖像,就準備兩個相對應的圖像,一個表示關閉(progress_dot_off.png),一個表示亮起(progress_dot_on.png)。依樣畫葫蘆,將它們複製到 /lib/plymouth/themes/ubuntu-log ,替換掉原本的圖檔。
按照 ubuntu-logo.script 的原定步驟,它會將Logo圖像顯示在螢幕中央偏上方四分之一高處。將啟動進度圖像顯示在主要圖像的下方,相隔四分之一高。我們不必特意調整圖像大小, ubuntu-logo.script 會自動去計算圖像安排的位置。
進階 - 自定樣式
如果你想要自定一個啟動畫面樣式,那麼可以在 /lib/plymouth/themes 下建立一個子目錄,例如 my-theme ,將 ubuntu-logo/ubuntu-logo.plymouth 與 ubuntu-logo-logo.script 複製過去。再將你準備好的圖檔也複製過去。接著修改 /etc/alternatives/default.plymouth 的符號連結目標為你的 plymouth 。如下操作:
$ cd /lib/plymouth/themes
$ sudo mkdir my-theme
$ cd my-theme
$ sudo cp ../ubuntu-logo/ubuntu-logo.script my-theme.script
$ sudo cp ../ubuntu-logo/ubuntu-logo.plymouth my-theme.plymouth
$ sudo cp /your/images .
$ cd /etc/alternatives
$ sudo rm default.plymouth
$ sudo ln -s /lib/plymouth/themes/my-theme/my-theme.plymouth default.plymouth
修改 my-theme.plymouth 中的 ImageDir 與 ScriptFile 的內容。
[Plymouth Theme] Name=Ubuntu Logo Description=A theme that features a blank background with a logo. ModuleName=script [script] ImageDir=/lib/plymouth/themes/my-theme ScriptFile=/lib/plymouth/themes/my-theme/my-theme.script
修改 my-theme.script ,尋找 logo_filename (約170行處),你會看到圖像檔名的設定內容,將它們改成你的圖像檔名。
if (bits_per_pixel == 4) { logo_filename = "Splash-GnomeDarkSplashScreen.png"; progress_dot_off_filename = "progress_dot_off16.png"; progress_dot_on_filename = "progress_dot_on16.png"; password_field_filename = "password_field16.png"; } else { logo_filename = "Splash-GnomeDarkSplashScreen.png"; progress_dot_off_filename = "progress_dot_off.png"; progress_dot_on_filename = "progress_dot_on.png"; password_field_filename = "password_field.png"; }
尋找 Window.SetBackgroundTopColor 與 Window.SetBackgroundBottomColor (約165行處)。可以設定 plymouth 的背景色。
我們可以在 GNOME Art 找到許多合法的 Logo 圖像。
以上列之 Logo 圖像為例,我們可以進一步修改進度圖像的顯示位置,讓它們顯示在 Logo 圖像的區塊內,提高美觀度。
尋找 logo.y = Window.GetY () (約188行) ,將它的計算公式改為呈現在正中央,而非中央偏上。再尋找 progress_indicator.y = logo.y + logo.height (約211行),將計算公式改為 Logo 圖像底部上移 50 點。50點是根據 Splash-GnomeDarkSplashScreen.png 與 progress_dot_on.png 的高度計算所得。請根據你的 Logo 圖像內容,調整上移點數。
# 約188行 logo.y = Window.GetY () + Window.GetHeight () / 2 - logo.height / 2; # 約211行 progress_indicator.y = logo.y + logo.height - 50;
到此為止,我們完成了自定樣式的設計工作。再執行 sudo update-initramfs -u
,重開機後,就可以觀看我們設計的啟動畫面了。
顯示晶片微調
不同的顯示晶片,也會影嚮 Plymouth splash 的呈現效果。有些系統開機時只看到狀態圖示在跑,而看不到背景圖;但關機時卻會看到背景圖。有些系統則是用16色模式顯示。有些系統則是用較低的解析度顯示。種種狀況不一而足。就我個人調整經驗,這些缺失效果,可以嘗試用下列兩種方式來修正。
啟用 framebuffer
此解法適用對象是看不到背景圖,或是用低解析度顯示的狀況。
新增或編輯 /etc/initramfs-tools/conf.d/splash,增加一行 FRAMEBUFFER=y
。儲存文件後,再執行 update-initramfs -u
更新。
$ sudo -i
# echo FRAMEBUFFER=y >> /etc/initramfs-tools/conf.d/splash
# update-initramfs -u
指定 grub 的解析度
這適用 Plymouth 以低解析度顯示或是16色模式顯示的狀況。我個人經驗是, nVidia 顯示晶片的使用者,升級顯示卡驅動程式為 nVidia 提供的版本後,經常出現這種狀況。這個解法分成兩步驟,如果第一個步驟就能修正,則不必再改第二個步驟。在 Ubuntu 10.04 中,這兩個步驟都要修改 /etc/default/grub,找到下列的段落內容。
# The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 #GRUB_GFXPAYLOAD_LINUX=keep
第一個修正步驟,編輯 /etc/default/grub ,啟用 GRUB_GFXPAYLOAD_LINUX=keep
選項。然後更新 grub2 與 initramfs 。
$ sudo update-grub2
$ sudo update-initramfs -u
set gfxmode=${GRUB_GFXMODE}
的下一行,內容是 set gfxpayload=keep
。
如果重開機後,Plymouth 已可正常呈現效果,則不必再進行下一步。如果仍有問題,則你需要再進第二步修改,強制指定解析度。
根據你的螢幕解析度,修改 GRUB_GFXMODE
之值。例如你的 LCD 螢幕解析度是 1680x1050 ,則設定為 GRUB_GFXMODE=1680x1050
。然後更新 grub2 與 initramfs 。
如果終於解決了,恭喜你。如果還是有問題,你就只好再繼續請教 google 了。