[umgangen]wie notify-send von systemd-unit an desktop senden
- Taomon
- Beiträge: 627
- Registriert: 08.03.2011 16:34:38
- Lizenz eigener Beiträge: GNU Free Documentation License
[umgangen]wie notify-send von systemd-unit an desktop senden
Nachdem meine alte Udev-Regel nicht mehr funktionierte und mein backupskript nicht mehr anlief, habe ich das ganze über systemd hingefrickelt. Udev-Regel geschrieben damit ein Link gelegt wird. Danach über systemd-unit Link gemountet an einen festen mountpoint. Was mir fehlt ist eine Nachricht auf meinem Desktop xfce4 das die Partition gemountet wurde, damit bei Fehler nicht meine /-Partition vollläuft. So wie das auch bei Udisks2 funktioniert.
Kann mir jemand ein Stichwort geben.
Gruß Taomon
Kann mir jemand ein Stichwort geben.
Gruß Taomon
Zuletzt geändert von Taomon am 14.11.2016 09:29:38, insgesamt 1-mal geändert.
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.
Re: wie notify-send von systemd-unit an desktop senden
scientific hat eine ein paar praktische Shellfunktionen zu dem Zweck geschrieben - ich find sie nur grad nicht.
Ich habe mir mit einem simplen Skript beholfen
Das Ding sollte so wie es da steht eine Liste der lokal angemeldeten Benutzer ausgeben. Davor die Auskommentierten Zeilen sind ein mit \ auf mehrere Zeilen verteilter Befehl, der diesen Benutzern mittels notify-send eine Nachricht schicken sollte.
Das Konstrukt mit .Xauthority gefällt mir allerdings überhaupt nicht - ich hab nur keine bessere Idee.
Das ganze stammt von meiner Idee, mich über neu angeschlossene Eingabegeräte informieren zu lassen (eigentlich als Vorsichtsmaßnahme gegen gehackte USB-Geräte):
viewtopic.php?t=151777&p=1010374
Ich habe mir mit einem simplen Skript beholfen
Code: Alles auswählen
#!/bin/sh
for SESSIONID in $(loginctl --no-legend list-sessions | awk '{print $1}')
do
SESSION=$(loginctl show-session ${SESSIONID})
USERNAME=$(echo "${SESSION}" | sed -ne 's/^Name=//p')
DISPLAY=$(echo "${SESSION}" | sed -ne 's/^Display=//p')
TYPE=$(echo "${SESSION}" | sed -ne 's/^Type=//p')
REMOTE=$(echo "${SESSION}" | sed -ne 's/^Remote=//p')
ACTIVE=$(echo "${SESSION}" | sed -ne 's/^Active=//p')
if test ${ACTIVE} = "yes" && test ${TYPE} = "x11" && test ${REMOTE} = "no"; then
#su - ${USERNAME} -c "env \
#XAUTHORITY=\"$(getent passwd ${USERNAME} | cut -d: -f6)/.Xauthority\" \
#DISPLAY=${DISPLAY} \
#notify-send -u critical -i keyboard -c device.added 'neues Eingabegerät' ${NAME}"
echo "Active: ${USERNAME}"
else
echo "Inactive, console or remote: ${USERNAME}"
fi
done
Das Konstrukt mit .Xauthority gefällt mir allerdings überhaupt nicht - ich hab nur keine bessere Idee.
Das ganze stammt von meiner Idee, mich über neu angeschlossene Eingabegeräte informieren zu lassen (eigentlich als Vorsichtsmaßnahme gegen gehackte USB-Geräte):
viewtopic.php?t=151777&p=1010374
- Taomon
- Beiträge: 627
- Registriert: 08.03.2011 16:34:38
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: wie notify-send von systemd-unit an desktop senden
Mercy, smutbert
Ich bin einen anderen Weg gegangen. Zurück zur Udev-Regel.
gemountet wird jetzt über udisks2 und damit klappt auch der Info-bubble.
Jetzt muß ich bloß noch die Unit für das Backup-Skript ändern.
Gruß Taomon
Ich bin einen anderen Weg gegangen. Zurück zur Udev-Regel.
Code: Alles auswählen
KERNEL=="sd*[0-9]", SUBSYSTEM=="block", GROUP="plugdev", MODE="0664", SYMLINK+="debianhome", TAG+="systemd", ENV{ID_FS_LABEL}=="debianhome", ENV{UDISKS_FILESYSTEM_SHARED}="1", ENV{SYSTEMD_WANTS}="backup-home-skript"
Code: Alles auswählen
mount | grep media
/dev/sdb5 on /media/debianhome type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
/dev/sdb1 on /media/alex/dvd type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
/dev/sdb6 on /media/alex/59f7da0f-57a4-461b-bd78-5e5966b2e829 type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2
Jetzt muß ich bloß noch die Unit für das Backup-Skript ändern.
Gruß Taomon
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: [umgangen]wie notify-send von systemd-unit an desktop se
Ich hab da vor längerer Zeit ein Skript geschrieben, welches mit dbus arbeitet und mittels notify-send alle eingeloggten User graphisch benachrichtigt.
Das stimmt, wie smutbert erwähnte. Nur kann ichs grad nicht posten, da ich nicht an meinem Rechner bin.
Ich habs schon länger nicht mehr in Verwendung, da ich beim Backup auf ein pythonskript umgestiegen bin und die Benachrichtigung nun über eine gnome-shell-extension läuft (die aber bisher nur rudimentär funktioniert... So quasi als proof of concept...)
Ich kann aber gern bei Gelegenheit den Codeschnipsel mal auf Github stellen und den Link schicken.
Lg scientific
Das stimmt, wie smutbert erwähnte. Nur kann ichs grad nicht posten, da ich nicht an meinem Rechner bin.
Ich habs schon länger nicht mehr in Verwendung, da ich beim Backup auf ein pythonskript umgestiegen bin und die Benachrichtigung nun über eine gnome-shell-extension läuft (die aber bisher nur rudimentär funktioniert... So quasi als proof of concept...)
Ich kann aber gern bei Gelegenheit den Codeschnipsel mal auf Github stellen und den Link schicken.
Lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: [umgangen]wie notify-send von systemd-unit an desktop se
P.S.: Wobei ich mich erinnere... Die Liste mit allen eingeloggten Usern und die Abfrage ob der ausführende User root ist, war nicht ganz sauber gelöst und funktionierte nicht immer.
Ich schrieb das Skript auch zu der Zejt, als consolekit verscgwand und loginctl auftauchte... Eine Welt im Umbruch sozusagen...
Ich schrieb das Skript auch zu der Zejt, als consolekit verscgwand und loginctl auftauchte... Eine Welt im Umbruch sozusagen...
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
- Taomon
- Beiträge: 627
- Registriert: 08.03.2011 16:34:38
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: [umgangen]wie notify-send von systemd-unit an desktop se
Ja scientific das wäre nett. Vielleicht kann ich das für was anderes gebrauchen.
Gruß Taomon
Gruß Taomon
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: [umgangen]wie notify-send von systemd-unit an desktop se
Ich hab diese Funktion in einem extra file liegen, welches ich dann im Shell-Skript source.
Dann kannst du aus einem Systemdienst heraus, der nicht am Desktop läuft, alle User über notify-send am Desktop über ein Ereignis informieren.
Der Aufruf im Skript kann dann z.B. so lauten:
wobei vorher $ICON mit dem Pfad zum gewünschten Icon (am besten unter /usr/share/icons/...) belegt werden muss.
Ich kann nicht garantieren, dass der Schnipsel noch funktioniert, da ich ihn selber schon länger nicht mehr in Verwendung habe.
lg scientific
Dann kannst du aus einem Systemdienst heraus, der nicht am Desktop läuft, alle User über notify-send am Desktop über ein Ereignis informieren.
Code: Alles auswählen
dbusnotifying () {
export ICON=/usr/share/icons/gnome/32x32/actions/gnome-run.png
case $1 in
-i) shift; export ICON="$1"; shift;;
esac
export message="$@";
#who|awk '$NF ~ /:/{print $1}'|uniq|while read user
loginctl list-users|awk '$1 ~ /[0-9]*/ {print $2}'|sed '/^$/d;/USER/d;/user/d'|while read user
do
pids=`pgrep -u $user`
for pid in $pids; do
# find DBUS session bus for this session
grep -z DBUS_SESSION_BUS_ADDRESS \
/proc/$pid/environ 2>/dev/null | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'
echo
done|sort -u|uniq|sed -e '/^$/d'|while read DBUS_SESSION_BUS_ADDRESS
do # use it
export DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS"
[ -n $DBUS_SESSION_BUS_ADDRESS ] || continue
if [ x"$UID" == "x" ] ;then UID=0; fi
if [ `echo $UID` -gt 0 ];
then
/usr/bin/notify-send -t 3000 -i "$ICON" "`basename "/"$0|sed -e 's/^-//'`" "$message"
else
#echo x$UID
#su $user -c "notify-send -t 2000 -i "$ICON" '`basename "/"$0|sed -e 's/^-//'`' '$message' 2>/dev/null" 2>/dev/null
sudo -u $user /usr/bin/notify-send -t 2000 -i $ICON "`basename "/"$0|sed -e 's/^-//'`" "$message"
fi
test $? -eq 0 && break
#[ -z $DBUS_SESSION_BUS_ADDRESS ] || break
unset DBUS_SESSION_BUS_ADDRESS
done
done
}
Code: Alles auswählen
do something && dbusnotifying -i "$ICON" "message"
Ich kann nicht garantieren, dass der Schnipsel noch funktioniert, da ich ihn selber schon länger nicht mehr in Verwendung habe.
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
- Taomon
- Beiträge: 627
- Registriert: 08.03.2011 16:34:38
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: [umgangen]wie notify-send von systemd-unit an desktop se
vielen Dank scientific
Ich werde mal das Teil ausprobieren.
Gruß Taomon
Ich werde mal das Teil ausprobieren.
Gruß Taomon
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.