Я постоянно работаю в линуксе. Но бывают случаи, когда нужно перезагрузиться в винду. Просто так это сделать трудно, нужно подождать когда выскочит Grub и выбрать нужный пункт. Поэтому, сходить поесть, посрать или покурить во время ребута вам не получится, сидите перед монитором. Попробуем облегчить страдания и сделать хоть что-нибудь.
Чего делать то?
Ну, первая мысль — менять флаг выбора пункта по умолчанию в самом grub. Однако, grub у нас на разделе с линем, а значит винда не сможет изменить конфиг файл. Ладно, вынесем grub на отдельный раздел с fat32. Я выделил 150 МБ, однако и 100 я думаю хватить должно.
Всё, теперь ставим туда grub. Я делал это из линукса, изобретать велосипед здесь смысла нету.
У меня раздел /dev/sda6, меняйте на свой.
sudo mkdir /mnt/GRUB
sudo mount /dev/sda6 /mnt/GRUB
sudo grub-install --force --no-floppy --root-directory=/mnt/GRUB /dev/sda6
Итак, grub установили, давайте создадим grub.cfg (я провтыкал, и не запомнил, может он по дефолту уже при установке создается).
sudo grub-mkconfig -o /mnt/GRUB/boot/grub/grub.cfg
Окей, не хватает узнать порядок пунктов в меню. Выполняем и считаем:
grep menuentry /mnt/GRUB/boot/grub/grub.cfg
Отсчет идет с 0, кстати. Я выбрал два пункта, один с linux (0), второй с windows (4)
Linux
Пошли дальше. Разберемся с ребутом линукса. Подойдет такой bash скрипт
#!/bin/bash
# Путь к разделу с grub
disk=/dev/sda6
# Пункт с linux
linmenu=0
# Пункт с windows
winmenu=4
mount $disk /mnt/GRUB
sed "s/set default="${linmenu}"/set default="${winmenu}"/g" -i /mnt/GRUB/boot/grub/grub.cfg
reboot
Изменяйте раздел и пункты с линьвином.
Для перезапуска я создал кнопку gksu sh ./путь-к-скрипту
А то кто это вам разрешит монтировать и ребутить без рут прав.
В данном скрипте просто заменяется set default на нужное.
Уже можно даже попробовать перезагрузится в винду через скрипт.
Windows
В винде, не мудрствуя лукаво, я поставил sed, только перекинул файлы из bin в system32.
Получился такой .bat файл:
:: Путь к grub.cfg
set grubfile=e:bootgrubgrub.cfg
:: Пункт с linux
set linmenu=0
:: Пункт с windows
set winmenu=4
sed -e "s/set default="%winmenu%"/set default="%linmenu%"/g" %grubfile% > %grubfile%.tmp
del %grubfile%
ren %grubfile%.tmp grub.cfg
shutdown -f -t 0 -r
Меняйте пути и пункты.
Вместо выводов
Да и всё, вроде. Имеем, кнопку на линуксе, которая перезагружает комп в винду автоматом и наоборот. Можно за время выключения одной и включения другой ОС сходить нормально посрать.
Грамотные люди меня поправят, где я не прав и где можно чего изменить. Умею как могу.
Экспериментируйте.
Автор: Squier