Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104595162
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-30 09:09:25

    来源:

相信很多使用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的引导画面都不相同。好了,快享受一下这一番劳动成果所带来的喜悦吧。

阅读(203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~