Wie starte ich Windows von Ubuntu aus neu?

35

Ich suche nach einer Möglichkeit, Windows von Ubuntu auf einem 10.10 / Vista-Dual-Boot-System neu zu starten. Der spezielle Anwendungsfall ist, dass ich in der Lage sein möchte, in meine laufende Ubuntu-Instanz zu ssh und einen Befehl auszugeben, der einen Neustart direkt in Windows initiiert.

Ich habe einen vielversprechenden Blog-Beitrag gefunden , aber das darin enthaltene Skript funktioniert nicht:

#!/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 Es ist nicht viel Hilfe, aber es scheint mich in die richtige Richtung zu führen:

Legen Sie den Standard-Starteintrag für GRUB fest, und zwar nur für den nächsten Start

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

Dies gibt den erwarteten Wert zurück, aber beim Neustart wird der erste Menüeintrag immer noch hervorgehoben. Irgendwelche Ideen, warum dies nicht funktioniert, oder Vorschläge für andere Lösungen?

undetwas
quelle
Wenn Sie die Windows-Grub-Boot-Zeile an den Anfang der Liste im Grub-Menü kopieren, wird bei jedem Boot-Fenster die Standardlast sein.sudo reboot nowsollte die Maschine in den ersten Punkt in der Stichliste neu starten.
karthick87
Klar, aber ich boote selten in diese Windows-Partition. Ich möchte es nicht zum Standardeintrag machen.
Andrewsomething

Antworten:

43
  • Sie müssen zuerst Ihre Made bearbeiten.

    sudo gedit /etc/default/grub
    
  • Suchen Sie nach der Zeile GRUB_DEFAULT = 0 und ändern Sie sie in GRUB_DEFAULT = gespeichert Alt-Text

  • Aktualisiere deinen Grub mit dem folgenden Befehl.

    sudo update-grub  
    
  • Erstellen Sie nun eine Skriptdatei,

    sudo gedit switch-to-windows.sh
    
  • Fügen Sie dann diese Zeilen hinzu.

    #!/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
    
  • Machen Sie das Skript ausführbar.

    sudo chmod +x switch-to-windows.sh
    
  • Und jetzt können Sie dieses Skript vom Terminal ausführen, um Windows neu zu starten.

    ./switch-to-windows.sh
    
  • Oder Sie können den folgenden Befehl in Ihrem Terminal ausführen

    sudo grub-reboot X  
    
  • Wobei X die Menüeintragsposition des Betriebssystems ist, in dem Sie über das GRUB-Menü neu starten möchten (beginnend mit 0 als erstem Eintrag).

Beispielsweise:

  • Wenn dies Ihr Grub-Menü ist und Sie Windows starten möchten, geben Sie den Wert X als 5 an.
  • sudo grub-reboot 5

    Alt-Text

  • Sie können auch einen Starter für den obigen Befehl erstellen, sodass ein Doppelklick auf den Starter einen Neustart in Windows bewirkt.
karthick87
quelle
Ich kann es einmal zum Laufen bringen. Danach müssen Sie Passwörter eingeben.
7
Wie bist du dazu gekommen, so auszusehen?
Mandy
obige Frage weiterverfolgen? Wie können Sie Grub bekommen, der so perty schaut?
Diego
5
Die Lösung ist wirklich großartig, aber da ich 14 Menüeinträge mit Tabulator vor den Einträgen habe, hat der Titel im Kopf der Menüeintragsnummer besser funktioniert. Sie können Ihren Code also mit #! / Bin / bash ändern. WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reboot "$ WINDOWS_TITLE" sudo reboot
Philippe Gachoud
Philippe Gachoud, bitte machen Sie Ihre Antwort! Es ist das einzige, das funktioniert!
Honi
12

Es gibt einen Grub-Befehl, nur um das zu tun grub-reboot .

Es scheint nur zu funktionieren, wenn Sie grub so konfiguriert haben, dass es mit dem zuletzt gespeicherten Eintrag beginnt. Also, wenn Sie dies noch nicht getan haben, ändern /etc/default/grubund einstellen

GRUB_DEFAULT=saved

dann aktualisiere die grub Konfigurationsdatei:

sudo update-grub

Von nun an startet bei jedem Boot-Grub der zuletzt verwendete Eintrag.

Wenn Sie jetzt im Voraus festlegen möchten, welches System das nächste Mal gestartet werden soll, verwenden Sie

sudo grub-reboot ENTRY

Dabei kann es ENTRYsich beispielsweise um eine Zahl relativ zu einem Menüeintrag (nummeriert ab 0) oder um einen genauen Menüeintragstitel handeln

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

Dieser Befehl kann einfach als Startprogramm zur Verfügung gestellt werden

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

aber ich weiß nicht, wie es in das Systemmenü integriert werden könnte.

