如何隐藏启动时显示的GRUB菜单?

我停止了双系统启动,并且不想再选择操作系统了。我希望能够直接引导进入Ubuntu 12.04,而不要看到GRUB菜单。
我应该如何实现这个目标?

如果你停止了双系统启动,很可能是因为你已经不再使用另一个操作系统了。为什么不把另一个操作系统删除,这样Ubuntu就可以正常启动了呢? - karthick87
重复的问题(任选一个):http://askubuntu.com/questions/124074/dual-boot-default-question-w7-ubuntu 或者 http://askubuntu.com/questions/52963/how-do-i-set-windows-to-boot-as-the-default-in-the-boot-loader - david6
如果任何一个答案回答了您的问题,请接受其中之一 :) - blade19899
@david6:我不明白这两个问题与此问题有什么重复之处。我认为这是关于在超时期间隐藏grub菜单的问题。 - oKtosiTe
抱歉,第二个链接应该是:http://askubuntu.com/questions/66070/how-to-set-windows-bootloader-as-default-bootloader。这里包括了如何:***隐藏Grub2菜单,并使用默认菜单选项***。 - david6
似乎在30_os-prober脚本中存在一个错误,它覆盖了timeout和timeout_style变量的值。有人报告过吗? - opensas
除了你能找到的所有食谱之外,有时候你需要深入核心问题。当你搜索这类内容时,它远非搜索引擎返回的首要结果,所以这里是相关文档:https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html - lmat - Reinstate Monica
有关使用软件Boot Repair的解决方案,请参见:https://askubuntu.com/a/1119833/818816 - Bruno A Chrisostomo
22个回答

你可以更改 grub 设置。

在终端中输入

sudo -H gedit /etc/default/grub

you need to change this

GRUB_HIDDEN_TIMEOUT_QUIET=false 修改为

GRUB_HIDDEN_TIMEOUT_QUIET=true

保存文件并退出
输入sudo update-grub 如果您没有得到想要的结果,请参考this bug

9它当前被更改为True,但我仍然看到grub菜单... - Alex Poulos
我使用的是12.04版本,我尝试了这个方法,但它已经显示为“true”,而且菜单仍然出现。我只有另外两个操作系统,一个是failsafe,另一个是Memtest。我已经删除了Windows分区并更新了grub,但菜单仍然显示出来。 - Alex Poulos
@AlexPoulos 看一下这个链接 - hingev
2通过将超时时间更改为0,然后使其保持安静,对我起了作用。谢谢。 - king_julien
2请注意,这个答案是在2012年编写的,不幸的是不适用于更新的Ubuntu版本。 - Flimm

我通过禁用OS Prober来解决了这个问题。我这样做是因为在由模板/etc/grub.d/30_os-prober生成的部分/boot/grub/grub.cfg中,有一个对"timeout"设置为10和"style"设置为menu的覆盖。
编辑/etc/default/grub并添加以下行:
GRUB_DISABLE_OS_PROBER=true

希望你觉得这个有用!
顺便说一下,我的完整的/etc/default/grub文件是:
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_DISTRIBUTOR= [...]
GRUB_DISABLE_OS_PROBER=true
GRUB_RECORDFAIL_TIMEOUT=0

愉快地编码


2这对我来说有效,但它使得除了默认选项之外的所有其他启动选项都消失了... - opensas
1如果选择菜单没有显示,你怎么知道它上面有哪些启动选项呢?如果你想禁用菜单,为什么还要非默认的启动选项呢? - Kyle Strand
如果你省略掉"GRUB_TIMEOUT_STYLE=hidden"这部分,那么倒计时是可见的,但除非你中断它,否则不会显示其他内容。这样可以让你进入菜单并更改启动设置,即使这样做不太明显。 - stonecrusher
如果想要在按住Shift键后能够看到启动菜单,GRUB_TIMEOUT必须设置为大于零(比如,GRUB_TIMEOUT=5)。否则,如果需要的话,其他启动选项(比如Windows)将无法激活。 - user3804598
在Ubuntu 18.04 LTS上,GRUB_RECORDFAIL_TIMEOUT=0是唯一的更改/etc/default/grub的方法,可以消除30秒的超时(以及完全消除GRUB引导加载程序菜单),这似乎是一个错误:https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1814403/comments/4。此外,必须执行`sudo update-grub才能使编辑生效,这在答案中没有提到。请注意,除非机器是开发虚拟机或类似的情况,否则不建议将此值设置为0`(请参阅上述链接)。 - Ben Johnson
你不需要禁用OS Prober。请参考https://askubuntu.com/a/1197788/585408。 - Radon Rosborough

