2008年12月18日 星期四

Splashy on Debian

1.安裝splashy 系統需求:kernel支援framebuffer(大部分的linux發行版本都會有,Debian一定有支援),以及kernel版本2.6以上(這一兩年的linux都已經是2.6以上了)。 首先,請先確定/etc/default/splashy是否有"ENABLE_INITRAMFS=1"的參數。然後,我們再進行安裝:
aptitude install splashy splashy-themes -y
如果各位有觀察各種訊息的習慣,您會發現安裝後系統自動替我們更新了開機的ram filesystem(initrd.img) 修改menu.list 要啟動splashy必須使用framebuffer,請加上"vga=xxx splash"這兩個核心參數:
Fig 1.我想設定framebuffer為16色的1024x768畫面。
Framebuffer Decimal codes
色深640 x480800 x6001024 x7681280 x10241400 x10501600 x1200
8-bits(256)769771773775
15-bits(32K)784787790793
16-bits(64K)785788791794834884
24-bits(16M)786789792795
至此,安裝的步驟就算完成了。不過這是適用於大部分的linux的framebuffer參數,不過也有些linux是讀取不一樣的參數設定,請各位參考VESA BIOS Extensions這篇wiki。 我們重新啟動看看結果。 Fig 2. boot splash果然成功了!不過這個主題看起來有點像是國小兒童遊戲的進度載入畫面,我們還是來看看怎麼換theme好了^^||| 2.設定splashy A.手動設定: splashy設定檔:/etc/splashy/config.xml
Fig 3. 更換想要的theme只要在current_theme標籤內設定想要的theme的名稱就可以了。
splashy themes存放位置:/etc/splashy/themes ->/usr/share/splashy/themes "->"表示一個連結指向,表示實際位置在/usr/share/splashy/themes,而前者只是一個軟連結;但是切換到這兩個路徑結果會是相同的。如果你想要變更佈景存放的預設路徑,你可以在themes標籤內設定。假設你做了一些錯誤的變更,系統找不到該去讀哪個theme時,就會執行default_theme標籤裡面的佈景。 設定完成,我們重新啟動系統看看:
Fig 4. 關機時可見到splash已經更換成我們要的crux。
Fig 5. 什麼!怎麼開機還是原來的佈景呢?
為了達成目的,您必須更新ram filesystem:
update-initramfs -u
重新開機,新的設定才會生效。
Fig 5. 終於有一個boot splash了!
雖然某些文件會標示這個步驟是optional,不過在Debian裡,不更新ram filesystem的話,只有關機的splash會改變,開機時的bootsplash還是原來的theme。各位可以想想為什麼?(解答在本文的最後) B.自動設定: 從一個tarball安裝:
splashy_config -i foo.tar.gz
安裝的佈景預設會在/usr/share/splashy/themes/底下,你可以利用-s來選擇一個佈景資料夾:
splashy_config -s themename/
你會發現,安裝完後他會貼心的提醒你需要手動執行update-initramfs -u。因此在Debian下,無論是手動或自動設定,都需要更新initramfs才會生效。 http://splashy.alioth.debian.org/wiki/themes/contrib for more themes.

後記:
1.本文的誕生是因為Kanru Chen大大熱心的提供資訊,也讓筆者從中獲益許多,感謝您!
2.雖然有boot splash,感覺又更圖形化了一點;不過筆者很快又把他刪掉了...看不到訊息讓我有一種不安全感,有時候一些小小地錯誤訊息也能讓我們防大患於未然。我還是建議如果可以的話,多多學習觀察系統訊息吧!
3.References from:
http://splashy.alioth.debian.org/wiki/
http://blog.anantshri.info/2007/08/03/bootsplash-aka-splashy-on-debian/
http://oreilly.com/pub/h/3124
4.解答:
開機時,系統必須要能掛載硬碟以執行後續動作;要掛載硬碟,必須要先載入硬碟的模組;載入模組又必須要先掛載硬碟(因為模組在硬碟裡阿!),這形成了一個先有雞或先有蛋的關係。

因此大部分的linux都會利用ram filesystem(initramfs或initrd.img等名稱)來載入一個假的filesystem,裡面包含了許多開機所必須的硬體模組,載入這些模組到記憶體後就可以開始跑真正的init,掛載硬碟,啟動服務等等。

因此當你修改了config.xml,你是修改硬碟(Real filesystem)的資訊,因此關機時的splash確實會修改成功;但是你開機時的ram filesystem並沒有被修改,他還是原來的那個initrd.img,因此更新ram filesystem後,boot splash才會真正改變。


2 則留言:

Wesley 提到...

Maxsolar 您好,請問您有試過 kernel 2.6.32 or later with KMS + splashy 相關的實作嗎? 似乎在開啟 KMS 後 splashy 就不會有畫面了(已update-initramfs),若有相關資訊可否向您討論,thanks.

maxsolar 提到...

Hi Wesley,
請問KMS是指kernel mode-setting嗎?
很抱歉我沒有在2.6.32上搭配KMS搭配splashy,由於我習慣看開機過程,所以我只是玩一次而已,後來就沒有在繼續用splashy了...