From 0a162d991b5a4b23ec00a0b9b32974bb3851b44e Mon Sep 17 00:00:00 2001 From: humocs-man <251756307+humocs-man@users.noreply.github.com> Date: Fri, 1 May 2026 15:25:29 +0200 Subject: [PATCH] added Update-Notification via Skript an Service --- scripts/notify-bootc-user.sh | 52 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 27 deletions(-) mode change 100644 => 100755 scripts/notify-bootc-user.sh diff --git a/scripts/notify-bootc-user.sh b/scripts/notify-bootc-user.sh old mode 100644 new mode 100755 index 784b210..a6cb01a --- a/scripts/notify-bootc-user.sh +++ b/scripts/notify-bootc-user.sh @@ -1,31 +1,29 @@ #!/bin/bash -# 1. Finde die ID der aktuell aktivsten Sitzung (die erste, die kein root ist) -# Wir suchen nach einer Session, die einen User hat, der nicht root ist. -SESSION_ID=$(loginctl list-sessions --no-legend | while read -r sid user class service; do - if [ "$user" != "root" ]; then -s echo "$sid"; break - fi -done) +TAG="bootc-notifier" -# Wenn keine User-Session gefunden wurde, beende das Skript -if [ -z "$SESSION_ID" ]; then - exit 0 +# 1. User finden +TARGET_USER=$(loginctl list-sessions --no-legend | awk '$3 != "root" {print $3; exit}') +USER_ID=$(id -u "$TARGET_USER") +RUNTIME_DIR="/run/user/$USER_ID" + +# 2. Benachrichtigung senden +# -a "System-Update" setzt den Namen in der Titelleiste +# --action definiert den Button +# --wait lässt das Skript auf die Reaktion warten +RESPONSE=$(sudo -u "$TARGET_USER" \ + DBUS_SESSION_BUS_ADDRESS="unix:path=$RUNTIME_DIR/bus" \ + XDG_RUNTIME_DIR="$RUNTIME_DIR" \ + notify-send -a "System-Update" "Ein neues System-Update ist bereit." "Der Neustart aktiviert die Änderungen." \ + --icon=system-reboot-symbolic \ + --urgency=critical \ + --action="reboot=Jetzt neu starten" \ + --wait) + +# 3. Auswertung +if [[ "$RESPONSE" == "reboot" ]]; then + logger -t "$TAG" "User wählte Neustart über Benachrichtigungs-Button." + systemctl reboot +else + logger -t "$TAG" "Benachrichtigung wurde geschlossen oder 'reboot' nicht geklickt." fi - -# 2. Ermittle den Benutzernamen und die UID dieser Session -TARGET_USER=$(loginctl show-session "$SESSION_ID" -p User --value) -TARGET_UID=$(id -u "$TARGET_USER") - -# Die einzige Variable, die wir wirklich brauchen, ist der D-Bus Pfad. -# Alles andere (wie WAYLAND_DISPLAY) übernimmt der D-Bus-Server von selbst, -# sobald die Nachricht bei ihm ankommt. -export XDG_RUNTIME_DIR="/run/user/$TARGET_UID" -export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$TARGET_UID/bus" - -# Wir nutzen 'sudo -u' und schicken die Nachricht direkt über den D-Bus. -# Wir lassen 'DISPLAY' weg, da notify-send kein Grafik-Protokoll braucht. -sudo -u "$TARGET_USER" \ - DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \ - notify-send "System-Update verfügbar" \ - "Ein neues Image wurde installiert. Bitte starten Sie das System neu."