Jak zrestartować system Windows z Ubuntu?

35

Szukam sposobu na ponowne uruchomienie systemu Windows z Ubuntu na systemie podwójnego rozruchu 10.10 / Vista. Konkretny przypadek użycia polega na tym, że chciałbym móc ssh do mojej działającej instancji Ubuntu i wydać polecenie, które zainicjuje ponowne uruchomienie bezpośrednio w systemie Windows.

Znalazłem obiecujący post na blogu , ale sugerowany przez niego skrypt nie działa:

#!/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 niewiele pomaga, ale wydaje mi się, że prowadzi mnie we właściwym kierunku:

ustaw domyślny wpis rozruchu dla GRUB, tylko dla następnego rozruchu

WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
echo $MENU_NUMBER

Zwraca oczekiwaną wartość, ale przy ponownym uruchomieniu pierwsza pozycja menu jest nadal podświetlona. Wszelkie pomysły, dlaczego to nie działa lub sugestie dotyczące innych rozwiązań?

andrews coś
źródło
Jeśli skopiujesz linię rozruchową systemu Windows z grubem na górę listy w menu grub, to w każdym oknie rozruchowym będzie domyślnym ładowaniem .. jeśli jesteś w Ubuntu i ssh w to wtedy. sudo reboot nowpowinien zrestartować komputer do pierwszego elementu na liście grub.
karthick87
Jasne, ale rzadko uruchamiam tę partycję Windows. Nie chcę, aby był to domyślny wpis.
andrewsomething

Odpowiedzi:

43
  • Najpierw musisz edytować grub.

    sudo gedit /etc/default/grub
    
  • Wyszukaj wiersz GRUB_DEFAULT = 0 i zmień go na GRUB_DEFAULT = zapisany alternatywny tekst

  • Zaktualizuj grub przy użyciu następującego polecenia.

    sudo update-grub  
    
  • Teraz utwórz plik skryptu,

    sudo gedit switch-to-windows.sh
    
  • Następnie dodaj te linie.

    #!/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
    
  • Spraw, by skrypt był wykonywalny.

    sudo chmod +x switch-to-windows.sh
    
  • A teraz możesz uruchomić ten skrypt z terminala, aby ponownie uruchomić system w systemie Windows.

    ./switch-to-windows.sh
    
  • Lub możesz wykonać następujące polecenie w swoim terminalu

    sudo grub-reboot X  
    
  • Gdzie X jest pozycją menu systemu operacyjnego, w którym chcesz zrestartować z menu GRUB. (Zaczynając od 0 jako pierwszy wpis)

Na przykład:

  • Jeśli to jest twoje menu grub i chcesz uruchomić system z Windows, powinieneś podać wartość X jako 5.
  • sudo grub-reboot 5

    alternatywny tekst

  • Możesz również utworzyć program uruchamiający dla powyższego polecenia, aby podwójne kliknięcie programu uruchamiającego uruchomiło się ponownie w systemie Windows.
karthick87
źródło
Mogę to raz uruchomić. Następnie musisz wprowadzić hasła.
7
Jak sprawiłeś, że grub tak wygląda?
Mandy,
w odpowiedzi na powyższe pytanie? jak możesz sprawić, by grub wyglądał tak perty?
Diego
5
Rozwiązanie jest naprawdę świetne, ale ponieważ mam 14 pozycji menu z kartami przed pozycjami, tytuł tytułu numeru pozycji menu działał lepiej. Możesz więc zmienić kod za pomocą #! / Bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reboot "$ WINDOWS_TITLE" sudo restart
Philippe Gachoud
Philippe Gachoud, proszę udzielić odpowiedzi! to jedyny, który działa!
honi
12

Aby to zrobić, istnieje polecenie grub grub-reboot.

Wydaje się, że działa tylko wtedy, gdy grub skonfigurowano tak, aby zaczynał od ostatniego zapisanego wpisu. Więc jeśli jeszcze tego nie zrobiłeś, zmodyfikuj /etc/default/grubi ustaw

GRUB_DEFAULT=saved

następnie zaktualizuj plik konfiguracyjny grub:

sudo update-grub

Odtąd przy każdym rozruchu grub będzie uruchamiał ostatnio używany wpis.

Teraz, jeśli chcesz wcześniej ustawić system, który ma się uruchamiać następnym razem, użyj

sudo grub-reboot ENTRY

gdzie ENTRYmoże być liczbą odnoszącą się do pozycji menu (numerowaną od 0) lub na przykład dokładnym tytułem pozycji menu

sudo grub-reboot "Microsoft Windows XP Professional (on /dev/sda1)"

To polecenie można łatwo udostępnić jako program uruchamiający

#!/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

ale nie wiem, jak można to zintegrować z menu systemowym.

