一、环境版本
系统:centos7.9
内核版本: 3.10.0-1160.el7.x86_64
二、开机背景更换
将centos开机全过程背景替换、待更换图标如下:
GRUB -> kernel -> 系统 ->初始登陆 ->屏保与桌面背景 -> 锁屏登陆 ->桌面
1、GRUB主题更换
使用开源工具grub2-themes,github地址:https://github.com/vinceliuice/grub2-themes
1.1、下载
git clone https://github.com/vinceliuice/grub2-themes.git
1.2、运行
#进入目录
cd grub2-themes/
#添加grub主题
#四种主题可选 tela | vimix | stylish | whitesur
sh install.sh -t whitesur
#更换主题时需先移除主题在添加
#移除主题
sh install.sh -r whitesur
#使主题生效
#查找本机grub.cfg位置,及时调整脚本 find /boot -name grub.cfg
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
1.3、背景图更换
选择其中一个主题,将grub2-themes/backgrounds 下对应主题的图片更换即可。
2、kernel小企鹅图标更换
2.1、说明
更换企鹅图标需要重新编译内核,并且图标必须为最大颜色数量为224的ppm格式
2.2、下载内核源码
#根据自己系统内核版本选择源码
wget --no-check-certificate https://vault.centos.org/7.9.2009/updates/Source/SPackages/kernel-3.10.0-1160.el7.src.rpm
#安装mock
yum install mock
#创建mockbuild用户
useradd -s /sbin/nologin mockbuild
#安装源码rpm
rpm -i kernel-3.10.0-1160.2.1.el7.src.rpm
#切换到rpmbuild目录
cd ~/rpmbuild/SPECS
#安装rpmbuild工具
yum install rpm-build
#安装rpmbuild运行依赖包
yum install openssl-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel java-devel ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel gcc bison python-docutils -y
#输出源码
#运行成功后会在/root/rpmbuild/BUILD/目录下生成源码
rpmbuild -bp --target=$(uname -m) kernel.spec
2.3、安装图片转换工具
#安装图片转换工具 netpdm
sudo yum install netpbm
#这步是将准备好的 logo-linux.jpeg 转换成 logo-linux.pnm,
#.jpg格式使用 jpegtopnm ,png格式使用 pngtopnm
jpegtopnm logo-linux.jpg > logo-linux.pnm
#这步是将 logo-linux.pnm 图片的最大颜色数量改为 224。
pnmquant 224 logo-linux.pnm > logo-linux224.pnm
#这步是将 pnm 格式图片转换成 ppm 格式,顺便将其重命名为 logo_linux_clut224.ppm,
pnmtoplainpnm logo-linux224.pnm > logo_linux_clut224.ppm
2.4、 替换新图片
尺寸最大为分辨率最大宽度*高度80、太大图片就会显示不出来,目前本人暂未想到好解决办法。
#进入源码目录
cd /root/rpmbuild/BUILD/kernel-3.10.0-1160.2.1.el7/linux-3.10.0-1160.2.1.el7.x86_64
#替换小企鹅图片
cp /root/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
2.5、修改源码调整图片显示数量
//修改 drivers/video/fbmem.c 中 fb_do_show_logo 方法
//在方法内第一行为num 赋值为想要显示图标的数量(建议不易过大,超过分辨率后会显示不出来)
static void fb_do_show_logo(struct fb_info *info, struct fb_image *image,
int rotate, unsigned int num)
{
unsigned int x;
num = 1;
if (rotate == FB_ROTATE_UR) {
for (x = 0;
x < num && image->dx + image->width <= info->var.xres;
x++) {
info->fbops->fb_imageblit(info, image);
image->dx += image->width + 8;
}
} else if (rotate == FB_ROTATE_UD) {
for (x = 0; x < num && image->dx >= 0; x++) {
info->fbops->fb_imageblit(info, image);
image->dx -= image->width + 8;
}
} else if (rotate == FB_ROTATE_CW) {
for (x = 0;
x < num && image->dy + image->height <= info->var.yres;
x++) {
info->fbops->fb_imageblit(info, image);
image->dy += image->height + 8;
}
} else if (rotate == FB_ROTATE_CCW) {
for (x = 0; x < num && image->dy >= 0; x++) {
info->fbops->fb_imageblit(info, image);
image->dy -= image->height + 8;
}
}
}
//图片如果原尺寸则忽略以下修改
//如图片比原企鹅图片大,则需调整后原内存分配算法,否则会有可能因图片过大导致内存崩溃
//将drivers/video/fbmem.c 中 fb_show_logo_line 方法内 kmalloc 内存分配算法值增大,一般 *2 即可,如出现启动崩溃可继续加大
static int fb_show_logo_line(struct fb_info *info, int rotate,
const struct linux_logo *logo, int y,
unsigned int n)
{
u32 *palette = NULL, *saved_pseudo_palette = NULL;
unsigned char *logo_new = NULL, *logo_rotate = NULL;
struct fb_image image;
/* Return if the frame buffer is not mapped or suspended */
if (logo == NULL || info->state != FBINFO_STATE_RUNNING ||
info->fbops->owner)
return 0;
image.depth = 8;
image.data = logo->data;
if (fb_logo.needs_cmapreset)
fb_set_logocmap(info, logo);
if (fb_logo.needs_truepalette ||
fb_logo.needs_directpalette) {
palette = kmalloc(256 * 4 * 2, GFP_KERNEL);
if (palette == NULL)
return 0;
if (fb_logo.needs_truepalette)
fb_set_logo_truepalette(info, logo, palette);
else
fb_set_logo_directpalette(info, logo, palette);
saved_pseudo_palette = info->pseudo_palette;
info->pseudo_palette = palette;
}
if (fb_logo.depth <= 4) {
logo_new = kmalloc(logo->width * logo->height * 2, GFP_KERNEL);
if (logo_new == NULL) {
kfree(palette);
if (saved_pseudo_palette)
info->pseudo_palette = saved_pseudo_palette;
return 0;
}
image.data = logo_new;
fb_set_logo(info, logo, logo_new, fb_logo.depth);
}
image.dx = 0;
image.dy = y;
image.width = logo->width;
image.height = logo->height;
if (rotate) {
logo_rotate = kmalloc(logo->width *
logo->height * 2, GFP_KERNEL);
if (logo_rotate)
fb_rotate_logo(info, logo_rotate, &image, rotate);
}
fb_do_show_logo(info, &image, rotate, n);
kfree(palette);
if (saved_pseudo_palette != NULL)
info->pseudo_palette = saved_pseudo_palette;
kfree(logo_new);
kfree(logo_rotate);
return logo->height;
}
2.6、重新编译内核
#进入源码根目录
cd /root/rpmbuild/BUILD/kernel-3.10.0-1160.2.1.el7/linux-3.10.0-1160.2.1.el7.x86_64
#编译 -j 表示编译线程数,如cpu核数多可适当加大
make -j 8
#模块安装
make modules_install
#内核安装
make install
#使内核生效
#查找本机grub.cfg位置,及时调整脚本 find /boot -name grub.cfg
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
3、初始登陆背景更换
3.1、查看小图标
3.2、更换图标
尺寸为225*80,换大图会自动缩小尺寸
#将图片替换
#替换后立即生效
cp /root/111.png /usr/share/pixmaps/fedora-gdm-logo.png
4、屏保与桌面背景更换
4.1、右击桌面
4.2、点击更换背景
4.3、选择相应图片即可
5、锁屏登陆背景更换
使用工具Plymouth并使用开源Plymouth主题源码grub2-themes,github地址:https://github.com/adi1090x/plymouth-themes
5.1、下载工具与开源主题源码
#下载安装Plymouth工具
yum install plymouth plymouth-themes
#下载主题源码
git clone https://github.com/adi1090x/plymouth-themes.git
5.2、应用主题源码
#将开源主题源码复制到工具中
cp -r plymouth-themes/pack_*/* /usr/share/plymouth/themes/
#查看应用后的主题列表
[root@localhost ~]# plymouth-set-default-theme -l
angular
charge
details
text
#应用主题
plymouth-set-default-theme -R angular
5.3、自定义主题
可参考angular主题,修改/usr/share/plymouth/themes/angular/angular.script文件中将图片循环部分,按自身需求自行修改。