From 953cce16f777eb2d59c8973ecc2e4b042f62ff93 Mon Sep 17 00:00:00 2001 From: humocs-man <251756307+humocs-man@users.noreply.github.com> Date: Sat, 23 May 2026 11:56:54 +0200 Subject: [PATCH] Enhance user notification script for updates --- scripts/notify-bootc-user.sh | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/scripts/notify-bootc-user.sh b/scripts/notify-bootc-user.sh index 4c002be..a8b32d9 100755 --- a/scripts/notify-bootc-user.sh +++ b/scripts/notify-bootc-user.sh @@ -1,5 +1,6 @@ #!/bin/bash set -euo pipefail + # Pfade BOOTC="/usr/bin/bootc" LOGGER="/usr/bin/logger" @@ -14,23 +15,30 @@ TAG="bootc-timer" $BOOTC upgrade # 2. Status-Check mit jq -# Wenn .status.staged gleich null ist, liefert jq den Exit-Code 0 (wahr) if $BOOTC status --json | jq -e '.status.staged == null' >/dev/null; then # KEIN Update gefunden $LOGGER -t "$TAG" "System aktuell (keine Updates vorhanden)." else - - # 3. Den ersten User finden, der nicht Root ist - USER_ID=$($LOGINCTL list-users --no-legend | awk '$2 != "root" {print $1; exit}') + $LOGGER -t "$TAG" "Update gefunden und gestaged. Suche aktiven Desktop-User..." + + # 3. Robust den User der AKTIVEN grafischen Sitzung (seat0) ermitteln + USER_ID=$( $LOGINCTL list-sessions --no-legend | while read -r sid rest; do + if [[ "$( $LOGINCTL show-session "$sid" -p Seat --value )" == "seat0" ]] && \ + [[ "$( $LOGINCTL show-session "$sid" -p State --value )" == "active" ]]; then + $LOGINCTL show-session "$sid" -p UID --value + break + fi + done ) if [[ -z "$USER_ID" ]]; then - # Update bereit, aber kein aktiver Desktop-User gefunden. Protokollieren und beenden. - $LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden." + $LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User auf seat0 gefunden." exit 0 fi - # 4. Benachrichtigung senden (Im Kontext des Benutzers) - ACTION=$($SUDO -u "#$USER_ID" env \ + $LOGGER -t "$TAG" "Sende Benachrichtigung an User-ID: $USER_ID" + + # 4. Benachrichtigung senden (mit "|| echo 'closed'" um den set -e Crash zu verhindern) + 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" \ @@ -39,11 +47,13 @@ else --icon=software-update-available \ --urgency=critical \ --action="reboot=Jetzt neu starten" \ - --wait) + --wait || echo "closed" ) # 5. Auswertung if [[ "$ACTION" == "reboot" ]]; then - $LOGGER -t "$TAG" "User hat Reboot gewählt." + $LOGGER -t "$TAG" "User hat Reboot gewählt. Starte System neu..." $SYSTEMCTL reboot + else + $LOGGER -t "$TAG" "Benachrichtigung wurde geschlossen oder ignoriert ($ACTION)." fi fi