Скрыть меню GRUB2, если вы не удерживаете клавишу Shift: как это сделать?

32

У меня установлена ​​двойная загрузка Ubuntu - Windows 7, и я хотел бы, чтобы мой ноутбук загружал Windows 7, если я не нажму клавишу Shift сразу после загрузки и не открою меню Grub2, из которого я могу выбрать Ubuntu.

Я исследовал на GRUB2 и варианты , etc/default/grubи я пытался играть с комбинациями с GRUB_TIMEOUTи GRUB_HIDDEN_TIMEOUTзначениями, но безрезультатно. Я попытался установить значение GRUB_HIDDEN_TIMEOUTвыше, чем GRUB_TIMEOUTожидалось, что оба обратного отсчета начнутся одновременно, а нет - GRUB_TIMEOUTначнутся только после завершения другого.

Это поведение достижимо?

Если так, то как?

Без Эрмосо
источник
1
То, как я это делаю, - это время ожидания, равное 0 (устанавливается с помощью Grub Customizer). Я не могу отображать меню GRUB2, если не удерживаю Shift сразу после моего BIOS, который затем отображает меню. sudo add-apt-repository ppa: danielrichter2007 / grub-customizer sudo apt-get update sudo apt-get установить grub-customizer
Райан МакКлюр
Насколько
@RyanMcClure Я попытался установить тайм-аут вручную на 0, но удерживание правой клавиши Shift вообще не вызывает меню Grub2.
Без Эрмосо

Ответы:

15

Я думаю, что я нашел более простое решение. Измените следующие строки в файле / etc / default / grub:

GRUB_HIDDEN_TIMEOUT = 0.0

GRUB_TIMEOUT = 0.0

Конечно, мы наконец запустили обновление-grub. Это работает на моем ПК.

sivitri
источник
6
Сотрите это. Это не дает мне меню grub, но я также не могу получить его, нажав shift.
zorkerz
9

Это для Ubuntu 16.04.

Я решил это с небольшой комбинацией некоторых ответов, найденных выше, поэтому нет необходимости изменять 30_os-prober, чтобы избежать будущих слияний при обновлении пакета grub ...

Надеюсь, это поможет.

Изменены некоторые переменные в / etc / default / grub, чтобы они отражали то, что я хочу;

GRUB_DEFAULT=4
GRUB_HIDDEN_TIMEOUT=5
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_FORCE_HIDDEN_MENU="true"
export GRUB_FORCE_HIDDEN_MENU

Затем создал новый файл;

sudo touch /etc/grub.d/50_hidemenu
sudo chmod +x /etc/grub.d/50_hidemenu

наполнил это этим содержанием;

#!/bin/sh
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 --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
      set timeout=0
    fi
  fi
fi
EOF

и обновил grub;

sudo update-grub

Приветствия.

tux1c
источник
Не работает для меня
Менашех
Я проверял это только в 16.04. Вы на другой версии?
tux1c
Может быть, 16.10. Вы правы, определенно следовало упомянуть об этом.
Менаше
Работает и на Debian
Джоселин
7

В Kubuntu 14.04 это не работает, если вы установите GRUB_TIMEOUT= 0, как ни странно, после применения этого и перезагрузки, меню grub остается видимым в течение 10 секунд.

Причина этого в том, что в другом скрипте grub есть фрагмент кода, который устанавливает grub_timeout равным 10, если он имеет значение 0.

Так вот как я заставил это работать:

сделайте копию обоих grubи 30_osproberфайлов !!! Когда что-то идет не так, вы можете положить исходные файлы обратно

В /etc/default/grub

GRUB_DEFAULT=4    #set this value to the OS you want to boot
GRUB_HIDDEN_TIMEOUT=0

GRUB_TIMEOUT=0

в/etc/grub.d/30_os-prober , есть фрагмент кода, который устанавливает тайм-аут grub на 10 с, если он установлен в ноль /etc/default/grub, я не знаю, почему разработчики помещают его туда, но он не позволяет скрыть меню grub.

set timeout_style=menu

if [ "\${timeout}" = 0 ]; then    
  set timeout=10  # I changed this from 10 to 0

