Enhance user notification script for updates
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user