diff --git a/Boot to Windows.desktop b/Boot to Windows.desktop new file mode 100755 index 0000000..bd95237 --- /dev/null +++ b/Boot to Windows.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Name=Boot to Windows +Comment=Bootet direkt nach Windows oder setzt den GRUB-Boot-Eintrag +Exec=pkexec /home/thorsten/Scripte/boot-to-windows/boot-to-windows.sh +Icon=/home/thorsten/Scripte/boot-to-windows/boot-to-windows.png +Terminal=true +Type=Application +Categories=Utility;System; diff --git a/boot-to-windows.png b/boot-to-windows.png new file mode 100644 index 0000000..84d0ae8 Binary files /dev/null and b/boot-to-windows.png differ diff --git a/boot-to-windows.sh b/boot-to-windows.sh old mode 100644 new mode 100755 index 7b6a420..9860fda --- a/boot-to-windows.sh +++ b/boot-to-windows.sh @@ -3,22 +3,25 @@ # Ermitteln, ob grub oder grub2 verwendet wird if [[ -d "/boot/grub2" ]]; then GRUB_DIR="/boot/grub2" + GRUB_CFG="/boot/grub2/grub.cfg" # Setze den richtigen Pfad zu grub.cfg + GRUB_VERSION="grub2" # Setze die Version auf grub2 elif [[ -d "/boot/grub" ]]; then GRUB_DIR="/boot/grub" + GRUB_CFG="/boot/grub/grub.cfg" # Setze den richtigen Pfad zu grub.cfg + GRUB_VERSION="grub" # Setze die Version auf grub else echo "Weder grub noch grub2-Konfigurationsordner gefunden!" exit 1 fi -# Suche die GRUB-Konfigurationsdatei -GRUB_CFG="$GRUB_DIR/grub.cfg" +# Überprüfen, ob die GRUB-Konfigurationsdatei existiert if [[ ! -f "$GRUB_CFG" ]]; then echo "GRUB-Konfigurationsdatei nicht gefunden!" exit 1 fi -# Suche den GRUB-Eintrag für Windows dynamisch -WINDOWS_ENTRY=$(grep -i "Windows Boot Manager" "$GRUB_CFG" | head -n 1 | awk -F\' '{print $2}') +# Suche nach dem Windows Boot Manager Eintrag und bereinige den Eintrag +WINDOWS_ENTRY=$(grep -i "menuentry 'Windows Boot Manager" "$GRUB_CFG" | head -n 1 | sed "s/^menuentry '//" | sed "s/'$//" | cut -d"'" -f1) # Überprüfen, ob der Eintrag gefunden wurde if [[ -z "$WINDOWS_ENTRY" ]]; then @@ -26,17 +29,44 @@ if [[ -z "$WINDOWS_ENTRY" ]]; then exit 1 fi -# Setze den nächsten Boot-Eintrag +# Gebe den gefundenen Eintrag aus echo "Gefundener Windows-Eintrag: $WINDOWS_ENTRY" -grub-reboot "$WINDOWS_ENTRY" -echo "GRUB wird beim nächsten Neustart in die Windows-Partition booten." -# Benutzerabfrage, ob direkt neugestartet werden soll -read -p "Soll das System jetzt direkt nach Windows neu starten? [Enter für Ja, andere Eingabe für Nein] " user_input +# Erste Abfrage: Soll beim nächsten Start nach Windows gebootet werden? +while true; do + read -p "Soll beim nächsten Start nach Windows gebootet werden? [Y/N] " user_input + user_input=${user_input:-Y} # Wenn leer (Enter), dann "Y" als Default-Wert + if [[ "$user_input" =~ ^[Yy]$ ]]; then + if [[ "$GRUB_VERSION" == "grub" ]]; then + # Für GRUB (grub1) verwenden wir grub-reboot + sudo grub-reboot "$WINDOWS_ENTRY" + echo "GRUB wird beim nächsten Neustart in die Windows-Partition booten." + elif [[ "$GRUB_VERSION" == "grub2" ]]; then + # Für GRUB2 verwenden wir grub2-set-default + sudo grub2-set-default "$WINDOWS_ENTRY" + echo "GRUB2 wird beim nächsten Neustart in die Windows-Partition booten." + fi + break + elif [[ "$user_input" =~ ^[Nn]$ ]]; then + echo "Abgebrochen. Script wird beendet." + exit 0 + else + echo "Ungültige Eingabe. Bitte Y oder N eingeben." + fi +done -if [[ -z "$user_input" ]]; then - echo "Das System wird neu gestartet..." - reboot -else - echo "Neustart abgebrochen. GRUB bleibt für den nächsten Start auf Windows eingestellt." -fi +# Zweite Abfrage: Sofort nach Windows booten oder nur den GRUB Eintrag setzen? +while true; do + read -p "Jetzt sofort nach Windows booten? [Y/N] " user_input + user_input=${user_input:-Y} # Wenn leer (Enter), dann "Y" als Default-Wert + if [[ "$user_input" =~ ^[Yy]$ ]]; then + echo "Das System wird jetzt nach Windows neu gestartet..." + sudo reboot + break + elif [[ "$user_input" =~ ^[Nn]$ ]]; then + echo "Nur den GRUB Eintrag gesetzt. Script wird beendet." + exit 0 + else + echo "Ungültige Eingabe. Bitte Y oder N eingeben." + fi +done