Wie kann ich GRUB mitteilen, dass ich einen Neustart in Windows durchführen möchte – bevor ich den Neustart durchführe?

Wie kann ich GRUB mitteilen, dass ich einen Neustart in Windows durchführen möchte – bevor ich den Neustart durchführe?

Ich habe ein Dual-Boot-System mit Linux/Windows eingerichtet und wechsle häufig von einem zum anderen. Ich habe überlegt, ob ich in einem der Menüs ein Menüelement hinzufügen könnte, um direkt in Windows neu zu starten, ohne an der GRUB-Eingabeaufforderung anzuhalten.

ich sahdiese Fragein einem Forum, das ist genau das, was ich will, aber es geht um Lilo, was nicht mein Fall ist.

Ich habe über eine Lösung nachgedacht, bei der der Standardeintrag im GRUB-Menü geändert und dann ein Neustart durchgeführt wird, aber es gibt einige Nachteile, und ich habe mich gefragt, ob es eine sauberere Alternative gibt.

(Außerdem wäre ich an einer Lösung interessiert, um von Windows direkt in Linux zu booten, aber das könnte schwieriger sein und gehört hier nicht hin. Wie auch immer, solange ich es auf die eine Art habe, könnte die andere Art als Standard eingerichtet werden.

AKTUALISIERENEs scheint, als hätte jemand gefragteine ähnliche Frage, und wenn das die vorgeschlagenen Antworten sind, kann ich sie auch gleich bearbeiten /boot/grub/grubenvund grub-reboottun . )grub-set-defaultgrub-editenv

Vielen Dank im Voraus für alle Tipps.

AKTUALISIEREN:

Dies ist meine GRUB-Version:(GRUB) 1.99-12ubuntu5-1linuxmint1

Ich habe versucht, es auszuführen grubonce, aber der Befehl wurde nicht gefunden. Und die Suche in den Repositories bringt nichts. Ich verwende Linux Mint, also könnte es daran liegen ...

Wenn ich sehe man grub-reboot, scheint es, als würde es das tun, was ich will, und das gruboncetut es auch. Es ist auch überall verfügbar (zumindest für mich, ich glaube, es ist Teil des Grub-Pakets). Ich habe zwei verwandte Befehle gesehen: grub-editenvund grub-set-default.

Ich habe herausgefunden, dass nach dem Ausführen sudo grub-set-default 4etwas grub-editenv listÄhnliches wie das Folgende angezeigt wird:

saved_entry=4

Und wenn Sie ausführen grub-reboot 4, erhalten Sie etwa Folgendes:

prev_saved_entry=0
saved_entry=4

Das bedeutet, dass beide dasselbe tun (einer ist vorübergehend, der andere nicht).

Überraschenderweise passierte Folgendes, als ich es versuchte:

sudo grub-reboot 4
sudo reboot now

Es funktionierte nicht, als hätte ich nichts getan. Es zeigte mir lediglich wie üblich das Menü und wählte den ersten Eintrag aus, mit der Meldung, dass dieser Eintrag in 10 Sekunden gebootet würde.

Ich habe es noch einmal versucht, weil ich dachte, ich hätte vielleicht den falschen Eintrag geschrieben (er ist nullbasiert, oder?). Dieses Mal blieb es einfach beim Menübildschirm hängen und ich musste den PC zurücksetzen, um booten zu können.

Wenn das irgendjemand ausprobieren könnte, nur um zu sehen, ob es nur bei mir so ist, wäre ich dankbar. (Mint macht mir das Leben schwer und das wäre eine gute Gelegenheit, das zu ändern :P).

Beim Lesen des Codes /boot/grub/grub.cfgscheint dies der richtige Weg zu sein, aber meinen Beobachtungen zufolge werden diese Einstellungen einfach ignoriert ...

Antwort1

  1. Bearbeiten Sie /etc/default/grub und ersetzen Sie GRUB_DEFAULT=0durchGRUB_DEFAULT=saved
  2. sudo update-grub
  3. Ihr Befehl wird sein:

    sudo grub-reboot "$(grep -i windows /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot
    

    AhübschFunktion für Ihr ~/.bashrcoder .bash_aliaseskönnte so aussehen:

    # Reboot directly to Windows
    # Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu
    reboot_to_windows ()
    {
        windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2)
        sudo grub-reboot "$windows_title" && sudo reboot
    }
    alias reboot-to-windows='reboot_to_windows'
    

    Anmerkungen des Herausgebers:

    • Ich habe ersetztveraltete Backticks( ``) durch $(...)Konstrukt.

    • Im Allgemeinen habe ich es neu geschrieben, um den aktuellenPOSIX (Wiki)Standards, und habe dabei noch ein paar andere kleinere Änderungen vorgenommen.

    • Der Vollständigkeit halber habe ich die folgende Funktion zum Vergleich unverändert gelassen.


Falls Ihre grub.conf mehrere Zeilen für Windows enthält, kümmern sich die folgenden Funktionen nur um die Zeilen, die mit beginnen, menuentryund wählen nur die erste aus, die sich auf Windows bezieht:

function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-reboot "$WINDOWS_TITLE"
    sudo reboot
}

Antwort2

Damit der grub-rebootBefehl funktioniert, müssen mehrere erforderliche Konfigurationsänderungen vorgenommen werden:

  • Der Standardeintrag für Grub muss auf gesetzt sein saved. Ein möglicher Ort hierfür ist die GRUB_DEFAULT=Zeile in/etc/default/grub
  • Legen Sie mit diesen Optionen grub-set-defaultIhren Standardeintrag auf den Eintrag fest, den Sie normalerweise verwenden.
  • Aktualisieren Sie Ihre Grub-Konfiguration (z. B. update-grub).

Damit sollte die Ersteinrichtung erledigt sein. Führen Sie in Zukunft einfach grub-reboot <entry>einen einmaligen Bootvorgang durch <entry>.

Antwort3

Ich habe hierfür ein Tool für Ubuntu 20.04/22.04 geschrieben: https://github.com/mendhak/grub-reboot-picker

Bildbeschreibung hier eingeben

Es funktioniert möglicherweise auf früheren Ubuntu-Versionen, aber ich habe es nie getestet.

Antwort4

Stimme @jw013 zu. Und Sie können das Menüfeld auch an grub-reboot übergeben (einschließlich des Titels des übergeordneten Menüs). Beispiel:

$ sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-26-generic"
$ sudo reboot

Wobei „Erweiterte Optionen für Ubuntu“ das übergeordnete Menü ist, ist „Ubuntu, mit Linux 4.13.0-26-generic“ das Untermenü.

verwandte Informationen