美观地编辑grub.cfg


10

编辑:(为清楚起见),我正在通过编辑配置文件(可能但不一定是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


您是否要对grub.cfg进行所有更改?如果您正在运行update-grub来自动生成它,则可能要编辑/etc/grub.d下的脚本;请参阅superuser.com/questions/102692/…以获得简要概述。
quack quixote 2010年

@〜quack:有点帮助,而且很有用。我仍然希望隐藏菜单项,或者至少在它们之间放置一个分隔符。
马拉巴巴

因此,我想仅卸载旧内核不是一种选择吗?
鲍比,2010年

Answers:


8

首先,了解Ubuntu如何配置Grub2。

  • /boot/grub/grub.cfg是Grub2菜单
  • 更新grub的命令自动生成一个文件
  • ...通过从/ etc / defaults / grub读取默认设置
  • ...并在/etc/grub.d中运行shellscript

因此,如果您不想在每次内核更新后都编辑grub.cfg,则希望调整/etc/grub.d中的脚本,以便在运行update-grub时可以应用更改。


其次,要直接回答您的第一个问题,我不熟悉使特定启动选项不可见,但仍可通过Grub菜单访问的任何方法。关于Grub1的许多小事情并没有在Grub2中重新实现,如果这是其中之一也不会令我感到惊讶。

而是可以通过将菜单字体颜色设置为与背景颜色相同的方式使所有菜单项不可见(直到突出显示)。在/etc/grub.d/05_debian_theme中,更改menu_color_normal,以使第一种颜色(字体)与第二种颜色(背景)匹配。保留menu_color_highlight的不同,以便显示光标下方的条目。

# 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.cfg中看起来像这样:

# 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.cfg的各个部分之间放置一个简单的分隔符。如果查看/etc/grub.d,则会看到以下脚本:

  • 00_header
  • 05_debian_theme
  • 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_separator或其他名称。

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 / default / grub中将特定条目设置为默认条目,则可能需要对其进行更新-Grub2从0开始计数菜单条目,并且这些“分隔符”中的每一个都是有效条目,因此它们也进行计数。如果您先前的默认条目为0,并且在其之前添加了一个分隔符,请记住将GRUB_DEFAULT更改为1

现在运行update-grub,并检查/boot/grub/grub.cfg-您应该在其中看到分隔符。如果您这样做,请重新启动并检出它们。

....

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


如果您想要更漂亮的东西,请使用Grub启动图像或主题。我需要对这些主题进行一次检查,但是请查看下面的资源。


资源:

我已经知道并喜欢在UbuntuForums上有两个重要的Grub2指南:

GNU Grub 2是另一个很棒的资源。他有一用于调整Karmic的Grub2 的脚本完整披露:我还没有尝试过)。

Ghack Wiki的“主题格式”页面是破解Grub2主题所必需的。


哇,谢谢你的回答。遗憾的是尚未看到此版本的某些功能。我已经尝试插入分隔符,但没有成功,因为在括号之间将其留空。上面的一切似乎都在起作用。再次感谢。
马拉巴巴

@D Connors-是的,关于Grub1我错过了几件事,但总的来说,我认为Grub2是一个改进。它确实有自己的学习曲线。我希望开发人员以牺牲文本菜单为代价,为Grub2的图形功能做出更多的努力,但是随着项目的发展,这种情况可能会改变。
quack quixote 2010年

5

如果分隔符的第一个字符是空格,则可以用破折号制成。另外,没有必要在分隔符部分使用linux命令,您可以使用以下任何命令:

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

甚至“ true”也可以静默返回:

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

0

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


当我碰巧搞砸了当前安装时,我很少使用它们进行故障排除。另外,内核只是一个例子,我还想隐藏其他3个可启动分区,但仍然可用。
马拉巴巴

(为避免混淆。当我说“隐藏”时,我并不是要“隐藏分区”,而是要“从引导菜单中隐藏重复的OS条目”)
Malabarba 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.