После этих изменений запустите sudo update-grubдля создания новой последовательности загрузки grub.

Я документирую все свои исправления / моды для Linux на https://sites.google.com/site/marcshomesite/Home/linux-tuning

user310707
источник
Я надеюсь , что вы не поставили пробел после =в GRUB_TIMEOUT= 0.
Муру
4

Для автоматической загрузки Windows без необходимости выбора из меню GRUB нам нужно отредактировать /etc/default/grubфайл со значениями, подобными этим:

GRUB_DEFAULT= <number of default entry starting from 0>
GRUB_TIMEOUT= 0 # time in seconds to boot default
# GRUB_HIDDEN_TIMEOUT=0 # warning: activating this may lock you out from GRUB menu

Всегда полезно сделать резервные копии этих файлов перед их редактированием. После внесения изменений нам нужно активировать их

sudo update-grub

Значения для GRUB_DEFAULT зависят от нашей отдельной системы. Чтобы всегда загружать Windows, мы можем "Microsoft Windows XP Professional"вместо имени записи указать имя записи точно так, как оно было показано в меню Grub (например ).


Важное примечание: на некоторых машинах меню GRUB не может отображаться при нажатии и удерживании левой кнопки Shiftпри загрузке (см. Ошибка # 425979 ). Поэтому может быть хорошей идеей сначала проверить это с загрузкой Ubuntu (не Windows), установленной в качестве ОС по умолчанию. Тогда вы сможете легко отменить свои настройки GRUB в случае, если вы затронуты.

Takkat
источник
Разве это не делает Ubuntu по-человечески не загружаемым, или будет достаточно времени, чтобы перехватить загрузку и выбрать Ubuntu, когда я захочу?
Без Эрмосо
1
@Shasteriskt вы должны установить значение тайм-аута достаточно долго, чтобы нажать клавишу для выбора другой загрузочной ОС.
Таккат
Я установил тайм-аут на 0 и удерживал клавишу Shift, но меню по-прежнему не отображается. (Хорошо, что я установил его для загрузки в Ubuntu, где я могу редактировать настройки так, как они были.)
Bez Hermoso
Короче, нужное мне поведение не достижимо?
Без Эрмосо
@Shasteriskt: к сожалению, на некоторых машинах нажатие и удерживание левой клавиши SHIFT во время загрузки для вызова меню GRUB не работает (например, эта ошибка ). Вам может повезти, если работает ESC или SHIFT + ESC.
Таккат
4

Я пытался сделать то же самое, и я нашел большую помощь на форумах Ubuntu, особенно в этой теме.

Предполагая, что вы все сделали правильно /etc/default/grub, правильно установив GRUB_TIMEOUTи GRUB_HIDDEN_TIMEOUT(и я бы сказал, соответственно, 0 и 5) и даже GRUB_DEFAULTуказав образ по умолчанию для загрузки, вот процедура для правильной работы.

  1. Добавьте эти строки

    GRUB_FORCE_HIDDEN_MENU="true"
    export GRUB_FORCE_HIDDEN_MENU
    

    до конца /etc/default/grub

  2. Сделайте /etc/grub.d/30_os-proberрезервную копию вашего и перезаписать его с версией, найденной здесь

  3. Попробуй это! Для отображения меню нажмите SHIFTклавишу

Эта проблема связана с настройкой нескольких ОС, и редактирование сценария является одним из способов исправить это.

30_os-prober :

#! /bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"

. "${datarootdir}/grub/grub-mkconfig_lib"

found_other_os=

make_timeout () {

  if [ "x${found_other_os}" = "x" ] || [ "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; 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
}

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
  adjust_timeout
  exit 0
fi

if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
  # missing os-prober and/or linux-boot-prober
  adjust_timeout
  exit 0
fi

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
if [ -z "${OSPROBED}" ] ; then
  # empty os-prober output, nothing doing
  adjust_timeout
  exit 0
fi

osx_entry() {
    found_other_os=1
        cat << EOF
menuentry "${LONGNAME} (${2}-bit) (on ${DEVICE})" --class osx --class darwin --class os {
EOF
    save_default_entry | sed -e "s/^/\t/"
    prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    cat << EOF
        load_video
        set do_resume=0
        if [ /var/vm/sleepimage -nt10 / ]; then
           if xnu_resume /var/vm/sleepimage; then
             set do_resume=1
           fi
        fi
        if [ \$do_resume = 0 ]; then
           xnu_uuid ${OSXUUID} uuid
           if [ -f /Extra/DSDT.aml ]; then
              acpi -e /Extra/DSDT.aml
           fi
           $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid
           if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
              xnu_mkext /System/Library/Extensions.mkext
           else
              xnu_kextdir /System/Library/Extensions
           fi
           if [ -f /Extra/Extensions.mkext ]; then
              xnu_mkext /Extra/Extensions.mkext
           fi
           if [ -d /Extra/Extensions ]; then
              xnu_kextdir /Extra/Extensions
           fi
           if [ -f /Extra/devprop.bin ]; then
              xnu_devprop_load /Extra/devprop.bin
           fi
           if [ -f /Extra/splash.jpg ]; then
              insmod jpeg
              xnu_splash /Extra/splash.jpg
           fi
           if [ -f /Extra/splash.png ]; then
              insmod png
              xnu_splash /Extra/splash.png
           fi
           if [ -f /Extra/splash.tga ]; then
              insmod tga
              xnu_splash /Extra/splash.tga
           fi
        fi
}
EOF
}

wubi=

for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
  BOOT="`echo ${OS} | cut -d ':' -f 4`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  echo "Found ${LONGNAME} on ${DEVICE}" >&2

  case ${BOOT} in
    chain)

      case ${LONGNAME} in
    Windows*)
      if [ -z "$wubi" ]; then
        if [ -x /usr/share/lupin-support/grub-mkimage ] && \
           /usr/share/lupin-support/grub-mkimage --test; then
          wubi=yes
        else
          wubi=no
        fi
      fi
      if [ "$wubi" = yes ]; then
        echo "Skipping ${LONGNAME} on Wubi system" >&2
        continue
      fi
      ;;
      esac

      found_other_os=1
      cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" --class windows --class os {
