bootsplash小修改 仿gnome的splash

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

bootsplash小修改 仿gnome的splash

文章ronmi » 週五 1月 26, 2007 11:20 pm

前言: (只想看HOWTO不想看廢言請自行向下翻 :-P)
在對是最近才開始玩bootsplash的,之前一直覺得很麻煩懶得去動。最近也不知道哪根筋不對突然想玩看看,花了兩天才裝好(家裡實驗機只有p3 6xx,編kernel要編快一小時)又花了兩三天做自已的theme,最後就是今天的成果。
這幾天為了改theme不知道重開機幾次,每次看splash畫面,就一個進度條在跑,也不知道到底他在幹嘛,這樣是很像windows沒錯,總還是覺得差了點什麼。今天突然愰然大悟:原來看不到訊息的Linux,對我來說就不像Linux了,我開始試著讓字跑出來。研究 /sbin/splash.sh 之後發現,文字訊息是在 /etc/defaults/bootsplash 裡,是固定的。顯示是交由 fbtruetype 來處理。再來發現了一個很可疑的 if 敘述
代碼: 選擇全部
#if [ "$1" == "mountkernfs.sh start" -o "$1" == "bootsplash stop" ]; then
        if [ x$_shutdown == xyes ]; then
                _msg=$MSG_SHUTDOWN; # may be defined in /etc/default/bootsplash
                [ -z "$_msg" ] && _msg="Shutting down the system... Press F2 for
 verbose mode"
        else
                _msg=$MSG_BOOT; # may be defined in /etc/default/bootsplash
                [ -z "$_msg" ] && _msg="Booting the system... Press F2 for verbose mode"
        fi
        if [ "$2" != "" ];
        then
                _msg="$2"
        fi

        if [ "$text_x" != "" -a "$text_y" != "" \
                -a "$text_color" != "" -a "$text_size" != "" -a "$_silent" == "yes" ];
        then
                case "$USE_STATIC_FBT" in
                        [Yy]*)
                                fbtruetype="fbtruetype.static"
                                ;;
                        *)
                                fbtruetype="fbtruetype"
                                ;;
                esac
                $fbtruetype -x $text_x -y $text_y -t $text_color -s $text_size "$_msg"
        fi
#fi

以上程式碼已經被我改動過,想看原廠貨請自行 less :-P
要有變動的訊息,很簡單、很直觀,一定會有個什麼東西要去把上次的訊息擦掉,再顯示新的訊息。
直接設定:殘念,有開overpaintok的狀況下他根本不會擦掉
關掉overpaintok:訊息只是閃一下就不見了
經過重覆修改測試,我發現
echo "show [some number]" > /proc/splash
的時候會重繪螢幕(有設overpaintok的話則只會重繪box)(其實這句還滿廢話的XD)
而在原始的 /sbin/splash.sh 中,重繪螢幕是"整個script的最後"才做的事
所以把那行移上去就ok了

HOWTO:

目標:讓silent splash畫面上,能顯示目前到底在run哪個init script
步驟:
1. 修改 /etc/init.d/rc 為rc_splash函數追加一個參數,作為顯示在splash上的文字 (第三行)
代碼: 選擇全部
rc_splash() {
   #test "$SPLASH" != "no" && test "$_rc_splash" -eq 1 && /sbin/splash "$1"
   test "$SPLASH" != "no" && /sbin/splash.sh "$1" "$2"

   # make sure we don't add unless we really made progress
   if [ "$1" != "master" -a "$1" != "splash start" -a "$1" != "shutdown" ]
   then
      progress=$(( $progress + 1 ))
   fi
}

2. 修改 /etc/init.d/rc 中所有有呼叫 rc_splash的地方
把 rc_splash "$script start" 改成
rc_splash "$script start" "Processing $script"
(請善用sed)

3. 修改 /sbin/splash.sh,把最下方的重繪螢幕移上來,並把第二個參數當成要顯示的訊息
代碼: 選擇全部
echo "show $(( 65534 * ( $progress ) / 100 ))" > /proc/splash

#
# Print text string. (Booting/Shutting down the system. Press
# F2 for verbose mode)
#

#if [ "$1" == "mountkernfs.sh start" -o "$1" == "bootsplash stop" ]; then
        if [ x$_shutdown == xyes ]; then
                _msg=$MSG_SHUTDOWN; # may be defined in /etc/default/bootsplash
                [ -z "$_msg" ] && _msg="Shutting down the system... Press F2 for verbose mode"
        else
                _msg=$MSG_BOOT; # may be defined in /etc/default/bootsplash
                [ -z "$_msg" ] && _msg="Booting the system... Press F2 for verbose mode"
        fi
        if [ "$2" != "" ];
        then
                _msg="$2"
        fi

        if [ "$text_x" != "" -a "$text_y" != "" \
                -a "$text_color" != "" -a "$text_size" != "" -a "$_silent" == "yes" ];
        then
                case "$USE_STATIC_FBT" in
                        [Yy]*)
                                fbtruetype="fbtruetype.static"
                                ;;
                        *)
                                fbtruetype="fbtruetype"
                                ;;
                esac
                $fbtruetype -x $text_x -y $text_y -t $text_color -s $text_size "$_msg"
        fi
#fi

4. 在 theme的config裡加上一個用來清除訊息的box
代碼: 選擇全部
text_x=533
text_y=672
text_size=14
text_color=0x000000

box silent           533  665  1020 690  #ffffff   #ffffff   #ffffff   #ffffff

我的設定是白底黑字(雖說很傷螢幕的感覺,可是沒辦法,女友堅持她的照片要用白底,她說看起來皮膚會比較白= =)

5. 更新你的initrd,enjoy it
rm /boot/initrd.`uname -r`
update-initramfs -ck `uname -r`
reboot
ronmi
懵懂的國中生
懵懂的國中生
 
文章: 103
註冊時間: 週一 12月 05, 2005 2:31 am
來自: Taiwan

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客