scripts/notify-bootc-user.sh aktualisiert
This commit is contained in:
@@ -37,20 +37,22 @@ $LOGGER -t "$TAG" "Update gestaged. Suche aktiven Desktop-User..."
|
|||||||
# 3. Aktiven Desktop-User auf seat0 ermitteln
|
# 3. Aktiven Desktop-User auf seat0 ermitteln
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
USER_ID=""
|
USER_ID=""
|
||||||
while read -r sid _rest; do
|
|
||||||
if [[ -n "$sid" ]]; then
|
|
||||||
SEAT=$($LOGINCTL show-session "$sid" -p Seat --value 2>/dev/null || echo "")
|
|
||||||
STATE=$($LOGINCTL show-session "$sid" -p State --value 2>/dev/null || echo "")
|
|
||||||
|
|
||||||
if [[ "$SEAT" == "seat0" ]] && [[ "$STATE" == "active" ]]; then
|
# Holt direkt die ID der aktuell aktiven Session auf seat0 (ohne Schleife)
|
||||||
USER_ID=$($LOGINCTL show-session "$sid" -p UID --value 2>/dev/null || echo "")
|
ACTIVE_SESSION=$($LOGINCTL show-seat seat0 -p ActiveSession --value 2>/dev/null || echo "")
|
||||||
break
|
|
||||||
fi
|
if [[ -n "$ACTIVE_SESSION" && "$ACTIVE_SESSION" != "none" ]]; then
|
||||||
|
# Sicherheitsprüfung: Ist es ein echter Benutzer (user) und kein Login-Bildschirm (greeter)?
|
||||||
|
CLASS=$($LOGINCTL show-session "$ACTIVE_SESSION" -p Class --value 2>/dev/null || echo "")
|
||||||
|
STATE=$($LOGINCTL show-session "$ACTIVE_SESSION" -p State --value 2>/dev/null || echo "")
|
||||||
|
|
||||||
|
if [[ "$CLASS" == "user" ]] && [[ "$STATE" == "active" ]]; then
|
||||||
|
USER_ID=$($LOGINCTL show-session "$ACTIVE_SESSION" -p UID --value 2>/dev/null || echo "")
|
||||||
fi
|
fi
|
||||||
done < <($LOGINCTL list-sessions --no-legend)
|
fi
|
||||||
|
|
||||||
if [[ -z "$USER_ID" ]]; then
|
if [[ -z "$USER_ID" ]]; then
|
||||||
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User auf seat0 gefunden."
|
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User (Klasse: user) auf seat0 gefunden."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -59,14 +61,15 @@ $LOGGER -t "$TAG" "Sende Benachrichtigung an User-ID: $USER_ID"
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
# 4. Benachrichtigung senden
|
# 4. Benachrichtigung senden
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Die D-Bus-Umgebungsvariablen muessen explizit gesetzt werden, da der
|
# systemd-run uebergibt den Befehl sauber an den User-Manager des Nutzers.
|
||||||
# Systemd-Service als root laeuft und keine User-Session erbt.
|
# --quiet unterdrueckt Systemd-Eigenausgaben (damit $ACTION sauber bleibt).
|
||||||
# notify-send --wait blockiert, bis der User die Benachrichtigung schliesst
|
# --pipe reicht stdout durch, --wait blockiert bis zur Interaktion.
|
||||||
# oder einen Action-Button klickt.
|
ACTION=$(systemd-run \
|
||||||
ACTION=$( sudo -u "#$USER_ID" \
|
--quiet \
|
||||||
env \
|
--user \
|
||||||
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${USER_ID}/bus" \
|
--machine="${USER_ID}@.host" \
|
||||||
XDG_RUNTIME_DIR="/run/user/${USER_ID}" \
|
--pipe \
|
||||||
|
--wait \
|
||||||
$NOTIFY \
|
$NOTIFY \
|
||||||
"System-Update bereit" \
|
"System-Update bereit" \
|
||||||
"Ein neues Image wurde heruntergeladen. Jetzt neu starten?" \
|
"Ein neues Image wurde heruntergeladen. Jetzt neu starten?" \
|
||||||
@@ -84,5 +87,5 @@ if [[ "$ACTION" == "reboot" ]]; then
|
|||||||
$LOGGER -t "$TAG" "User hat Reboot gewaehlt. Starte System neu..."
|
$LOGGER -t "$TAG" "User hat Reboot gewaehlt. Starte System neu..."
|
||||||
$SYSTEMCTL reboot
|
$SYSTEMCTL reboot
|
||||||
else
|
else
|
||||||
$LOGGER -t "$TAG" "Benachrichtigung geschlossen oder ignoriert (kein Reboot)."
|
$LOGGER -t "$TAG" "Benachrichtigung geschlossen oder ignoriert (kein Reboot, Antwort war: $ACTION)."
|
||||||
fi
|
fi
|
||||||
Reference in New Issue
Block a user