EOF
      save_default_entry | sed -e "s/^/\t/"
      prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"

      case ${LONGNAME} in
    Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*)
    ;;
    *)
      cat << EOF
    drivemap -s (hd0) \${root}
EOF
    ;;
      esac

      cat <<EOF
    chainloader +1
}
EOF
    ;;
    linux)
      LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
      prepare_boot_cache=

      for LINUX in ${LINUXPROBED} ; do
        LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
        LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
        LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
        LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
        LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
        LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"

        if [ -z "${LLABEL}" ] ; then
          LLABEL="${LONGNAME}"
        fi

    if [ "${LROOT}" != "${LBOOT}" ]; then
      LKERNEL="${LKERNEL#/boot}"
      LINITRD="${LINITRD#/boot}"
    fi

    if [ -z "${prepare_boot_cache}" ]; then
      prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
      [ "${prepare_boot_cache}" ] || continue
    fi
    found_other_os=1
        cat << EOF
menuentry "${LLABEL} (on ${DEVICE})" --class gnu-linux --class gnu --class os {
EOF
    save_default_entry | sed -e "s/^/\t/"
    printf '%s\n' "${prepare_boot_cache}"
    cat <<  EOF
    linux ${LKERNEL} ${LPARAMS}
EOF
        if [ -n "${LINITRD}" ] ; then
          cat << EOF
    initrd ${LINITRD}
EOF
        fi
        cat << EOF
}
EOF
      done
    ;;
    macosx)
      OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
      osx_entry xnu_kernel 32
      osx_entry xnu_kernel64 64
    ;;
    hurd)
      found_other_os=1
      cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" --class hurd --class gnu --class os {
