编辑:(为了清楚起见)我希望通过编辑配置文件(可能但不一定是 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 指南:
- Grub 2 指南(以前称为 Grub 2 基础知识),涵盖基础知识,包括 Ubuntu 提供的启动图像和主题,以及
- Grub 2 标题调整(或者我不想说“Microsoft Windows Vista 家庭版”主题),主要集中在调整某些脚本,以便自动生成的grub配置文件显示更多令人愉快的标题。
- 另请参阅Grub 2 - 5 个常见任务线程——虽然细节不多,但可以帮助您快速开始。
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 中删除