Как настроить grub (или другой загрузчик) на использование клавиш-модификаторов?

Как настроить grub (или другой загрузчик) на использование клавиш-модификаторов?

Для ясности, я хочу сделать двойную загрузку Windows и дистрибутива Linux. Я уже знаю, как настроить свой ноутбук для этого. Однако я не хочу, чтобы меню grub отображалось при загрузке. Я бы хотел, чтобы он автоматически загружал Windows по умолчанию, если только не нажата клавиша-модификатор при загрузке (например, ctrl). Если нажата клавиша-модификатор, загрузится дистрибутив Linux.

Это возможно?

решение1

Эта тема на AskUbuntuрешает почти идентичную проблему. По-видимому, вы можете скрыть диалоговое окно grub и вызвать его нажатием shift, а в противном случае позволить операционной системе по умолчанию загрузиться после времени, которое вы определили с помощью GRUB_TIMEOUTзаписи в grub.cfg.

GRUB_DEFAULT= 2 #depends on which entry Windows is
hiddenmenu #this hides the menu
GRUB_TIMEOUT=3 #example for 3 seconds

решение2

Как вы пишете в своем комментарии, это для новой установки, поэтому я предполагаю, что она будет поставляться сgrub2.

На самом деле, всегда загружать Windows с grub1 было сложно, по моему опыту. Добавление нового ядра в список версий ядер для выбора (например, после обновления ядра linux) изменяло позицию записи Windows. Это приводило к жестко закодированной точке GRUB_DEFAULTна что-то другое (чаще всего тест памяти, вставленный grub installre между списком ядер linux и записью windows в списке). С grub1 я решил эту проблему, имея скрипт, который очищал все ядра, кроме последних 3, тем самым сохраняя позицию Windows фиксированной.

Поэтому обязательно используйте grub2, так как он упрощает задачу благодаря двум функциям:

  • grub2 позволяетподменю, чтобы значение GRUB_DEFAULTне стало недействительным после обновления ядра (которое помещает старые ядра в подменю)
  • grub2 генерирует пункты меню черезскрипты/etc/grub.dUbuntu)

Я рекомендую внести изменения вскриптычтобы заставить Windows быть первым вариантом в меню: в /etc/grub.dпереименовать 30_os-prober(что генерирует запись Windows) во что-то вроде 09_os-prober. Этот скрипт затем выполняется до 10_linuxтого, как скрипты выполняются отсортированными по имени файла, и запись Windows всегда будет сверху. И сверху — это значение по умолчанию, если не указано ничего другого.

Запустите update-grub, чтобы создать меню /boot/grub, которое будет заботиться о постоянной загрузке Windows.

Что касается отсутствия меню, которое не будет отображаться, вы хотите использоватьGRUB_HIDDEN_TIMEOUTи некоторые другие в /etc/grub/default:

# wait 5 seconds for a key-press before showing the menu
GRUB_HIDDEN_TIMEOUT=5
# do not show the countdown counter
GRUB_HIDDEN_TIMEOUT_QUIET=true
# after hidden timeout is done wait 0 seconds -> boot without menu
GRUB_TIMEOUT=0

Приведенная выше комбинация ждет 5 секунд без вывода данных (обратный отсчет) или меню, а затем загружает первую запись. (Опять же: запустите update-grubпосле ее изменения).

решение3

В Grub2:

set timeout=0
if keystatus --ctrl; then
    set timeout=15
fi

Если нажать клавишу ctrl, меню будет отображаться в течение 15 секунд, прежде чем загрузится стандартная запись; если клавишу ctrl не нажать, стандартная запись будет загружена сразу, без какого-либо меню.

Подробности см. info grubна keystatus. Есть некоторые оговорки, может не работать на всех платформах. В качестве альтернативы --ctrl, также поддерживает --alt и --shift, так что вы можете попробовать их, если --ctrl не сработает.

В качестве альтернативы вы можете поместить Grub на USB-флешку. Таким образом, Windows будет загружаться напрямую, когда он не подключен. Вы также можете поместить несколько Live CD и такие вещи, как memtest или freedos, на USB-флешку. Очень полезная вещь, которую можно иметь в кошельке :)

Связанный контент