EOF
      save_default_entry | sed -e "s/^/\t/"
      prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
      grub_device="`${grub_probe} --device ${DEVICE} --target=drive`"
      mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`"
      grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`"
      case "${grub_fs}" in
    *fs)    hurd_fs="${grub_fs}" ;;
    *)  hurd_fs="${grub_fs}fs" ;;
      esac
      cat << EOF
    multiboot /boot/gnumach.gz root=device:${mach_device}
    module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
            --multiboot-command-line='\${kernel-command-line}' \\
            --host-priv-port='\${host-port}' \\
            --device-master-port='\${device-port}' \\
            --exec-server-task='\${exec-task}' -T typed '\${root}' \\
            '\$(task-create)' '\$(task-resume)'
    module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
}
EOF
    ;;
    *)
      echo "  ${LONGNAME} is not yet supported by grub-mkconfig." >&2
    ;;
  esac
done

adjust_timeout


    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
Dariopnc
источник
1
Я попробовал твой метод, но он не удался Ubuntu 14.04 LTS
Маюх Наир
1
Какие части файла я должен изменить? Мой файл 14.04 имеет много различий с этим файлом, поэтому я полагаю, что я должен делать только целевые изменения.
MakisH
@MayukhNair: у меня Ubuntu 14.04, и этот метод сработал. Я сделал следующее - 1. Установите GRUB_DEFAULT = 0 в / etc / default / grub 2. Установите GRUB_HIDDEN_TIMEOUT = 0 (в отличие от того, что сказал Dariopnc) 3. Сделайте резервную копию вашего /etc/grub.d/30_os-prober и скопируйте и вставьте вышеупомянутый 30-os_prober файл 4. sudo update-grub2
Pushpak Dagade
Примечание grub необходимо обновить sudo update-grubпосле изменения /etc/default/grubфайла
Wilf
3

На Ubuntu 16.04 я сделал следующие изменения. Конечно, для этого вам нужно быть привилегированным пользователем.

  1. Первое изменение в /etc/grub.d/30_os-proberфайле:

    • Откройте его sudo gedit /etc/grub.d/30_os-prober
    • Изменить quick_boot="1"наquick_boot="0"
    • сохранить файл
  2. После этого вы можете установить значения тайм-аута в /etc/default/grubноль или другое значение:

    • Откройте его sudo gedit /etc/default/grub
    • GRUB_HIDDEN_TIMEOUT=0и GRUB_TIMEOUT=0.
    • сохранить файл
  3. Последний шаг - обновить grub.

    • sudo update-grub

Изменения в первом файле вызваны тем, что по умолчанию установлено, что при обнаружении других ОС (например, Windows 10) значение времени ожидания всегда устанавливается равным 10 секундам и поэтому не может быть изменено с помощью /etc/default/grub. Это достигается с помощью функции с именем, adjust_timeoutкоторая спрашивает, quick_bootустановлена ли и присутствует ли другая ОС.

ATOA
источник
Наконец тошний зат vorks wiz 16.04!
JLTD
2

установить оптимизатор grub

sudo add-apt-repository ppa: danielrichter2007 / grub-customizer

sudo apt-get update
sudo apt-get install grub-customizer

Grub Customizer теперь будет отображаться в меню «Приложения»> «Системные инструменты».

Или вы можете открыть его из командной строки.

gksudo grub-customizer

изображение внутри для вариантов grub

введите описание изображения здесь

панкадж шарма
источник
3
Что это может сделать, что не может быть сделано путем редактирования etc/default/grub?
Без Эрмосо
3
@Shasteriskt: это может быть полезно не говорящим по-английски, людям, которые не знакомы с командной строкой, или людям, которые просто хотят использовать компьютер и не копаться в файлах конфигурации.
Flimm
Почему за это проголосовали? Кажется, это не решает никаких проблем; Я пробовал grub-customizer(не «оптимизатор»), и во время работы это не помогает мне скрыть меню GRUB, если не нажата клавиша Shift.
Николай Лещов
1

У меня была такая же проблема на одной загрузочной системе. Если GRUB_TIMEOUT был ненулевым, меню всегда будет отображаться независимо от GRUB_HIDDEN_TIMEOUT. Если GRUB_TIMEOUT был равен нулю, он не будет работать в течение GRUB_HIDDEN_TIMEOUT секунд, но ни SHIFT, ни ESC не отобразят меню.

