Enhance user notification script for updates

This commit is contained in:
humocs-man
2026-05-23 11:56:54 +02:00
committed by GitHub
parent 4855abcbad
commit 953cce16f7
+18 -8
View File
@@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
# Pfade # Pfade
BOOTC="/usr/bin/bootc" BOOTC="/usr/bin/bootc"
LOGGER="/usr/bin/logger" LOGGER="/usr/bin/logger"
@@ -14,22 +15,29 @@ TAG="bootc-timer"
$BOOTC upgrade $BOOTC upgrade
# 2. Status-Check mit jq # 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 if $BOOTC status --json | jq -e '.status.staged == null' >/dev/null; then
# KEIN Update gefunden # KEIN Update gefunden
$LOGGER -t "$TAG" "System aktuell (keine Updates vorhanden)." $LOGGER -t "$TAG" "System aktuell (keine Updates vorhanden)."
else else
$LOGGER -t "$TAG" "Update gefunden und gestaged. Suche aktiven Desktop-User..."
# 3. Den ersten User finden, der nicht Root ist # 3. Robust den User der AKTIVEN grafischen Sitzung (seat0) ermitteln
USER_ID=$($LOGINCTL list-users --no-legend | awk '$2 != "root" {print $1; exit}') 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 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 auf seat0 gefunden."
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden."
exit 0 exit 0
fi fi
# 4. Benachrichtigung senden (Im Kontext des Benutzers) $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 \ ACTION=$( $SUDO -u "#$USER_ID" env \
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus \ DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus \
XDG_RUNTIME_DIR=/run/user/$USER_ID \ XDG_RUNTIME_DIR=/run/user/$USER_ID \
@@ -39,11 +47,13 @@ else
--icon=software-update-available \ --icon=software-update-available \
--urgency=critical \ --urgency=critical \
--action="reboot=Jetzt neu starten" \ --action="reboot=Jetzt neu starten" \
--wait) --wait || echo "closed" )
# 5. Auswertung # 5. Auswertung
if [[ "$ACTION" == "reboot" ]]; then 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 $SYSTEMCTL reboot
else
$LOGGER -t "$TAG" "Benachrichtigung wurde geschlossen oder ignoriert ($ACTION)."
fi fi
fi fi