added Update-Notification via Skript an Service
This commit is contained in:
Regular → Executable
+25
-27
@@ -1,31 +1,29 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# 1. Finde die ID der aktuell aktivsten Sitzung (die erste, die kein root ist)
|
TAG="bootc-notifier"
|
||||||
# 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)
|
|
||||||
|
|
||||||
# Wenn keine User-Session gefunden wurde, beende das Skript
|
# 1. User finden
|
||||||
if [ -z "$SESSION_ID" ]; then
|
TARGET_USER=$(loginctl list-sessions --no-legend | awk '$3 != "root" {print $3; exit}')
|
||||||
exit 0
|
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
|
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."
|
|
||||||
|
|||||||
Reference in New Issue
Block a user