美观地编辑 grub.cfg

Mal*_*rba 10 grub ubuntu-9.10

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

因此,任何 ubuntu 用户都知道在几次内核升级后启动菜单是如何填满的。回到 menu.lst 时代,您可以调整菜单以隐藏不需要的选项,但仍保持它们可用。

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



Ç
d

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

在 grub.cfg 中尝试同样的技巧导致没有任何结果。因此,我正在寻找一种方法,通过编辑 grub.cfg 文件,使用新的 grub 菜单实现相同的结果。也欢迎其他美学调整。

谢谢

EDIT2:如果无法隐藏菜单条目,我想要一种在它们之间插入分隔符的方法,因此菜单将如下所示:


--其他--
C
D

qua*_*ote 8

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

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

因此,如果您不想在每次内核更新后编辑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
Run Code Online (Sandbox Code Playgroud)

在 Grub 菜单中添加分隔符。

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

# separator
title  --------------------
root
Run Code Online (Sandbox Code Playgroud)

我怀疑 Grub2 可能类似。在grub.cfg 中,一个非常基本的菜单条目如下所示

# basic example
menuentry "Memory test (memtest86)" {
        linux   /boot/memtest86+.bin
}
Run Code Online (Sandbox Code Playgroud)

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

# a separator!  no, really!
menuentry "....." {
        linux   /boot/memtest86+.bin
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,“任何事情”并不意味着什么;当我测试这个时,我尝试了一长串破折号(“----------------”),但它从未奏效。但它喜欢上面显示的短点串,所以你可以使用它。

.....

现在,这就是如何制作一个分隔符。要制作一堆并将它们自动放置在您想要的位置,您需要将它们添加到/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 - 默认没有;特殊用户条目可以在这里

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

#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
  linux /boot/memtest86+.bin
}
EOF
Run Code Online (Sandbox Code Playgroud)

现在,将该脚本移动到第一个分隔符的位置,并将其链接到其他分隔符的位置。这些脚本是按顺序执行的,所以如果你想让第一个脚本出现在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
Run Code Online (Sandbox Code Playgroud)

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

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

....

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


如果您想要更漂亮的东西,请使用 Grub 启动图像或主题。我需要就这些主题给你一个raincheck,但请查看下面的资源。


资源:

UbuntuForums 上有两个重要的 Grub2 指南,我已经开始了解和喜爱:

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

Grub Wiki 的主题格式页面是破解 Grub2 主题的必备工具。


Mar*_*oft 5

如果第一个字符是空格,分隔符可以由破折号组成。此外,没有必要使用 linux 命令作为分隔符部分,您可以使用任何这样的命令:

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}
Run Code Online (Sandbox Code Playgroud)

或者甚至是“true”默默地返回:

menuentry " -----------------------------------------------------------" {
  true
}
Run Code Online (Sandbox Code Playgroud)