Як перезавантажити 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

Це повертає очікуване значення, але при перезавантаженні перший пункт меню все ще виділяється. Будь-які ідеї, чому це не працює, чи пропозиції щодо інших рішень?


Якщо ви скопіюєте рядок завантаження Windows grub у верхню частину списку в меню grub, тоді для кожного завантажувального вікна буде завантажуватися за замовчуванням .. якщо ви перебуваєте в ubuntu та ssh в нього потім. sudo reboot nowслід перезавантажити машину до першого пункту у списку grub.
karthick87

Звичайно, але я рідко завантажуюся в цей розділ Windows. Я не хочу робити це за замовчуванням.
andrewsomething

Відповіді:


43
  • Ви повинні спочатку відредагувати свою грубку.

    sudo gedit /etc/default/grub
    
  • Шукайте рядок GRUB_DEFAULT = 0 та змініть його на GRUB_DEFAULT = збережено alt текст

  • Оновіть свою грубку за допомогою наступної команди.

    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 як перший запис)

Наприклад:

  • Якщо це меню вашої груби, і якщо ви хочете завантажуватися у Windows, вам слід вказати значення X як 5.
  • sudo grub-reboot 5

    alt текст

  • Ви також можете створити панель запуску для вищевказаної команди, так що подвійне клацання на панелі запуску перезавантажиться у вікна.

Я можу змусити його працювати один раз. Після цього потрібно ввести паролі.

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

Філіппе Гачуд, будь ласка, зробіть свою відповідь! це єдиний, хто працює!
honi

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 

Немає причини встановлювати GRUB_DEFAULT=saved, це зіпсує вашу конфігурацію. Що копатися перезавантажиться робить для запису next_entry=ENTRYв /boot/grub/grubenv. Це не так saved_entry=ENTRY. Наступне перезавантаження буде добре, хоча гріб читається next_entry. Наступні черевики можуть вийти з ладу, якщо жоден запис не буде збережено, як saved-entry=ENTRYу grubenv.
mook765

4

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

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

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


3

Наскільки я зрозумів, це не буде саме те, що ви хочете, але, мабуть, досить близько. Просто перейдіть за статтею веб- оновлення посилання .


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

Інформація для кожного була корисною для мене, але врешті-решт я все-таки не зміг змінити типовий режим, а потім перезапуститись одним кліком. Після того, як за 2 години роздумую, я відкриваю цю програму, саме таку річ, яку ми всі намагаємося створити, і за 5 хвилин я перезавантажуюсь у windows. Дякуємо всім, що є посиланням шахраїв для тих, хто теж здається. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html


-1

Я не впевнений, чи це буде на 100% також працювати в ubuntu, але я колись робив цю роботу на центровій машині

в основному вам доведеться сказати grub, який ідентифікатор # від grub.conf він повинен працювати далі. Ідентифікатор # можна дізнатись

echo `sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1

тому в моєму випадку це, наприклад, виводить "4-1", оскільки четвертий запис у моєму grub.conf містить текст "Windows". (Замініть це фактичним іменем запису (також частково), яке ви хочете використовувати. Тоді ви можете подати це на стержень, наприклад:

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
Конфігураційний файл для grub-спадщини - це menu.lst, а не grub.conf. Для grub2 це grub.cfg, але ваша друга команда призначена лише для grub-legacy.
psusi

-4

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


2
Не радити змінювати boot.cfg, вона буде відновлена ​​в кожному посібнику чи автоматиці update-grub. Користувач повинен /etc/default/grubзамість цього змінити .
enzotib

1
@enzotib, оскільки зміна призначена лише для наступного завантаження, немає ніяких причин робити це так.
psusi

2
ви забуваєте, що неправильне редагування цього файлу може призвести до
запуску

1
@enzotib, не дуже; одна з найкрасивих речей про grub2 - це те, що ви завжди можете відновити вручну за відповідним запитом. Також небезпека викручування інших частин файлу є чудовим аргументом, і якщо ви помилилися рядком за замовчуванням, найгірше, що трапляється, це те, що він за замовчуванням до першого запису.
psusi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.