Я ищу способ перезагрузки в Windows из Ubuntu в системе с двойной загрузкой 10.10 / Vista. Конкретный вариант использования заключается в том, что я хотел бы иметь возможность подключиться по ssh к моему работающему экземпляру Ubuntu и выполнить команду, которая инициирует перезагрузку непосредственно в Windows.
Я нашел многообещающее сообщение в блоге , но предлагаемый сценарий не работает:
#!/bin/bash
WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-number Windows`
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
sudo grub-reboot $MENU_NUMBER
sudo reboot
man grub-reboot
не сильно помогает, но, похоже, ведет меня в правильном направлении:
устанавливает загрузочную запись по умолчанию для GRUB, только для следующей загрузки
blockquote>WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-number Windows` MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 )) echo $MENU_NUMBER
Возвращает ожидаемое значение, но при перезагрузка первый пункт меню все еще выделен. Есть идеи, почему это не работает, или предложения для других решений?
Сначала нужно отредактировать grub.
sudo gedit /etc/default/grub
Ищите строку GRUB_DEFAULT=0 и измените ее на GRUB_DEFAULT=saved
Обновите grub следующей командой.
sudo update-grub
Теперь создайте файл сценария,
sudo gedit switch-to-windows.sh
Затем добавь эти строки.
#!/bin/bash
WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-номер Windows`.
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//" ` - 1 ))
sudo grub-reboot $MENU_NUMBER
перезагрузка с нуля
Сделайте скрипт исполняемым.
sudo chmod +x switch-to-windows.sh
И теперь вы можете запустить этот скрипт из терминала для перезагрузки в windows.
./switch-to-windows.sh
Или вы можете выполнить следующую команду в терминале
sudo grub-reboot X.
Где X - позиция меню, в которой находится операционная система, которую вы хотите перезапустить из меню GRUB (начиная с 0, как первая запись)
Пример:
sudo grub-reboot 5
Для этого есть команда grub-rebootgrub-reboot
.
Похоже, что она работает только в том случае, если у вас настроен grub на начало работы с последней сохраненной записью. Так что если вы ещё этого не сделали, измените /etc/default/grub
и установите
GRUB_DEFAULT=saved
, затем обновите файл конфигурации grub:
sudo update-grub
С этого момента, на каждом загрузочном grub будет запускаться последняя использованная запись.
Теперь, если вы хотите задать заранее, какой должна быть система для загрузки в следующий раз, используйте
sudo grub-reboot ENTRY
, где ENTRY
может быть числом относительно пункта меню (пронумерованным, начиная с 0), или точным заголовком пункта меню, например
sudo grub-reboot "Microsoft Windows XP Professional (on /dev/sda1)"
Эта команда может быть легко доступна как пусковая установка
#!/usr/bin/env xdg-open
#
# save as ~/Desktop/reboot-into-windows.desktop
#
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=sh -c 'gksu "grub-reboot 2" && gnome-session-save --shutdown-dialog'
Name=Reboot into Windows
Icon=gnome-panel-launcher
, но я не знаю, как она может быть интегрирована в системное меню.
Вы можете получить доступное заглавие пункта меню с помощью
sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg
Насколько я понял, это будет не совсем то, что вы хотите, но я думаю, что это довольно близко. Просто перейдите по ссылке webupdate article.
Думаю, я нашел еще более приятный способ для людей, которые хотят сделать то же самое, находясь локально в своем компьютере без ssh.
Решение по перезагрузке в конкретную систему, выбранную через единую пусковую установку, было только что размещено на webupd8. Смотрите http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html
Я знаю, что это не совсем то, о чем идет речь, но если у кого-то есть похожий вопрос позже, это может быть полезно.
Просто отредактируйте /boot/grub/grub.cfg
и измените запись по умолчанию, чтобы она указывала на запись, которую вы хотите загрузить. Значение может быть либо порядковым номером записи (начиная с нуля для первой), либо вы можете поместить полное название нужной записи в кавычки.
Не уверен, что это на 100% сработает и в убунту, но я однажды сделал эту работу на центробежной машине
, в основном, вам придется сказать grub.conf, какой id # из grub.conf должен запуститься следующим. ID # можно узнать по
echo `sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1
так что в моем случае это будет, например, вывод "4-1", так как четвертая запись в моем grub.conf содержит текст "Windows". (Замените это на фактическое имя записи (также частично), которое вы хотите использовать. Тогда вы можете скормить это в grub как:
echo "savedefault --stage2=/boot/grub/stage2 --default=4-1 --once" | sudo /sbin/grub
и при следующей перезагрузке он должен автоматически загрузить запись, которую вы сказали ему.
это все может быть объединено в скрипт типа:
#!/bin/sh
let NEWBOOT=`sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1
echo Booting $NEWBOOT - `sudo grep ^title.\*Windows /boot/grub/grub.conf`
echo "savedefault --stage2=/boot/grub/stage2 --default=$NEWBOOT --once" | sudo /sbin/grub
sudo reboot
скрипт автоматически определит, какой элемент из вашего grub.conf соответствует тексту "Windows", будет кормить это в grub, чтобы сказать, что должно быть загружено при следующей загрузке и перезагрузит ваш компьютер
для gui вы можете, например, добавить иконку ярлыка на ваш рабочий стол, чтобы достичь этого.
Так что для меня лучше всего было создать следующий скрипт с помощью команды grub-reboot
#!/bin/bash
WINDOWS_TITLE=$(grep -i 'windows' /boot/grub/grub.cfg|grep "^[^#;]"|cut -d"'" -f2)
sudo grub-reboot "$WINDOWS_TITLE"
echo "Your computer will reboot on ${WINDOWS_TITLE} in 3 seconds, press Ctrl+C if you want to abord it"
sleep 3 && sudo reboot
Информация обо всех была полезна для меня, но в конце концов я все еще не мог изменить настройки grub по умолчанию и перезапустить их одним щелчком мыши. Повозившись в течение 2 часов, я обнаружил эту программу, которая является той же самой, что мы все пытаемся создать, и через 5 минут я перезагружаюсь в Windows. Спасибо всем, вот ссылка на читера для тех, кто тоже сдаётся. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html