无法显示隐藏的 GRUB2 菜单?

无法显示隐藏的 GRUB2 菜单?

我有一个双启动 (Ubuntu/Ubuntu) 系统,并已将 GRUB2 配置为隐藏启动菜单,除非我按下 Shift 键(或其他键)。这是我在 /etc/default/grub 中的配置:

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=3
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=""

但是,无论我做什么,按什么键,或者何时按,它都会启动到默认操作系统选项,我永远看不到 GRUB 菜单。我总是sudo update-grub在更改这些选项后执行此操作。

我尝试将隐藏超时延长至 15 秒,但我的系统没有改变……就像该值没有被遵守一样——系统立即启动。

我确实有一个软件 RAID 1 配置,但是每个驱动器都是镜像的,并且它们都有 Grub,所以不可能是它。

有任何想法吗?

答案1

将 GRUB_TIMEOUT 更改为某个值(例如 10),更新 grub,您的问题将得到解决。重新启动并按下 Shift 键。

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=3
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=""

參考Grub2 文件和选项

如果这对您不起作用,那么还有另一种方法可以做到这一点,即更改文件/etc/grub.d/30_os-prober。备份文件后,我执行了以下步骤,对我来说效果很好。

因此,打开终端并写入

sudo gedit /etc/grub.d/30_os-prober

将打开一个文件。更改以下代码:

make_timeout () {
  if [ "x${found_other_os}" = "x" ] ; then
    if [ "x${1}" != "x" ] ; then
      if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
    verbose=
      else
    verbose=" --verbose"
      fi

      if [ "x${1}" = "x0" ] ; then
    cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep$verbose --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
EOF
      else
    cat << EOF
if [ "x\${timeout}" != "x-1" ]; then
  if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
    set timeout=0
  fi
fi
EOF
      fi
    fi
  fi
}

adjust_timeout () {
  if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
    cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
EOF
    make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
    echo else
    make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
    echo fi
  else
    make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
  fi
}

变成这样:

adjust_timeout () {
        cat <<EOF
        if keystatus --shift; then
          set timeout=-1
        else
          set timeout=0
        fi
EOF
}

并保存文件。

运行后sudo update-grub关闭系统。

现在,当你重新启动系统时,你必须按下并按住不动Shift 键立即地按下电源按钮后。这将引导您进入 Grub。如果您不按 Shift 键,您将自动启动到默认操作系统。祝您好运!

笔记:如果出现任何问题或某些意外行为,请使用备份文件将代码改回原始代码,一切都会恢复正常。

相关内容