%20%D0%BD%D0%B0%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2%3F.png)
Для ясности, я хочу сделать двойную загрузку 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.d
Ubuntu)
Я рекомендую внести изменения вскриптычтобы заставить 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-флешку. Очень полезная вещь, которую можно иметь в кошельке :)