我尝试了所有那些提示,都没有起作用,最后只能将超时时间设置为零,如下所示:

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

在更改值后运行sudo update-grub - niksmac
我也一样。我运行了"update-grub",但没有起作用。 - Robin Winslow
1这是我的 /etc/default/grub 文件,但我仍然会看到 grub 菜单并倒计时 10 秒。 - zorkerz

你需要编辑位于/etc/default/grub的文件,以防止显示grub菜单。
默认情况下,该文件中的条目如下所示。
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
  • 从第二行中删除#标记,并且
  • GRUB_HIDDEN_TIMEOUT_QUIET=false改为GRUB_HIDDEN_TIMEOUT_QUIET=true
更改后,文件的必需部分将如下所示。
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
然后在终端中运行sudo update-grub命令,然后重新启动以查看结果。

3我已经进行了这个配置,但是 grub 菜单仍然出现。 - user25165
1通过这个设置,update-grub 返回了一个警告:“当 GRUB_HIDDEN_TIMEOUT 被设置时,将 GRUB_TIMEOUT 设置为非零值不再支持”,而且我在显示 grub 菜单时仍然得到了 10 秒的倒计时。将 GRUB_TIMEOUT 设置为 0 也返回了相同的结果。 - zorkerz
@zorkerz 你使用的是哪个版本的Ubuntu? - Anwar
友好的非洲地松鼠,在15.10版本上表现相同。 - zorkerz
请注意,这个答案是在2012年写的,已经过时了。 - Flimm

我遇到了同样的问题,这里的任何提示都没有起作用!唯一的方法是手动更改/boot/grub/grub.cfg文件。 在这个文件的某个地方,他将超时时间设置为10秒!所以,只需注释掉那些行即可。
if [ "${timeout}" = 0 ]; then
  set timeout=10
fi

但是,你再也不能执行 update-grub 了,否则它会恢复到相同的文件,并且超时时间会再次变为10!保存文件(在 vi 中,即使你是 su,也需要强制保存!)。重新启动计算机,它将正常工作!

有趣,为什么不这样 if [ "${timeout}" = 10 ]; then set timeout=0 fi ?或者直接移除 if 语句,只留下 set timeout=0 - Elder Geek
这是从一个模板中放置的,可以禁用(如Agustin的回答中提到的OS探测器)。您不需要手动编辑grub.cfg。 - Neil Traft
这对我在14.04版本中有效。 - Kalamalka Kid
-1. 任何直接编辑 grub.cfg 的答案都是错误的。当更新 grub 时,你必须始终重新安装它,尤其是当上游进行重大更改时,否则可能导致系统无法启动。 - éclairevoyant

我找到了一个简单的解决办法。
  echo "
  set timeout_style=hidden
  set timeout=2" | sudo tee --append /etc/grub.d/40_custom 

并更新grub。它将覆盖grub.cfg中的超时设置,因此无论您在/ etc / default / grub中有什么都无关紧要。 因此,我有一个可以通过shift调用2秒钟的隐藏菜单。

这种方法对我有效(由Ubuntu 17.10安装的grub 2.02~beta3-4ubuntu7),而其他在此页面上提出的解决方案都没有起作用(真是倒霉,我最后才测试到这个:/)。谢谢! - pchaigno

