Как перезагрузиться в Windows из Ubuntu?

Я ищу способ перезагрузки в 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

Возвращает ожидаемое значение, но при перезагрузка первый пункт меню все еще выделен. Есть идеи, почему это не работает, или предложения для других решений?

36
задан 19 December 2010 в 23:54

8 ответов

  • Сначала нужно отредактировать grub.

    sudo gedit /etc/default/grub
    
  • Ищите строку GRUB_DEFAULT=0 и измените ее на GRUB_DEFAULT=saved alt text

  • Обновите 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, как первая запись)

Пример:

  • Если это ваше меню grub и если вы хотите загрузиться в окна, то вы должны указать значение X как 5.
  • sudo grub-reboot 5

    alt text

  • Вы также можете создать пусковую установку для вышеуказанной команды, так что двойной щелчок по пусковой установке перезагрузится в windows.
43
ответ дан 19 December 2010 в 23:54

Для этого есть команда 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 
12
ответ дан 19 December 2010 в 23:54

Насколько я понял, это будет не совсем то, что вы хотите, но я думаю, что это довольно близко. Просто перейдите по ссылке webupdate article.

3
ответ дан 19 December 2010 в 23:54

Думаю, я нашел еще более приятный способ для людей, которые хотят сделать то же самое, находясь локально в своем компьютере без ssh.

Решение по перезагрузке в конкретную систему, выбранную через единую пусковую установку, было только что размещено на webupd8. Смотрите http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Я знаю, что это не совсем то, о чем идет речь, но если у кого-то есть похожий вопрос позже, это может быть полезно.

4
ответ дан 19 December 2010 в 23:54

Просто отредактируйте /boot/grub/grub.cfg и измените запись по умолчанию, чтобы она указывала на запись, которую вы хотите загрузить. Значение может быть либо порядковым номером записи (начиная с нуля для первой), либо вы можете поместить полное название нужной записи в кавычки.

-4
ответ дан 19 December 2010 в 23:54

Не уверен, что это на 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 вы можете, например, добавить иконку ярлыка на ваш рабочий стол, чтобы достичь этого.

-1
ответ дан 19 December 2010 в 23:54

Так что для меня лучше всего было создать следующий скрипт с помощью команды 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
2
ответ дан 19 December 2010 в 23:54

Информация обо всех была полезна для меня, но в конце концов я все еще не мог изменить настройки grub по умолчанию и перезапустить их одним щелчком мыши. Повозившись в течение 2 часов, я обнаружил эту программу, которая является той же самой, что мы все пытаемся создать, и через 5 минут я перезагружаюсь в Windows. Спасибо всем, вот ссылка на читера для тех, кто тоже сдаётся. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html

0
ответ дан 19 December 2010 в 23:54

Другие вопросы по тегам:

Похожие вопросы: