如何在 Ubuntu 20.04 启动时禁用 grub 菜单?

如何在 Ubuntu 20.04 启动时禁用 grub 菜单?

我在 Windows 旁边安装了 Ubuntu 20.04。当我启动系统时,它会显示 grub 菜单 10 秒钟,供您在 Ubuntu 和 Windows 之间进行选择。我不想要那个菜单,只想在按下电源按钮后立即启动它。我研究过线程并添加GRUB_HIDDEN_TIMEOUT_QUIET=true 甚至更改GRUB_TIMEOUT0然后运行sudo update-grub。但它不起作用,菜单在启动时仍然显示。这是我的/etc/default/grub文件-

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
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=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

我该如何禁用它?

答案1

解决方案/tl;dr

echo 'set timeout_style=hidden
set timeout=0' | sudo tee /boot/grub/custom.cfg

解释

尽管UnKNOWn 的方法确实有效,如果可能的话,应避免修改基础系统安装的文件。在本例中(即 Ubuntu 20.04),apt-file 显示属于/etc/grub.d/30_os-prober软件包grub-common(对于全部文件位于 中/etc/grub.d/,该命令将使用它们update-grub来编译最终的 GRUB 配置文件):

“apt-file search /etc/grub.d/30_os-prober”的输出

如果软件包grub-common将来更新,apt 会检测到更改并提示您决定应该做什么(因为两个选项 - 您修改的文件以及来自分销商的未修改文件 - 都是有效的)。在最坏的情况下,您必须手动比较和合并文件内容。

那么,如果我们想在多引导环境中隐藏 GRUB 菜单,我们有什么选择呢?这一次,该grub-common软件包只想确保每个用户都可以在已安装的操作系统之间切换。因此,该脚本/etc/grub.d/30_os-prober包含以下代码片段:

adjust_timeout () {
  if [ "$quick_boot" = 1 ] && [ "x${found_other_os}" != "x" ]; then
    cat << EOF
set timeout_style=menu
if [ "\${timeout}" = 0 ]; then
  set timeout=10
fi
EOF
  fi
}

此脚本(命令执行后进行评估update-grub)基本上允许您设置自定义超时,即使是在多引导环境中也是如此 - 但它不允许超时为 0,因为新手用户可能不知道如何在没有明显菜单的情况下启动其他操作系统。这意味着您可以设置GRUB_TIMEOUT为 1,这样 GRUB 菜单就会在启动默认引导选项之前显示一秒钟。

但是,我们如何才能永久隐藏 GRUB 菜单而不触碰系统软件包安装的文件呢?幸运的是,软件包grub-common提供了应用一次性设置的功能。查看该update-grub命令评估的最后一个文件/etc/grub.d/41_custom

#!/bin/sh
cat <<EOF
if [ -f  \${config_directory}/custom.cfg ]; then
  source \${config_directory}/custom.cfg
elif [ -z "\${config_directory}" -a -f  \$prefix/custom.cfg ]; then
  source \$prefix/custom.cfg;
fi
EOF

好的,因此每次评估 GRUB 配置文件时都会获取一个名为 的文件custom.cfg,该文件必须与实际的 GRUB 配置文件 ( ) 放在相同的位置。/boot/grub/grub.cfg即在启动时)因此让我们将所需的设置添加到此文件(/boot/grub/custom.cfg):

GRUB 现在将隐藏菜单并立即启动默认启动选项。其他操作系统仍可使用 UEFI 启动。

答案2

已测试双启动 2 个 Ubuntu 20.04 操作系统

/etc/default/grub在文件中编辑以下行

GRUB_TIMEOUT=10

像这样

GRUB_TIMEOUT=0

并运行以下命令

sudo update-grub

这会使超时时间为 0,条件是如果存在单一操作系统,它将坚持为 0,否则它将被覆盖为 10。

/etc/grub.d/30_os-prober文件中,更改行

quick_boot="1"

quick_boot="0"

这将防止在多操作系统情况下将超时值更改为 10 秒。

从文件中查看函数“adjust_timeout”/etc/grub.d/30_os-prober

prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
quick_boot="1"

export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"

. "$pkgdatadir/grub-mkconfig_lib"

found_other_os=

adjust_timeout () {
  if [ "$quick_boot" = 1 ] && [ "x${found_other_os}" != "x" ]; then
    cat << EOF
set timeout_style=menu
if [ "\${timeout}" = 0 ]; then
  set timeout=10
fi
EOF
  fi
}

当你想看grub菜单的时候,按下该Esc键就可以显示了。(操作时间根据情况不同而不同,一般是在BIOS菜单交接给grub菜单之后的时间)

如果您希望更改默认操作系统,您可以从同一个文件进行设置/etc/default/grub

首次使用时,点击 进入 grub 菜单Esc。然后从顶部开始从 0 开始计数以列出您最喜欢的操作系统条目。

例如,我有两个 20.04 操作系统。一个是/dev/sda2,另一个是 ,/dev/sda6 /dev/sda2是默认操作系统。如果我想将 中的一个/dev/sda6设为默认操作系统,我需要找到它的编号,如下所示。

在此处输入图片描述

因此,它的位置是第二位。

编辑文件/etc/default/grub并更改行

GRUB_DEFAULT=0

GRUB_DEFAULT=2

然后运行以下命令

sudo update-grub

系统将直接启动至 Ubuntu 20.04/dev/sda6

答案3

从 ubuntu 22.10 开始我推荐这个:

编辑文件 /etc/default/grub:

sudo nano /etc/default/grub

确保你有以下几行:

GRUB_TIMEOUT=0
GRUB_RECORDFAIL_TIMEOUT=0

保存并退出运行更新程序:

sudo update-grub

相关内容