linux图标更换全过程

一、环境版本

系统: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文件中将图片循环部分,按自身需求自行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值