无法使 grub 菜单超时(或消失)

无法使 grub 菜单超时(或消失)

我正在运行 Ubuntu 12.04。

我无论如何也无法让 grub 菜单(带有选项)消失。

我希望它自动启动到第一个选项。我编辑了/etc/默认/grub使其看起来如下所示:

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 更新 grub然后我意识到我有 grub 2,所以我运行sudo 更新-grub2(两者都让它看起来像是他们创造了grub配置文件文件成功。

我重启电脑,然后它又回到 grub 菜单,然后就一直停留在那里,直到我做出选择。如果断电,这种情况就不理想了…… :-)

我也尝试使用重新安装 grubsudo grub-install /dev/sda- 也没有成功

答案1

正如其他答案指出的那样,你可能是一个受害者記錄失敗情况。/boot/grub/grub.cfg手动编辑应该是不可能的,因为它是自动生成的。另一个建议是编辑,/etc/grub.d/00_header但它可能会提示用户干预更新。

最简单的解决方案是定义未记录的 GRUB_RECORDFAIL_TIMEOUT中的变量/etc/default/grub。例如:

GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT

编辑

这个答案更多细节。

答案2

使用:

grub-editenv create

这将清除 grub 环境文件,下次启动时就可以正常启动了。

答案3

更改GRUB_TIMEOUT=10为零

这是我的配置文件:

GRUB_DEFAULT="Ubuntu, with Linux 3.2.0-30-generic-pae"
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

首先,输入要直接启动的操作系统的名称。我的是 Ubuntu。因此,您可以像在GRUB_DEFAULT="Ubuntu, with Linux x.x.x-xx-generic-pae"

然后我用了 1 秒钟来GRUB_TIMEOUT=给我 1 秒钟的时间,然后再选择默认操作系统(如果我需要启动到另一个操作系统,例如 Xubuntu)

如果GRUB_CMDLINE_LINUX_DEFAULT=""你删除quite splash它,它将在启动过程中显示文本而不是 Ubuntu 徽标(我喜欢这样 :P )


还有另一种解决方案:

有一个程序叫启动修复这有助于使用 GUI 进行配置。

在此处输入图片描述

在此处输入图片描述

从图片中可以看到,有一个名为的框Unhide boot menu。只需取消选中该框并按 appy。您可以通过单击高级选项箭头来访问它。

安装启动修复

sudo add-apt-repository ppa:yannubuntu/boot-repair

sudo apt-get update

sudo apt-get install -y boot-repair

然后boot-reapir从终端或破折号运行。


第三种解决方案:

您可以使用一款名为 grub-customizer 的易用 GUI 应用程序来让您的工作更轻松。顾名思义,您可以用它做很多事情,而不仅仅是重新排序 Grub 菜单条目。

您可以通过以下方式安装:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

在此处输入图片描述

从菜单中可以看到有show menu选项。取消选中并查看它是否有效

答案4

我的 Ubuntu 总是有 30 秒的超时时间,无论我是否设置该值。以下是我发现recordfail 是缺失值

1.验证实际的 grub 脚本/boot/grub/grub.cfg

在我看来,验证 Grub 功能的最佳方式是打开。它是使用 中的模板和 中的设置/boot/grub/grub.cfg自动生成的脚本。grub-mkconfig/etc/grub.d/etc/default/grub

在第 109 行左右,你会看到类似这样的内容:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=30 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

就我而言,借助生成的脚本,我发现该recordfail变量未设置。

2. 如果recordfail变量未设置,则设置它

在您最喜欢的文本编辑器(例如 vim)中打开/etc/default/grub,然后将变量设置GRUB_RECORDFAIL_TIMEOUT为给定值,例如 5 秒。

你的配置文件看起来应该像这样:

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

3.更新运行配置update-grub

最后一步,更新配置以使用 运行update-grub。现在,GRUB2 将使用设置的超时。此命令将重新生成文件/boot/grub.cfg

4.验证生成的脚本结果

再次打开/boot/grub.cfg并检查第 109 行附近的结果:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=5 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

请注意,第 109 行的值现在是 5,而不是之前的 30。

相关内容