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

San*_*pat 7 boot grub2 dual-boot 20.04

我已经在 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"
Run Code Online (Sandbox Code Playgroud)

如何禁用它?

opx*_*opx 8

解决方案 / tl;dr

echo 'set timeout_style=hidden
set timeout=0' | sudo tee /boot/grub/custom.cfg
Run Code Online (Sandbox Code Playgroud)

解释

尽管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
}
Run Code Online (Sandbox Code Playgroud)

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

但是我们如何在不触及系统包安装的文件的情况下隐藏 GRUB 菜单呢?幸运的是,该grub-common软件包提供了一种应用一次性设置的工具。查看update-grub命令评估的最后一个文件/etc/grub.d/41_custom

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
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 好吧,许多 UEFI 实现都能够列出可用的操作系统(因为它们都将启动过程所需的文件存储在一个通用的 ESP 上,EFI 系统分区的缩写)。大多数情况下,它们还允许您在进入 UEFI 用户界面后从该列表中选择应启动的操作系统。请注意,进入 UEFI 用户界面所需的步骤因供应商和实现而异。大多数情况下,您必须在系统启动时按 Escape、Delete 或功能键之一。 (2认同)

UnK*_*OWn 6

使用 2 个 Ubuntu 20.04 操作系统的双启动进行测试

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

GRUB_TIMEOUT=10
Run Code Online (Sandbox Code Playgroud)

像这样

GRUB_TIMEOUT=0
Run Code Online (Sandbox Code Playgroud)

并运行以下命令

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

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

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

quick_boot="1"
Run Code Online (Sandbox Code Playgroud)

quick_boot="0"
Run Code Online (Sandbox Code Playgroud)

这将防止在多操作系统情况下将超时值更改为 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
}
Run Code Online (Sandbox Code Playgroud)

当你想查看 grub 菜单时,按一下Esc键就会显示。(rite时间根据情况不同,一般在BIOS菜单移交给grub菜单时间之后)

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

第一次,按Escrite time 进入 grub 菜单。然后从顶部从 0 开始数数,列出您最喜欢的操作系统条目。

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

在此输入图像描述

所以,它的位置是第2位。

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

GRUB_DEFAULT=0
Run Code Online (Sandbox Code Playgroud)

GRUB_DEFAULT=2
Run Code Online (Sandbox Code Playgroud)

然后运行以下命令

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

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