0

我是 linux 和 bash 的新手,所以我不知道我做错了什么。我将 grub 设置为不显示,并在按下 shift 3 秒后显示。这工作得很好。然后我在 30_os-prober 中更改了行(如下所示),其中包含 'shift' 到 'F11',正如我在这里阅读的那样:http ://www.gnu.org/software/grub/manual/grub.html (13.3 .33)。现在,当我按下 F11 时,什么也没有发生,当我按下 shift 时,我可以看到“Grub 正在加载”,然后默认操作系统(Ubuntu)加载而不显示 grub 菜单。

这是我的 /etc/default/grub 内容的一部分:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

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

这是(恕我直言)关键部分,来自/etc/grub.d/30_os-prober:

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

      if [ "x${GRUB_HIDDEN_TIMEOUT}" = "x0" ] ; then
    cat <<EOF
if [ \${timeout} != -1 ]; then
  if keystatus; then
    if keystatus --F11; then << There I changed shift to F11
      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 [ \${timeout} != -1 ]; then
  if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
    set timeout=0
  fi
fi
EOF
      fi
    fi
  #fi
}

谢谢你。

4

1 回答 1

0

您提供的链接中的 keystatus 文档(以及我遇到的其他 keystatus 文档)表明它仅接受 --shift --ctrl 或 --alt 作为特定于键的参数。也许它不适用于 F11 等其他键。

要注意的另一件事是 keystatus 显然不适用于所有平台。在这种情况下,您的第一个 keystatus 调用将返回 false,其余的 keystatus 条件逻辑将被跳过。

于 2011-03-01T08:15:22.467 回答