每次 grub 更新时,由于正常更新,grub 菜单上的一些图标都会丢失。我必须手动编辑 /boot/grub/grub.cfg 文件,并将“--class ubuntu”(或其他内容)添加到不再包含“--class”条目的行,因此不会显示任何图标。
grub 究竟从哪里获得将 '--class' 条目写入 grub.cfg 文件的指令?我查看了模板,但没有发现任何明显的东西。
我已阅读了一些在线 grub 指南,但我发现它很难,所以我想寻求帮助!
(Ubuntu 14.04 LTS)
答案1
对于任何感兴趣的人,我已经弄清楚了。要查看的文件夹是
/etc/grub.d/
这里有一组文件,它们是生成文件的模板
/boot/grub/grub.cfg
我感兴趣的文件是
10_linux*
30_uefi-firmware*
10_linux 文件用于 linux 操作系统条目,30_uefi-firmware 文件用于 eufi 设置条目。
为了生成子菜单项的图标,我编辑了相应的行。原始行是这样的
echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
我添加了 CLASS 选项,现在它看起来像这样
echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
为了给系统设置条目(即 uefi 设置 (bios))添加图标,我编辑了 30_uefi-firmware
我在导出条目后立即添加了一个类条目
CLASS="--class recovery"
我在菜单项行中添加了 CLASS 选项
menuentry '$LABEL' ${CLASS} \$menuentry_id_option 'uefi-firmware'
类别条目必须与主题图标文件夹中的图标匹配。
/boot/grub/themes/<theme name>/icons
我使用了“恢复”类/图标,它显示一个工具箱图标。我会在有空的时候寻找一些更合适的东西,将图标放在图标文件夹中,并相应地更改类条目。
答案2
答案3
答案4
使此过程完全自动化的一种方法是编写一个脚本,在自动生成的文件中进行正则表达式替换grub.cfg
以添加--class
所需的 es。然后修改grub-mkconfig
(/usr/sbin/grub-mkconfig
在 Ubuntu 衍生产品中)以在最后运行它。
我用这个想法事情,您可能会喜欢的 grub 主题/工具(无耻的插件)。
基于此,你可以在 Python 中手动完成,例如,此功能(注意正则表达式)返回一个匹配列表,每个匹配项都包含您的条目的名称,您可以稍后对其进行迭代以grub.cfg
使用正确的--class
es 构造替换(示例实现这里)。
def get_entry_names(grub_cfg):
"Gets the entry names from grub.cfg contents"
pattern = (
r"(?P<head>(?:submenu|menuentry) ?)" # menuentry or submenu
r"(?:\"|')" # " or '
r"(?P<entryname>[^\"']*)" # capture the entry name (without quotes)
r"(?:\"|')" # " or '
r"(?P<tail>[^\{]*\{)" # The rest of the entry header until a { is found
)
matchiter = re.finditer(pattern, grub_cfg)
matches = list(matchiter)
return matches