[umgangen]wie notify-send von systemd-unit an desktop senden

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
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

Beitrag von Taomon » 13.11.2016 12:31:49

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
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.

Benutzeravatar
smutbert
Moderator
Beiträge: 8317
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: wie notify-send von systemd-unit an desktop senden

Beitrag von smutbert » 13.11.2016 12:56:28

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

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 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

Benutzeravatar
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

Beitrag von Taomon » 14.11.2016 09:28:48

Mercy, smutbert

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"
gemountet wird jetzt über udisks2

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
und damit klappt auch der Info-bubble.

Jetzt muß ich bloß noch die Unit für das Backup-Skript ändern.


Gruß Taomon
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.

scientific
Beiträge: 3020
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

Beitrag von scientific » 14.11.2016 22:48:15

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
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

scientific
Beiträge: 3020
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

Beitrag von scientific » 14.11.2016 22:51:32

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...
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

Benutzeravatar
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

Beitrag von Taomon » 14.11.2016 23:45:09

Ja scientific das wäre nett. Vielleicht kann ich das für was anderes gebrauchen. :mrgreen:


Gruß Taomon
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.

scientific
Beiträge: 3020
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

Beitrag von scientific » 21.11.2016 02:05:13

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.

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
}
Der Aufruf im Skript kann dann z.B. so lauten:

Code: Alles auswählen

do something && dbusnotifying -i "$ICON" "message"
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 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

Benutzeravatar
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

Beitrag von Taomon » 21.11.2016 09:55:02

vielen Dank scientific

Ich werde mal das Teil ausprobieren.


Gruß Taomon
Bitte gelegentliche Schreibfehler übersehen. Ich habe ADHS. Danke.

Antworten