Как перезагрузиться в 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

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

9 ответов

Решение
  • Вы должны сначала отредактировать свой grub.

    sudo gedit /etc/default/grub
    
  • Найдите строку GRUB_DEFAULT=0 и измените ее на GRUB_DEFAULT = сохранено альтернативный текст

  • Обновите ваш 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 - это позиция меню ОС, которую вы хотите перезапустить из меню 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

С этого момента при каждом загрузчике запускается последняя использованная запись.

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

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 

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

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

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

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

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

https://gist.github.com/weezah/73ca3e69a3f5a83c3616aeb373d20efe

вы можете использовать этот скрипт! Ваше здоровье

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

Я не уверен, будет ли это работать на 100% и в Ubuntu, но однажды я сделал эту работу на машине Centos

в основном, вы должны указать grub, какой id # из grub.conf должен запускаться следующим. Идентификатор # можно узнать по

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, чтобы сообщить, что следует загрузить при следующей загрузке, и перезагрузит ваш компьютер.

для графического интерфейса вы можете, например, добавить ярлык на рабочий стол, чтобы добиться этого.

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

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