#!/bin/bash # Pfade zu den Binaries BOOTC="/usr/bin/bootc" LOGGER="/usr/bin/logger" LOGINCTL="/usr/bin/loginctl" NOTIFY="/usr/bin/notify-send" ID_BIN="/usr/bin/id" SUDO="/usr/bin/sudo" SYSTEMCTL="/usr/bin/systemctl" TAG="bootc-timer" # 1. Upgrade ausführen OUTPUT=$($BOOTC upgrade 2>&1) EXIT_STATUS=$? if [[ $EXIT_STATUS -ne 0 ]]; then $LOGGER -t "$TAG" "Fehler beim Upgrade. Code: $EXIT_STATUS. Output: $OUTPUT" exit 1 fi # 2. Status-Check via JSON if $BOOTC status --json | grep -q '"staged":{'; then $LOGGER -t "$TAG" "Neues Image erfolgreich gestaged." # 3. Den aktiven User finden TARGET_USER=$($LOGINCTL list-sessions --no-legend | while read -r id user rest; do S_TYPE=$($LOGINCTL show-session "$id" -p Type --value) S_STATE=$($LOGINCTL show-session "$id" -p State --value) if [[ "$S_TYPE" =~ ^(x11|wayland)$ ]] && [[ "$S_STATE" == "active" ]]; then echo "$user" break fi done) if [[ -n "$TARGET_USER" ]]; then USER_ID=$($ID_BIN -u "$TARGET_USER") # Wichtig: XDG_RUNTIME_DIR hinzufügen ACTION=$($SUDO -u "$TARGET_USER" \ DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus \ XDG_RUNTIME_DIR=/run/user/$USER_ID \ $NOTIFY "System-Update bereit" \ "Ein neues Image wurde heruntergeladen. Jetzt neu starten?" \ --icon=software-update-available \ --urgency=critical \ --action="reboot=Jetzt neu starten" \ --wait) $LOGGER -t "$TAG" "Benachrichtigung gesendet. Antwort: $ACTION" # 5. Auswertung der Schaltfläche if [[ "$ACTION" == "reboot" ]]; then $LOGGER -t "$TAG" "User hat Neustart gewählt. Führe Reboot aus." $SYSTEMCTL reboot fi else $LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden." fi else $LOGGER -t "$TAG" "System ist bereits aktuell." fi