美化grub启动界面

Posted on Sep 10, 2021

正常步骤

觉得grub界面太丑想要美化一下->搜索到喜欢的主题(我用的是Vinceliuice大佬制作的Vimix)->进行安装完成美化

出现问题

中文字体

我的grub界面是有中文的,但是主题默认的字体是Dejavu Sans,不包含中文。因此我需要自定义字体,大概有如下几个步骤:

  1. 找到自己喜欢的字体,我这里选择的是微软雅黑,使用Win10自带的msyh.ttc。这个.ttc文件是Microsoft YaHei和Microsoft YaHei UI两种字体的打包。

  2. 使用grub-mkfont指令,将其转化为grub可用的.pf2格式。但是这里对字体的原格式有要求1。于是我找了个小工具,从msyh.ttc中提取出了两个.ttf文件,然后对Microsoft YaHei字体对应的.ttf文件进行转化。同时也需要注意设置好字体的大小。

    grub-mkfont -s 32 -o msyh_32.pf2 msyh.ttf
    
  3. 将得到的字体放入主题所在的文件夹/usr/share/grub/themes/[主题名]

  4. 修改theme.txt,将item_font改成该字体的全称和大小1。然后再用grub_mkconfig生成配置文件并重启就好了。

    这里的“全称和大小”,我一开始填写的是Microsoft YaHei 32,然后发现grub找不到这个字体,查了半天资料也没啥头绪 💔 最后把它改成Microsoft YaHei Regular 32,就正常了 😭

自定义icon

折腾好字体后,我发现启动界面的4个选项中,“ArchLinux高级启动”和“UEFI”这两个选项是没有icon的。我根据23这两个Issue解决了问题。

  1. 首先去3中下载这位用户制作的图标,并且命名为submenu.png,放入/usr/share/grub/themes/[主题名]/icons。(这个图标用于高级启动,而下载的主题中提供了UEFI的图标)

  2. 然后进入到etc/grub.d,可以看到以下几个文件

    grub.d

  3. 其中,10_linux包含了ArchLinux的启动项和ArchLinux高级启动,30_os-prober包含了Windows的启动项,30_uefi-firmware包含了UEFI选项。其它几个不知道是干嘛的因此我们需要修改10_linux30_uefi-firmware

  4. 实际上只需要给对应的启动项加上一个--class选项就可以了,这样grub就会到其使用的主题的icons文件夹中寻找名称与--class选项相同的图片。因此我们在10_linux的第286行加上--class submenu,修改好之后的这行如下:

    echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' --class submenu \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
    

    30_uefi-firmware的第40行加上--class efi,修改好之后的这行如下:

    menuentry '$LABEL' --class efi \$menuentry_id_option 'uefi-firmware' {
    

    这样就可以了。

完成图

没啥好办法只能用手机拍屏幕了

finish

当前页阅读量为: