From ffee5e94712a7dba0bf757b306aec14e8ea212ac Mon Sep 17 00:00:00 2001 From: humocs-man <251756307+humocs-man@users.noreply.github.com> Date: Thu, 14 May 2026 20:47:53 +0200 Subject: [PATCH] Simplify user detection and notification logic Refactor notification script to simplify user detection and logging. --- scripts/notify-bootc-user.sh | 73 ++++++++++++------------------------ 1 file changed, 25 insertions(+), 48 deletions(-) diff --git a/scripts/notify-bootc-user.sh b/scripts/notify-bootc-user.sh index da49cb0..45099ee 100755 --- a/scripts/notify-bootc-user.sh +++ b/scripts/notify-bootc-user.sh @@ -1,68 +1,45 @@ #!/bin/bash -# Pfade zu den Binaries +# Pfade 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 -# Das System lädt das Image im Hintergrund herunter -OUTPUT=$($BOOTC upgrade 2>&1) -EXIT_STATUS=$? +$BOOTC upgrade -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 -# Prüfen, ob ein Image bereitsteht ("staged") +# 2. Status-Check if $BOOTC status --json | grep -q '"staged"'; then - - $LOGGER -t "$TAG" "Neues Image erfolgreich gestaged." - # 3. Den aktiven Desktop-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) + # 3. Den ersten User finden, der nicht Root ist + USER_ID=$($LOGINCTL list-users --no-legend | awk '$2 != "root" {print $1; exit}') - if [[ -n "$TARGET_USER" ]]; then - USER_ID=$($ID_BIN -u "$TARGET_USER") - - # 4. Benachrichtigung senden - # env stellt sicher, dass die Variablen beim User ankommen - ACTION=$($SUDO -u "$TARGET_USER" \ - env 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 + if [[ -z "$USER_ID" ]]; then $LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden." + exit 0 + fi + + # 4. Benachrichtigung senden + ACTION=$($SUDO -u "#$USER_ID" env \ + 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) + + # 5. Auswertung + if [[ "$ACTION" == "reboot" ]]; then + $LOGGER -t "$TAG" "User hat Reboot gewählt." + $SYSTEMCTL reboot fi else - $LOGGER -t "$TAG" "System ist bereits aktuell." + $LOGGER -t "$TAG" "System aktuell." fi