Вопрос или проблема
Я хочу спросить, можно ли это сделать с помощью grub. У меня есть трудности с тем, чтобы найти способ установить тайм-аут grub на 0 или скрыть тайм-аут только один раз во время загрузки, а затем вернуть к значению по умолчанию. Я хочу добиться этого с помощью скрипта, который я запускаю перед перезагрузкой.
На данный момент у меня есть следующее: когда я хочу перезагрузиться в Windows после использования Linux, у меня есть скрипт, который установит меню grub на выбор загрузчика Windows один раз при перезагрузке, а затем перезапустится. Все последующие загрузки будут по умолчанию выбрано первое (Linux). Скрипт очень прост:
sudo grub-reboot 3 && reboot
Проблема заключается в ожидании тайм-аута меню загрузки, потому что я знаю, что хочу загрузиться в Windows. Я хочу нечто похожее на grub-reboot
, но для тайм-аута или скрытия выбора загрузки и прямой загрузки в Windows только один раз. Это больше улучшение качества жизни, чем что-либо еще.
Я открыт для более хакерских решений, например, скрипт перезагрузки Windows обновляет тайм-аут конфигурации grub до 0, а затем, когда я загружаю grub, он возвращает тайм-аут к значению по умолчанию, как хук-скрипт, который вызывает после загрузки grub. Надеюсь, это будет стабильное решение с низким риском поломки чего-либо.
Любая помощь будет очень полезна.
Ответ или решение
Для достижения вашей цели — перезагрузки в Windows из Linux без ожидания таймаута в меню GRUB — существует несколько подходов. Вы можете настроить GRUB так, чтобы он пропускал таймаут и сразу загружал Windows один раз. Вот как это можно сделать:
Способ 1: Использование grub-reboot
и временной настройки таймаута
-
Установите значение таймаута в 0 перед перезагрузкой:
Вы можете временно изменить значение таймаута в конфигурационном файле GRUB в скрипте. Однако GRUB сам не предлагает опции для динамического изменения таймаута на лету. Мы можем временно установить таймаут в 0, а затем вернуться к значению по умолчанию при следующем запуске системы.Создайте скрипт, который будет делать следующее:
#!/bin/bash # Измените номер записи Windows в соответствии с вашим конфигурационным файлом WINDOWS_ENTRY=3 # Временное значение таймаута (0) sudo grub-set-boot-timeout 0 # Установите в качестве следующей загрузки Windows sudo grub-reboot $WINDOWS_ENTRY # Перезагрузите систему reboot
Заметка:
grub-set-boot-timeout
— это не стандартная команда. Вы можете использовать встроенные команды или изменить файл конфигурации GRUB напрямую и создать резервные копии. -
Создайте резервную копию конфигурации GRUB:
Это необходимо для того, чтобы возвращать таймаут к исходному значению. Вы можете сделать что-то вроде следующего:sudo cp /etc/default/grub /etc/default/grub.bak
-
Восстановите значение таймаута после загрузки Windows:
После того как вы загрузитесь в Windows, будет необходимо восстановить конфигурацию GRUB. Один из способов реализовать это — создать скрипт, который будет запускаться при загрузке Linux. Идея состоит в том, чтобы проверять систему на загрузку Windows и возвращать таймаут, если это так.
Способ 2: Использование GRUB-сценариев
В некоторых конфигурациях GRUB может поддерживать пользовательские сценарии, которые позволяют выполнять действия при загрузке. Создайте файл /etc/grub.d/99_custom_time
:
sudo nano /etc/grub.d/99_custom_time
Добавьте следующее содержимое:
#!/bin/sh
exec tail -n +3 $0
set timeout=0
# Вы можете добавить логику для восстановления значения по умолчанию
Не забудьте сделать файл исполняемым:
sudo chmod +x /etc/grub.d/99_custom_time
Способ 3: Стандартный метод через grub.cfg
Если вышеописанные методы слишком сложны, можно просто редактировать файл /etc/default/grub
, чтобы установить таймаут в 0
, а затем каждый раз после изменения возвращать его к желаемому значению. Однако это требует ручного вмешательства.
Заключение
Каждый из этих методов имеет свои плюсы и минусы, и выбор подхода зависит от того, насколько вы хотите автоматизировать процесс и как часто вы будете использовать Linux и Windows. Прежде чем применить изменения, рекомендуется создавать резервные копии критически важных конфигурационных файлов и быть готовым к восстановлению системы, если что-то пойдет не так.