Не удается открыть скрытое меню 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 Files and Options

Если это не сработало для вас, есть другой способ сделать это, который включает изменение /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, вы автоматически загрузитесь в операционную систему по умолчанию. Удачи!

Примечание. Если что-то пойдет не так или произойдет какое-то непредвиденное поведение, измените код на исходный, используя файл резервной копии, и все снова вернется в нормальное состояние.

Другие вопросы по тегам