相信很多使用Red Hat的用戶都對GRUB默認的引導畫面感到厭倦了,這裡向大家提供一個較好的方法來實現每次都使用不同的開機引導畫面。
一幅背景
首先,需要一幅圖片,要求它的解析度在640×480或之上。雖然從道理上講小於這個尺寸也沒關系,因為可以把它擴張為640×480,但是這樣會造成比較嚴重的畫質損失,所以最好不要小於這個尺寸。選好圖片後,需要在GRUB的目錄中建立一個存放圖片的文件夾,一般情況可以通過以下命令來做:
# cd /boot/grub && mkdir image
但是僅僅這麼做是不夠的,因為一是沒有修改grub.conf,使所做的設置生效;二是GRUB使用壓縮了的XPM圖像格式,而比較常見的圖片格式是BMP、JPG、GIF和PNG之類的,所以需要將圖片格式轉換成XPM。可能有人想到了使用GIMP,但是GIMP使用起來相對麻煩,而且如果沒有安裝X-Window的話就無法使用GIMP了。所以這裡建議使用命令convert進行圖片格式轉換(可以使用man convert命令詳細閱讀其使用手冊)。簡單說一下convert使用方法,比如要將image.jpg轉換為image.xpm,使用命令如下:
# convert -geometry 640x480 -colors 14 image.jpg image.xpm
convert命令在Red Hat Linux 9.0上默認是安裝的。這個命令是把image.jpg轉變尺寸為640×480,色深是14的image.xpm。注意,命令行中的640和480之間是小寫字母“x”,不要寫錯。另外,GRUB要求圖片色深必須是14,一般可以這樣來證明:
# cd /boot/GRUB && gunzip splash.xpm.gz && less splash.xpm
在文件頭部可以找到這些信息:
/* XPM */
static char *10[] = {
/* columns rows colors chars-per-pixel */
"640 480 14 1",
所以需要進行上述的轉換步驟以達到GRUB的要求。接下來壓縮這幅圖片,使用下面的命令:
# gzip -9 image.xpm
結果生成了image.xpm.gz,然後把這個文件拷貝到image目錄,再修改grub.conf。注意,grub.conf是重要的啟動文件,如果用戶沒有把握在GRUB引導失效後記住該文件內容,最好備份一下。使用vi編輯器找到類似於這樣的行:
splashimage=(hd0,1)/GRUB/splash.xpm.gz
把它改為:
splashimage=(hd0,1)/GRUB/image/image.xpm.gz
然後使用命令wq存盤退出。這時不要著急刪掉splash.xpm.gz,因為如果修改失敗的話,還能有個引導畫面,否則的話每次進入GRUB就只有一個光禿禿的黑色背景了。
這樣就大功告成了,趕快重啟試試,看看自己的修改成果。雖然畫質有所下降,但是比起以前的單調畫面還是耳目一新的。如果重啟後進入GRUB引導畫面時圖像嚴重失真,無背景或黑屏,則證明修改grub.conf有錯或圖片沒有轉化正確。如果GRUB沒有錯誤,進入系統後像上面那樣使用less檢查圖像信息;如果進不去系統的話使用系統盤進入單用戶模式,然後恢復grub.conf就行了。
多幅圖片
下面談一點高級話題。如果圖片很多的話,就需要一個腳本來批量轉換:
#!/bin/bash2
#usuage: ./convert.sh *.jpg
#convert *.jpg etc to *.xpm.gz
IMAGE_PATH=/boot/grub/image
CURRENT=`pwd`
for parm
do
for i in `ls -1 $IMAGE_PATH wc -l`
do
/usr/bin/convert -geometry 640x480 -colors 14
$CURRENT/$parm $IMAGE_PATH/$i.xpmg
zip -9 $IMAGE_PATH/$i.xpm rm -f
$CURRENT/$parm
done
done
把上面的腳本命名為convert.sh,然後放在/boot/grub/image下,使用下面的命令:
# ln -s /boot/grub/image/convert.sh /bin/chgbimg
這樣每次在批量轉換圖像前先進入被轉換的圖像所在目錄再執行chgbimg *.jpg就行了。如果/boot和/bin不在相同的分區上,可以使用下面的命令:
# export chgbimg=/boot/grub/image/convert.sh
#echo 'chgbimg=/boot/grub/image/convert.sh' >> ~/.bashrc
與上述方法有同樣的效果,不過使用時要這樣:
$chgbimg *.jpg。
可以更換的圖片多了,隨之而來的問題就是手動修改grub.conf所帶來的麻煩和危險性。快速、安全和方便才是目標。我們再寫一個腳本:
# ~/.bash_logout
GB_PATH=/boot/grub
IMAGE_NUM_PLUS=`ls -1 $GB_PATH/image wc -l`
N_TEMP=`cat /proc/uptime awk '{print $1}' awk -F. '{print $1}'`
N=`expr $N_TEMP % \\( $IMAGE_NUM_PLUS - 1 \\) + 1`
mv -f ${GB_PATH}/grub.conf ${GB_PATH}/grub.conf.bak
上述腳本可能有點復雜,簡單地解釋一下IMAGE_NUM_PLUS計算了可供使用的圖片數量,但是這個目錄裡還有個convert.sh,所以實際數量會減1。convert.sh放在這裡的一個原因是放在這裡比放在別處更容易理解;另一個原因是下一個要放在這個目錄裡的新圖片的序號應該是當前圖片數加1,convert.sh放在這裡正好補足了這個誤差。N是為了產生隨機數,因為圖片序號是N.xpm.gz,每次N都增1的話不免有些規律性,所以使用開機時間作為隨機種子。最後使用sed找到要修改的文本並替換掉。 這樣內容保存在~/.bash_logout中,這樣就做到了每次的GRUB的引導畫面都不相同。好了,快享受一下這一番勞動成果所帶來的喜悅吧。