玩轉grub的開機引導(轉)

post0發表於2007-08-11
玩轉grub的開機引導(轉)[@more@]

相信很多使用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的引導畫面都不相同。好了,快享受一下這一番勞動成果所帶來的喜悅吧

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945181/,如需轉載,請註明出處,否則將追究法律責任。

相關文章