如果你想删除启动项,只需输入以下内容:
sudo update-grub

如果那个方法不起作用,安装启动管理器,像这样:
sudo apt-get install startupmanager

使用启动管理器,您可以:
  1. 选择要启动的条目
  2. 选择分辨率以及启动前等待的时间
  3. 您还可以选择0来自动启动默认的启动项

汉堡,但他在谈论食物。 - Black Block
抱歉,打错了。应该是sudo update-grub,我已经修改了答案。 - blade19899
这个唯一的问题是,我使用的Startup-manager版本没有显示很多选项 - Alex Poulos
1我使用的是12.04版本,我尝试了这个方法,但它已经显示为“true”,并且仍然出现在菜单中。我只有另外两个操作系统,一个是failsafe,另一个是Memtest。我已经删除了Windows分区并更新了grub,但菜单仍然显示出来。 - Alex Poulos
在“超时时间(秒)”旁边有一个带有数字10的框,请将其重命名为数字0。 - blade19899

对于所有在命令行中使用"word splash"的人来说,除了将超时时间硬编码为0之外,任何其他方式都不起作用。
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

尝试从倒数第二行中删除单词“splash”,然后更新并重新启动,哇,没有菜单 :)
希望对你有帮助,krex

Agustin一样,我发现我的问题与OS Prober有关。比他的解决方案更进一步,我找到了this gist,它可以让你拥有操作系统,但仍然隐藏菜单。你只需要下载这两个文件,放入/etc/grub.d目录,并给它们与该目录中其他模板相同的权限。

如果你想要访问非默认的操作系统,只需在启动时按住Shift键。这将显示菜单。


这对我来说绝对像是一个bug。有人报告过吗? - opensas
也许我会在某个时候完成它。不知道是否已经存在一个。 - Neil Traft

理想情况下,我们可以简单地放置
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0

将其添加到/etc/default/grub中,然后完成。不幸的是,在Manjaro上,文件/etc/grub.d/30_os-prober会覆盖这些设置。我们可以禁用该文件,但这里有一个更好的解决方案:创建/etc/grub.d/99_quiet并添加以下内容:
#!/bin/sh

cat <<EOF
set timeout_style=hidden
set timeout=0
EOF

(有了这个文件,我们根本不需要修改/etc/default/grub。)将其设置为可执行并运行sudo update-grub(或者如果在Arch上,则运行sudo grub-mkconfig -o /boot/grub/grub.cfg)。
重新启动,GRUB将不会显示菜单或在启动过程中引入任何延迟。但是,如果在硬件启动后但在GRUB启动之前按住Shift键,仍然可以获得菜单。
要理解这里发生的事情,我们必须了解GRUB配置的工作原理。在启动过程中,GRUB会读取一个特殊的DSL格式的/boot/grub/grub.cfg文件。这个文件可以手动编写,但更推荐使用update-grub(即grub-mkconfig)来生成它。该命令使用/etc/default/grub/etc/grub.d来生成grub.cfg。首先,会先加载/etc/default/grub,以设置update-grub生成文件所需的配置参数。然后,对于/etc/grub.d目录下的每个可执行文件,都会被执行,并将其输出内容连接到grub.cfg的末尾。
有关详细信息,请参阅此处的一些文档,同时还可以查看/etc/grub.d中的实际shell脚本以及生成的GRUB配置文件/boot/grub/grub.cfg

这对我在Debian Bullseye(alpha版)上没有起作用。 - Michael Herrmann
@MichaelHerrmann 很遗憾,这并不让我感到意外。不同的发行版可能具有不同的默认配置文件和不同的行为。我认为你需要更加彻底地调查,使用答案中最后两段的信息。也许你可以在其中加上一条注释,适用于你的发行版! - Radon Rosborough
这对我在Ubuntu Mate 22.04上有效,除了Shift部分,即使我在启动grub后立即按住Shift键也不会出现(但说实话,我并不太在意,我只是希望它消失)。谢谢! - babis21