Вопрос или проблема
Я ищу способ перезагрузиться в 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,
только для следующей загрузки
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-number Windows` MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 )) sudo grub-reboot $MENU_NUMBER sudo reboot
-
Сделайте скрипт исполняемым.
sudo chmod +x switch-to-windows.sh
-
Теперь вы можете запустить этот скрипт из терминала, чтобы перезагрузиться в Windows.
./switch-to-windows.sh
-
Или вы можете выполнить следующую команду в вашем терминале
sudo grub-reboot X
-
Где X — это позиция menuentry операционной системы, в которую вы хотите перезагрузиться из меню GRUB (начиная с 0 как первого пункта)
Например:
- Если это ваше меню grub и если вы хотите загрузиться в Windows, вы должны указать значение X как 5.
-
sudo grub-reboot 5
- Вы также можете создать ярлык для вышеуказанной команды, чтобы двойной клик по ярлыку перезагрузил в Windows.
Существует команда grub, чтобы сделать это, это grub-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
#
# сохранить как ~/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=Перезагрузить в Windows
Icon=gnome-panel-launcher
но я не знаю, как это можно интегрировать в системное меню.
Вы можете получить доступный заголовок пункта меню с помощью
sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg
Я думаю, что нашел еще более удобный способ для людей, которые хотят сделать то же самое, находясь локально на своем ПК без ssh.
Решение для перезагрузки в определенную систему, выбранную через ярлык unity, только что было опубликовано на webupd8.
Смотрите http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html
Я знаю, что это не совсем то, о чем идет речь в вопросе, но на случай, если кто-то позже задаст похожий вопрос, это может быть полезно.
Поэтому для меня лучше всего было создать следующий скрипт с командой grub-reboot
#!/bin/bash
WINDOWS_TITLE=$(grep -i 'windows' /boot/grub/grub.cfg|grep "^[^#;]"|cut -d"'" -f2)
sudo grub-reboot "$WINDOWS_TITLE"
echo "Ваш компьютер будет перезагружен в ${WINDOWS_TITLE} через 3 секунды, нажмите Ctrl+C, чтобы прервать"
sleep 3 && sudo reboot
https://gist.github.com/weezah/73ca3e69a3f5a83c3616aeb373d20efe
вы можете использовать этот скрипт! Ура
Я не уверен, сработает ли это на 100% и в ubuntu, но однажды я заставил это работать на машине centos
по сути, вам нужно будет сказать grub, какой 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 Загружается $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, чтобы указать, что должно быть загружено при следующей загрузке, и
перезагрузит ваш ПК.
для графического интерфейса вы можете, например, добавить иконку ярлыка на рабочий стол для достижения этого.
Просто отредактируйте /boot/grub/grub.cfg
и измените пункт по умолчанию, чтобы указать на тот пункт, который вы хотите загрузить. Значение может быть либо порядковым номером пункта (начиная с нуля для первого), либо вы можете поместить полный заголовок пункта, который вы хотите, в кавычки.
Ответ или решение
Пошаговое руководство: Перезапуск в Windows из Ubuntu
Переключение между операционными системами в конфигурации двойной загрузки может быть непростой задачей. Ваша цель — перезагрузить систему с Ubuntu в Windows с помощью команды SSH. В этом руководстве мы подробно рассмотрим, как это сделать, используя инструмент GRUB.
1. Подготовка конфигурации GRUB
Для того чтобы ваш метод переключения работал, необходимо убедиться, что конфигурация GRUB настроена на сохранение последнего выбора при загрузке.
-
Откройте файл конфигурации GRUB:
sudo gedit /etc/default/grub
-
Измените строку:
Найдите строку
GRUB_DEFAULT=0
и измените её на:GRUB_DEFAULT=saved
-
Обновите настройки GRUB:
После изменения сохраните файл и обновите конфигурацию GRUB:
sudo update-grub
2. Создание скрипта для перезагрузки в Windows
Теперь, когда конфигурация GRUB настроена, создадим скрипт, который будет перезагружать ваш компьютер в Windows.
-
Создайте новый скрипт:
sudo gedit /usr/local/bin/switch-to-windows.sh
-
Добавьте следующий код в скрипт:
#!/bin/bash # Получаем номер записи Windows из конфигурации GRUB WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-number Windows` MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 )) # Устанавливаем GRUB для загрузки следующего раза в Windows sudo grub-reboot $MENU_NUMBER echo "Вы перезагрузитесь в Windows через 3 секунды. Нажмите Ctrl+C, чтобы отменить." sleep 3 # Перезагрузка системы sudo reboot
-
Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/switch-to-windows.sh
Теперь вы можете выполнять этот скрипт из терминала или через SSH, чтобы перезагрузиться в Windows.
3. Применение скрипта через SSH
Теперь, когда скрипт готов, вы можете SSH в вашу Ubuntu систему и просто выполнить:
ssh user@your-ubuntu-ip
sudo /usr/local/bin/switch-to-windows.sh
Здесь user
— это ваше имя пользователя, а your-ubuntu-ip
— IP-адрес вашей Ubuntu системы.
4. Параметры GRUB для ручного использования
Кроме создания скрипта, вы можете вручную использовать команду grub-reboot
для перезагрузки в Windows:
-
Проверьте номер записи Windows:
Вы можете узнать номер, выполнив следующий команды:
grep menuentry /boot/grub/grub.cfg
Это вернёт список записей. Запомните номер, соответствующий вашей записи Windows (нумерация начинается с 0).
-
Использование команды
grub-reboot
:Чтобы перезагрузиться в Windows использовав номер записи, просто выполните:
sudo grub-reboot <номер> sudo reboot
Заключение
Теперь вы знаете, как перезагрузить машину из Ubuntu в Windows с помощью скрипта и GRUB. Это решение поможет вам быстро переключаться между операционными системами, экономя время и усилия. Не забывайте обновлять систему и проверять корректность работы GRUB после внесения изменений.