
У меня установлена двойная загрузка Linux/windows, и я часто переключаюсь с одной на другую. Я подумал, что если бы я мог добавить пункт меню в одно из меню, чтобы перезагружать напрямую в windows, не останавливаясь на приглашении GRUB.
Я виделэтот вопросна форуме это именно то, что мне нужно, но это касается lilo, а это не мой случай.
Я придумал решение, которое бы изменило запись по умолчанию в меню GRUB и затем перезагрузило систему, но у него есть некоторые недостатки, и мне стало интересно, есть ли более чистая альтернатива.
(Кроме того, мне было бы интересно найти решение для загрузки из Windows напрямую в Linux, но это может оказаться сложнее и не относится к данной теме. В любом случае, пока у меня есть один способ, другой способ можно настроить по умолчанию.
ОБНОВЛЯТЬКажется, кто-то спросиланалогичный вопрос, и если это предлагаемые ответы, я могу также отредактировать /boot/grub/grubenv
и сделать grub-reboot
это . )grub-set-default
grub-editenv
Заранее спасибо за любые советы.
ОБНОВЛЯТЬ:
Это моя версия GRUB:(GRUB) 1.99-12ubuntu5-1linuxmint1
Я попробовал запустить grubonce
, команда не найдена. И поиск в репозиториях ничего не дал. У меня Linux Mint, так что это может быть оно...
Видя man grub-reboot
, кажется, что он делает то, что я хочу, как и grubonce
делает. Он также доступен везде (по крайней мере, для меня, я думаю, что он является частью пакета grub). Я увидел две связанные команды: grub-editenv
и grub-set-default
.
Я обнаружил, что после запуска sudo grub-set-default 4
, при запуске grub-editenv list
вы получаете что-то похожее на:
saved_entry=4
И при запуске grub-reboot 4
вы получите что-то вроде:
prev_saved_entry=0
saved_entry=4
Это означает, что оба варианта делают одно и то же (один временный, другой нет).
Удивительно, но когда я попробовал:
sudo grub-reboot 4
sudo reboot now
Это не сработало, как будто я ничего не сделал, мне просто показали меню, как обычно, и выбрали первую запись, сказав, что она загрузится через 10 секунд.
Я попробовал еще раз, я думал, что, возможно, я ввел неправильную запись (она же с нуля, верно?). В этот раз он просто завис на экране меню, и мне пришлось сделать жесткий сброс ПК, чтобы загрузиться.
Если кто-нибудь может попробовать это, просто чтобы проверить, только ли я такой, я буду признателен. (Мята доставляет мне много хлопот, и это был бы хороший повод что-то изменить :P).
Читая код /boot/grub/grub.cfg
, кажется, что это правильный путь, но по моим наблюдениям, он просто игнорирует эти настройки...
решение1
- Отредактируйте /etc/default/grub и замените
GRUB_DEFAULT=0
наGRUB_DEFAULT=saved
sudo update-grub
Ваша команда будет следующей:
sudo grub-reboot "$(grep -i windows /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot
АсимпатичныйФункция для вашего
~/.bashrc
или.bash_aliases
может выглядеть так:# Reboot directly to Windows # Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu reboot_to_windows () { windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2) sudo grub-reboot "$windows_title" && sudo reboot } alias reboot-to-windows='reboot_to_windows'
Примечания редактора:
Я заменилустаревшие обратные кавычки(
``
) по$(...)
конструкции.В общем, я переписал его, чтобы он соответствовал текущему моменту.POSIX (вики)стандартов, и по ходу дела внес еще несколько незначительных изменений.
Для полноты картины я оставил приведенную ниже функцию нетронутой для сравнения.
В случае, если ваш grub.conf содержит несколько строк для Windows, следующие функции будут заботиться только о строках, начинающихся с, menuentry
и выбирать только первую из них, относящуюся к Windows:
function my_reboot_to_windows {
WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
sudo grub-reboot "$WINDOWS_TITLE"
sudo reboot
}
решение2
Для того чтобы grub-reboot
команда работала, необходимо внести несколько обязательных изменений в конфигурацию:
- Запись по умолчанию для grub должна быть установлена на
saved
. Одним из возможных мест для этого являетсяGRUB_DEFAULT=
строка в/etc/default/grub
- Используйте
grub-set-default
для установки записи по умолчанию, которую вы обычно используете. - Обновите конфигурацию grub (например
update-grub
, ).
Это должно позаботиться о первоначальной настройке. В будущем просто сделайте это grub-reboot <entry>
для одноразовой загрузки <entry>
.
решение3
Я написал инструмент, который позволяет это сделать для Ubuntu 20.04/22.04: https://github.com/mendhak/grub-reboot-picker
Возможно, это сработает на предыдущих версиях Ubuntu, но я никогда не проверял.
решение4
Согласен с @jw013. И вы также можете передать плитку меню в grub-reboot (включая заголовок родительского меню). Например:
$ sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-26-generic"
$ sudo reboot
Где «Дополнительные параметры для Ubuntu» — это родительское меню, «Ubuntu, с Linux 4.13.0-26-generic» — это подменю.