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

35

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

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

andrewsomething
источник
Если вы скопируете загрузочную строку Windows grub в верхнюю часть списка в меню grub, то на каждой загрузочной Windows будет загрузка по умолчанию. Если вы используете Ubuntu и ssh в нее, тогда. sudo reboot nowдолжен перезагрузить машину в первый пункт в списке grub.
karthick87
Конечно, но я редко загружаюсь в этот раздел Windows. Я не хочу делать это записью по умолчанию.
Andrewsomething

Ответы:

43
  • Вы должны сначала отредактировать свой 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.
karthick87
источник
Я могу заставить его работать один раз. После этого вы должны ввести пароли.
7
Как ты заставил личинку выглядеть так?
Мэнди
ответить на вопрос выше? как ты можешь получить личинку, выглядящую так извращенно?
Диего
5
Решение действительно отличное, но так как у меня 14 пунктов меню с вкладкой перед записями, заголовок с заголовком номера пункта меню работал лучше. Таким образом, вы можете изменить свой код с помощью #! / Bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reboot "$ WINDOWS_TITLE" sudo reboot
Philippe Gachoud
Филипп Гачу, пожалуйста, ответь! это единственный, который работает!
Хони
12

Для этого есть команда 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 
enzotib
источник
Нет причин для установки GRUB_DEFAULT=saved, это испортит вашу конфигурацию. Что копаться перезагрузится делает для записи next_entry=ENTRYв /boot/grub/grubenv. Это не так saved_entry=ENTRY. Впрочем, следующая перезагрузка будет в порядке, пишет grub next_entry. Следующие загрузки могут завершиться неудачей, если запись не сохранена, как saved-entry=ENTRYв grubenv.
mook765
4

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

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

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

К. Хендрик
источник
3

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

даго
источник
3
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Марко Чеппи
2

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

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

Микки Браун
источник
-1

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

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

Ролан Кон
источник
1
Конфигурационный файл для grub-legacy - это menu.lst, а не grub.conf. Для grub2 это grub.cfg, но ваша вторая команда предназначена только для grub-legacy.
Псуси
-4

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

psusi
источник
2
Не советуйте изменять boot.cfg, это будет восстановлено в каждом ручном или автоматическом update-grub. Пользователь должен изменить /etc/default/grub, вместо этого.
энзотиб
1
@enzotib, так как изменение предназначено только для следующей загрузки, нет причин делать это таким образом.
Псуси
2
вы забываете, что неправильное редактирование этого файла может привести к невозможности загрузки системы
enzotib
1
@enzotib, не совсем; одна из замечательных особенностей grub2 заключается в том, что вы всегда можете восстановить вручную при появлении подсказки. Опасность испортить другие части файла также является ложным аргументом, и, если вы ошиблись в строке по умолчанию, самое худшее, что происходит, - это то, что по умолчанию используется первая запись.
Псуси