Я исправил это, добавив условие else к статистике сна в конце Adjust_time () в 30_os-prober. Теперь, если оно не прервано, время ожидания равно нулю, и оно загружается без меню, но если оно прервано, я устанавливаю время ожидания равным 10.

Это на самом деле кажется обратным, поскольку сон должен возвращать 0 (false), если он не прерван, и 1 (true), если он есть, но, похоже, он работает для меня.

Марк Тьюсон
источник
0

Создание загрузочного меню GRUB2 в автоматическом режиме

По некоторым причинам редактирование GRUB_GFXMODE=640x480настроек в Grub Customizer обычно делает меню загрузки видимым:

  1. Установите grub-customizer, как описано выше, и обновите
  2. найти Grub Customizer в графическом интерфейсе (для меня это в System> Administration> ..., но для некоторых это фонд под Applications> System Tools> ..)
  3. Откройте Grub Customizer и выберите «Настройки»> «Дополнительно»
  4. Выберите GRUB_gfxmode (640X480) - если он уже выбран, отмените выбор, перезагрузите компьютер и выберите его снова.
  5. скрестите пальцы и перезагрузитесь!

Я понятия не имею, почему это сработало для меня, но это сработало на обоих моих компьютерах, так что, надеюсь, это сработает и для вас!

Canadonia
источник
0

Shasteriskt, одна из альтернатив решения 'SHIFT' - просто создать скрипт, который выполняет некоторые операции перемещения для вас. Я имею в виду создание файла, grub.bakкоторый называется точной копией вашего grub.cfgфайла, с той лишь разницей, что, например, set timeout=0строка изменяется на set timeout=10. Создайте сценарий оболочки, который выполняет переключение, позволяющее вам перезагрузиться в соответствии с вашими потребностями. Я создал эквивалентный скрипт на python, который отвечает этим требованиям, но, конечно, его нужно вызывать с помощью sudo. Я просто включил его в /usr/binмои настройки как символическую ссылку на сам скрипт. Примечание: я запускаю fluxbox на Arch, поэтому я не уверен, есть ли какие-либо расхождения между этим сценарием и Ubuntu, но я думаю, что изменений должно быть мало или вообще нет. Сценарий выглядит так:

#! /usr/bin/python
from shlex import split
from subprocess import call
from os import rename, chdir

chdir('/boot/grub/')
try:
    with open('grub.bak','r') as alternate:
        pass
    if raw_input('Auto-boot is set. Un-set?> ') == 'y':
        rename('grub.cfg','grub.back')
        rename('grub.bak','grub.cfg')

    if raw_input('Reboot system?> ') == 'y':
        call(split('shutdown -r now'))

except:
    if raw_input('Auto-boot is not set. Set?> ') == 'y':
        rename('grub.cfg','grub.bak')
        rename('grub.back','grub.cfg')

    if raw_input('Reboot system?> ') == 'y':
        call(split('shutdown -r now'))

Сценарий в основном просто определяет, есть ли у вас меню для загрузки или нет (автозагрузка или нет). Основываясь на полученных данных, он спрашивает вас, хотите ли вы включить или выключить его, а затем спрашивает, хотите ли вы перезагрузить компьютер. И наоборот, если вы хотите, чтобы он работал наоборот (то есть в Windows), и у вас есть Windows, настроенная для доступа к файлам в Linux, вы можете запустить тот же сценарий и в этой среде, если хотите. Надеюсь, это поможет.

eazar001
источник
0

Так что даже если вы установите GRUB_TIMEOUT на 0, если у вас есть GRUB_HIDDEN_TIMEOUT, 30_os-prober установит тайм-аут на 10, нравится вам это или нет. Другие решения здесь редактируют этот скрипт, но это может вызвать проблемы с обновлением, которые вам придется объединить, если GRUB обновлен.

Лучшее решение: напишите следующее /etc/grub.d/50_goddamnit(новый файл):

#!/bin/sh
echo "set timeout=0"

По сути, это будет выполнено последним и будет последней строкой в ​​/boot/grub/grub.conf, тем самым переопределяя все остальные глупые ошибки в конфигурации по умолчанию.

Fordi
источник