Den verfügbaren Menüeintragstitel erhalten Sie mit

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 
Enzotib
quelle
Es gibt keinen Grund zum Einstellen GRUB_DEFAULT=saved, es würde Ihre Konfiguration durcheinander bringen. Was roden-Neustart tut , ist zu schreiben , next_entry=ENTRYzu /boot/grub/grubenv. Das ist nicht saved_entry=ENTRY. Der nächste Neustart wird jedoch in Ordnung sein, liest Grub next_entry. Die folgenden saved-entry=ENTRYAufladungen können fehlschlagen, wenn kein Eintrag wie in grubenv gespeichert wird.
Mook765
4

Ich denke, ich habe einen noch schöneren Weg für Leute gefunden, die gleichzeitig lokal an ihrem PC ohne ssh arbeiten wollen.

Eine Lösung zum Neustart in einem bestimmten System, das über einen Unity-Launcher ausgewählt wurde, wurde gerade auf webupd8 veröffentlicht. Sehen http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Ich weiß, dass dies nicht genau das ist, worum es in der Frage geht, aber falls jemand später eine ähnliche Frage hat, könnte dies hilfreich sein.

K. Hendrik
quelle
3

Soweit ich verstanden habe, wird dies nicht genau das sein, was Sie wollen, aber ich denke, ziemlich nahe. Folgen Sie einfach dem Link webupdate article .

Kanake
quelle
3
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Marco Ceppi
2

Für mich war es das Beste, folgendes Skript mit dem grub-rebootBefehl zu erstellen

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

Alle Informationen waren für mich hilfreich, aber am Ende konnte ich die Standardeinstellung für Grub immer noch nicht ändern und dann mit einem Klick neu starten. Nachdem ich 2 Stunden lang herumgebastelt habe, entdecke ich dieses Programm, das genau dasselbe ist, das wir alle zu erstellen versuchen, und in 5 Minuten starte ich Windows neu. Vielen Dank an alle hier ist der Betrüger Link für diejenigen, die auch aufgeben. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html

Mickey Brown
quelle
-1

Ich bin mir nicht sicher, ob dies zu 100% auch in Ubuntu funktionieren wird, aber ich habe es einmal auf einem Centos-Rechner gemacht

im grunde musst du grub sagen welche id # von grub.conf als nächstes laufen soll. Die ID-Nr. Finden Sie unter

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

In meinem Fall würde dies zB "4-1" ausgeben, da der vierte Eintrag in meiner grub.conf den Text "Windows" enthält. (Ersetzen Sie dies durch den tatsächlichen Eintragsnamen (auch teilweise), den Sie verwenden möchten. Dann können Sie dies wie folgt an grub weitergeben:

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

und beim nächsten Neustart sollte es automatisch den Eintrag booten, den Sie ihm mitgeteilt haben.

Dies alles kann in einem Skript wie dem folgenden zusammengefasst werden:

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

Das Skript ermittelt automatisch, welcher Eintrag aus Ihrer grub.conf dem Text "Windows" entspricht, gibt diesen an grub weiter, um zu bestimmen, was beim nächsten Start geladen werden soll, und startet Ihren PC neu.

Für eine GUI können Sie beispielsweise ein Verknüpfungssymbol auf Ihrem Desktop hinzufügen, um dies zu erreichen.

Roland Kohn
quelle
1
Die Konfigurationsdatei für grub-legacy lautet menu.lst und nicht grub.conf. Für grub2 ist es grub.cfg, aber Ihr zweiter Befehl ist nur für Grub-Legacy.
Psusi
-4

Bearbeiten /boot/grub/grub.cfgund ändern Sie einfach den Standardeintrag, um auf den Eintrag zu verweisen, den Sie booten möchten. Der Wert kann entweder die Ordnungszahl des Eintrags sein (beginnend mit Null für die erste) oder Sie können den vollständigen Titel des gewünschten Eintrags in Anführungszeichen setzen.

Psusi
quelle
2
Raten Sie nicht zum Ändern boot.cfg, es wird bei jeder manuellen oder automatischen Wiederherstellung wiederhergestellt update-grub. Benutzer sollte /etc/default/grubstattdessen ändern .
Enzotib
1
@enzotib, da die Änderung nur für den nächsten Start gedacht ist, gibt es keinen Grund, dies so zu tun.
Psusi
2
Sie vergessen, dass eine falsche Bearbeitung dieser Datei zu einem nicht mehr startfähigen System führen kann
enzotib
1
@enzotib, nicht wirklich; Eines der schönen Dinge an grub2 ist, dass Sie jederzeit nach Aufforderung manuell wiederherstellen können. Auch die Gefahr, andere Teile der Datei zu vermasseln, ist ein schwerwiegendes Argument. Wenn Sie die Standardzeile falsch eingeben, wird im schlimmsten Fall standardmäßig der erste Eintrag verwendet.
Psusi