Dostępny tytuł pozycji menu można uzyskać za pomocą

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 
enzotib
źródło
Nie ma powodu, aby ustawić GRUB_DEFAULT=saved, to zepsułoby twoją konfigurację. Co grub-restart nie jest napisać next_entry=ENTRYdo /boot/grub/grubenv. To nie saved_entry=ENTRY. Kolejne ponowne uruchomienie będzie w porządku, grub czyta next_entry. Następujące buty mogą się nie powieść, jeśli żaden zapis nie zostanie zapisany jak saved-entry=ENTRYw grubenv.
mook765
4

Myślę, że znalazłem jeszcze lepszy sposób dla ludzi, którzy chcą to samo, gdy lokalnie na swoim komputerze bez ssh.

Rozwiązanie dotyczące ponownego uruchomienia do określonego systemu wybranego za pomocą programu uruchamiającego Unity zostało właśnie opublikowane na webupd8. Zobacz http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Wiem, że nie jest to dokładnie to pytanie, ale w przypadku, gdy ktoś ma podobne pytanie, może to być pomocne.

K. Hendrik
źródło
3

O ile rozumiem, nie będzie to dokładnie to, czego chcesz, ale myślę, że całkiem blisko. Wystarczy postępować zgodnie z artykułem link webupdate .

mieszaniec
źródło
3
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Marco Ceppi
2

Więc dla mnie najlepsze było stworzenie następującego skryptu z grub-rebootpoleceniem

#!/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
Philippe Gachoud
źródło
0

Informacje dla wszystkich były dla mnie pomocne, ale ostatecznie nie udało mi się zmienić domyślnego gruba, a następnie zrestartować jednym kliknięciem. Po majsterkowaniu przez 2 godziny odkrywam ten program, który jest dokładnie tym samym, co wszyscy próbujemy zbudować, a za 5 minut ponownie uruchamiam się w systemie Windows. Dzięki wszystkim tutaj jest link do oszustów dla tych, którzy również się poddają. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html

Mickey Brown
źródło
-1

Nie jestem pewien, czy to w 100% zadziała również w Ubuntu, ale kiedyś zrobiłem to na maszynie centos

w zasadzie będziesz musiał powiedzieć grubowi, który identyfikator # z grub.conf powinien uruchomić w następnej kolejności. Identyfikator # można znaleźć przez

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

więc w moim przypadku wynikałoby to np. z wypisania „4-1”, ponieważ czwarty wpis w moim grub.conf zawiera tekst „Windows”. (Zamień to na rzeczywistą nazwę wpisu (również częściowo), której chcesz użyć. Następnie możesz nakarmić to grub:

echo "savedefault --stage2=/boot/grub/stage2 --default=4-1 --once" | sudo /sbin/grub

a przy następnym ponownym uruchomieniu powinien automatycznie uruchomić wpis, który mu powiedziałeś.

wszystko to można złożyć w skrypcie takim jak poniżej:

#!/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

skrypt automatycznie określi, który wpis z pliku grub.conf odpowiada tekstowi „Windows”, poda go do gruba, aby powiedzieć, co należy załadować przy następnym uruchomieniu, i uruchomi ponownie komputer.

w przypadku GUI możesz np. dodać ikonę skrótu do pulpitu, aby to osiągnąć.

Roland Kohn
źródło
1
Plik konfiguracyjny dla grub-legacy to menu.lst, a nie grub.conf. W przypadku grub2 jest to grub.cfg, ale twoje drugie polecenie dotyczy tylko grub-legacy.
psusi
-4

Po prostu edytuj /boot/grub/grub.cfgi zmień domyślny wpis, aby wskazywał na wpis, który chcesz uruchomić. Wartość może być liczbą porządkową wpisu (zaczynając od zera dla pierwszego) lub możesz umieścić pełny tytuł wpisu, który chcesz, w cudzysłowie.

psusi
źródło
2
Nie radzę modyfikować boot.cfg, zostanie przywrócony przy każdym podręczniku lub automatycznie update-grub. /etc/default/grubZamiast tego użytkownik powinien zmodyfikować .
enzotib
1
@enzotib, ponieważ zmiana ma dotyczyć tylko następnego rozruchu, nie ma powodu, aby robić to w ten sposób.
psusi
2
zapominasz, że zła edycja tego pliku może doprowadzić do niemożliwego do uruchomienia systemu
enzotib 26.09.11
1
@enzotib, niezupełnie; jedną z pięknych rzeczy na temat grub2 jest to, że zawsze możesz odzyskać ręcznie po znaku zachęty. Niebezpieczeństwo zepsucia innych części pliku jest spekulacyjnym argumentem, a jeśli pomylisz się do domyślnej linii, najgorsze, co się stanie, to domyślna wartość pierwszego wpisu.
psusi