美观地编辑 grub.cfg

美观地编辑 grub.cfg

编辑:(为了清楚起见)我希望通过编辑配置文件(可能但不一定是 grub.cfg)来更改 grub 启动菜单的外观。

因此,任何 ubuntu 用户都知道,经过几次内核升级后,启动菜单会变得多么拥挤。在 menu.lst 时代,您可以调整菜单以隐藏不需要的选项,但仍保留它们可用。

例如,如果你的 grub 菜单如下所示:

A
B
C
D

您可以通过在 B 和 C 之间插入一个空选项来使选项 C 和 D 不可见。这样,选项 C 和 D 在启动期间将不可见,但如果您在启动菜单中向下滚动到它们,它们就会变得可见。

在 grub.cfg 中尝试同样的技巧,结果却毫无结果。因此,我正在寻找一种方法,通过编辑 grub.cfg 文件,在新的 grub 菜单中实现同样的效果。也欢迎进行其他美学调整。

谢谢

EDIT2:如果无法隐藏菜单条目,我希望在它们之间插入一个分隔符,这样菜单看起来就会像这样:


--其他--
C
D

答案1

首先了解Ubuntu如何配置Grub2。

  • /boot/grub/grub.cfg是 Grub2 菜单
  • 更新 grub命令自动生成该文件
  • ...通过读取默认设置/etc/defaults/grub
  • ...并运行 shellscripts/etc/grub.d

所以,如果你不想编辑grub配置文件每次内核更新后,你都需要调整脚本/etc/grub.d因此您的更改可随时应用更新 grub运行。


其次,直接回答你的第一个问题,我不知道有什么方法可以让特定的启动选项不可见,但仍可以通过 Grub 菜单访问。Grub1 中有很多小细节没有在 Grub2 中重新实现,如果这是其中之一,我一点也不惊讶。

相反,你可以全部通过将菜单字体颜色设置为与背景颜色相同,菜单项将不可见(直到突出显示)。在/etc/grub.d/05_debian_theme, 改变菜单颜色正常使第一种颜色(字体)与第二种颜色(背景)相匹配。保留菜单颜色突出显示不同,所以光标下的条目就会显示出来。

# example from a likely-tweaked Karmic /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/white

# ...to this
set menu_color_normal=black/black
set menu_color_highlight=black/white

将分隔符放入 Grub 菜单。

在 Grub1 中,你可以像这样插入一个新条目。我记得,你需要声明使其成为有效的菜单项,否则 Grub1 会忽略它。

# separator
title  --------------------
root

我怀疑 Grub2 可能类似。一个非常基本的菜单项如下所示grub配置文件

# basic example
menuentry "Memory test (memtest86)" {
        linux   /boot/memtest86+.bin
}

由于双引号中的“任何内容”都显示为标题,因此您可以用它来伪造分隔符。与 Grub1 一样,Grub2 也希望Linux的关键字将其视为真正的菜单项,因此请小心不要意外选择它。

# a separator!  no, really!
menuentry "....." {
        linux   /boot/memtest86+.bin
}

不幸的是,“任何事情”并不意味着任何事物;我在测试时尝试了一串长破折号(“----------------”),但始终没有成功。但它喜欢上面显示的短点串,因此您可以使用它。

.....

现在,这就是制作一个分隔符的方法。要制作一堆,并将它们自动放置在您想要的位置,您需要将它们添加到脚本中/etc/grub.d

在这个例子中,我们在各个部分之间放置一个简单的分隔符grub配置文件.如果你看看/etc/grub.d,您会看到以下脚本:

  • 00_标题
  • 05_debian_主题
  • 10_linux - Ubuntu 内核和恢复条目
  • 20_memtest86+ - Memtest86+ 的条目
  • 30_os-prober - 适用于 Windows 和其他 Linux 发行版的条目
  • 40_custom - 默认情况下无任何内容;特殊用户条目可以放在此处

我们将创建一个新脚本,分隔器,并将以下内容放入其中:

#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
  linux /boot/memtest86+.bin
}
EOF

现在,将该脚本移至第一个分隔符的位置,并将其链接到其他分隔符的位置。脚本按顺序执行,因此如果您希望第一个脚本先于10_linux,命名09_分​​隔符或者其他的东西。

cd /etc/grub.d

# start the editor, paste in the script above, save, and exit
sudo nano separator

# set executable
sudo chmod +x separator

# rename into the first position
mv separator 09_separator

# link into remaining positions (can also use cp)
ln -s 09_separator 19_separator
ln -s 09_separator 29_separator
# not really necessary since 40_custom is empty by default
ln -s 09_separator 39_separator

如果您将特定条目设置为默认条目/etc/默认/grub,您可能需要更新它——Grub2 从 0 开始计算菜单条目,并且每个“分隔符”都是有效条目,因此它们也算数。如果您之前的默认条目是 0,并且您在它之前添加了一个分隔符,请记住更改GRUB_DEFAULT至 1

现在运行更新 grub并检查/boot/grub/grub.cfg-- 您应该会看到其中的分隔符。如果看到了,请重新启动并检查它们。

....

如果你想将分隔符放在其他地方,比如在不同的内核版本之间,你需要编辑10_linux(或其他脚本),并找到适当的位置添加分隔符。您可以使用上面脚本中的行;包括除第一个之外的所有内容/bin/sh #!/bin/sh 复制代码线。


如果您想要更漂亮的内容,请使用 Grub 启动图像或主题。我需要就这些主题给您一个延期的答复,但请查看下面的资源。


资源:

UbuntuForums 上有两个我了解并且喜欢的 Grub2 指南:

GNU Grub 2是另一个很好的资源。他有一个脚本集用于调整 Karmic 的 Grub2 (坦白说:我还没试过)。

Grub Wiki 的主题格式对于 Grub2 主题进行黑客攻击来说,这个页面是必备的。

答案2

如果分隔符的第一个字符是空格,则分隔符可以由破折号组成。此外,分隔符部分不必使用 linux 命令,您可以使用任何命令,例如:

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}

甚至可以默默地返回“true”:

menuentry " -----------------------------------------------------------" {
  true
}

答案3

如果您不使用其他内核,则可以使用适合您的包管理器界面将其删除。这会自动将它们从 grub.cfg 中删除

相关内容