Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Diskussion rund um unser Wiki.
scientific
Beiträge: 2759
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von scientific » 11.01.2018 01:21:07

Hi Leute!

Ich hab einen neuen Artikel über Desktop-Notifications von Hintergrund- und System-Services geschrieben, welche das Problem elegant löst, dass man notify-send für jeden einzelnen eingeloggten User separat mittels sudo oder runuser ausführen muss und zuvor testen ob die Session auch tatsächlich eine graphische Session ist.

Wiki-Artikel zum Thema Desktop-Notification_von_Systemservice_mittels_dbus

Bitte um Test und Ergänzung/Korrektur.

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
smutbert
Beiträge: 5963
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von smutbert » 11.01.2018 23:46:18

Danke
(und schade, dass etwas vergleichbares bei Debian/freedesktop.org/... nicht schon von Haus dabei ist, so muss jeder Dienst seinen eigenen „notification-daemon-Clientdienst“ mitbringen, zum Beispiel Debianapparmor-notify).

Benutzeravatar
inne
Beiträge: 1846
Registriert: 25.06.2013 15:45:12
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von inne » 12.01.2018 14:10:41

Code: Alles auswählen

inne@mydebian:~
$ dbus-send Testmessage Body
Must use org.mydomain.Interface.Signal notation, no dot in "Body"
EXIT STATUS: 1
inne@mydebian:~
$ 

Code: Alles auswählen

inne@mydebian:~
$ /usr/local/bin/desktop-notify.py
  File "/usr/local/bin/desktop-notify.py", line 5
    systembus = dbus.SystemBus()|sessionbus = dbus.SessionBus()
SyntaxError: can't assign to operator
EXIT STATUS: 1
inne@mydebian:~
$ 
Mehr konnte ich nicht testen, weil das obige ja schon bei mir nicht funktioniert!

Und was ich auch nicht verstehe ist, das im Kapitel "User-Dienst der Graphischen Session" und "Senden der Message an den Systembus von der Shell" beide Skripte /usr/local/bin/desktop-notify.py als Pfad haben. Sind das nicht zwei verscheide? Einmal der Deamon und einmal das Programm...
(=_=)

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

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von smutbert » 12.01.2018 23:46:53

Den ersten Fehler wird man los indem man statt »systembus = dbus.SystemBus()|sessionbus = dbus.SessionBus()«

Code: Alles auswählen

systembus = dbus.SystemBus()
sessionbus = dbus.SessionBus()
schreibt.

Der Client-Teil läuft dann fehlerfrei, aber löst leider noch keine Benachrichtigungen aus. Ich weiß noch nicht was ich hier übersehe (sonst würde ich im Wikiartikel mitmischen).

Dass die Pfade übereinstimmen ist tatsächlich etwas unglücklich.

Benutzeravatar
inne
Beiträge: 1846
Registriert: 25.06.2013 15:45:12
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von inne » 13.01.2018 00:12:16

smutbert hat geschrieben: ↑ zum Beitrag ↑
12.01.2018 23:46:53
Dass die Pfade übereinstimmen ist tatsächlich etwas unglücklich.
Da kann scientific ja einfach dein "d" an den Namen des Deamon anhängen. Ansonsten wäre es schön den Artikel technisch fehlerfrei zu bekommen, weil das kann man gut brauchen!

Schöne Idee, ich habe da gleich 2mal Verwendung für :-)
(=_=)

Benutzeravatar
jph
Beiträge: 267
Registriert: 06.12.2015 15:06:07
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Greven/Westf.

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von jph » 13.01.2018 08:05:55

Hier (Stretch 64 Bit mit GNOME) der gleiche Fehler:

Code: Alles auswählen

jan@x220:~$ dbus-send Testmessage Body
Must use org.mydomain.Interface.Signal notation, no dot in "Body"
Da müsste der Artikel m.E. überarbeitet werden.

Was mir auch nicht ganz klar ist, was der Lauschdienst ist. Ist das „nur“ ein Vehikel, um die Nachricht auf den Bus zu legen?

One more thing: Ich würde mir an deiner Stelle, wenn der Artikel fertig ist, noch mal die Gliederung vornehmen. Aktuell wiederholst du den Namen des Artikels als erste Überschrift und hängst da alle weiteren Überschriften drunter. Ich würde mit einer Einleitung/Zielsetzung des Artikels beginnen (die kann der Leser überfliegen und weiß dann, ob der Artikel für ihn relevant ist) und die Grundlagen und die Umsetzung in gleichgeordneten Folgeabschnitten unterbringen, die du wiederum unterteilen kannst.

Benutzeravatar
inne
Beiträge: 1846
Registriert: 25.06.2013 15:45:12
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von inne » 13.01.2018 12:14:26

smutbert hat geschrieben: ↑ zum Beitrag ↑
12.01.2018 23:46:53
Den ersten Fehler wird man los indem man statt »systembus = dbus.SystemBus()|sessionbus = dbus.SessionBus()«

Code: Alles auswählen

systembus = dbus.SystemBus()
sessionbus = dbus.SessionBus()
schreibt.

Der Client-Teil läuft dann fehlerfrei, aber löst leider noch keine Benachrichtigungen aus. Ich weiß noch nicht was ich hier übersehe (sonst würde ich im Wikiartikel mitmischen).
Das liegt aber nur noch am letzten Skript aus "Senden der Message an den Systembus aus einem Python3-Programm", denn das " Senden der Message an den Systembus von der Shell" funktioniert dann.der Message an den Systembus von der Shell" funktioniert dann.

Code: Alles auswählen

$ dbus-send --system /my/desktop my.desktop.Notification string:test string:bla
(=_=)

Benutzeravatar
inne
Beiträge: 1846
Registriert: 25.06.2013 15:45:12
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von inne » 13.01.2018 12:18:21

jph hat geschrieben: ↑ zum Beitrag ↑
13.01.2018 08:05:55
Hier (Stretch 64 Bit mit GNOME) der gleiche Fehler:

Code: Alles auswählen

jan@x220:~$ dbus-send Testmessage Body
Must use org.mydomain.Interface.Signal notation, no dot in "Body"
Da müsste der Artikel m.E. überarbeitet werden.
Ist hier vlt. sogar notify-send(1) aus Debianlibnotify-bin gemeint und nicht dbus-send?
(=_=)

Benutzeravatar
habakug
Moderator
Beiträge: 3985
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von habakug » 13.01.2018 14:14:55

inne hat geschrieben: ↑ zum Beitrag ↑
13.01.2018 12:18:21
Ist hier vlt. sogar notify-send(1) aus Debianlibnotify-bin gemeint und nicht dbus-send?
Ja. [1]

Gruss, habakug

[1] https://wiki.archlinux.org/index.php/De ... ifications
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

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

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von smutbert » 13.01.2018 15:39:51

inne hat geschrieben: ↑ zum Beitrag ↑
13.01.2018 12:14:26
[…]
Das liegt aber nur noch am letzten Skript aus "Senden der Message an den Systembus aus einem Python3-Programm", denn das " Senden der Message an den Systembus von der Shell" funktioniert […]
Ja, bis dorthin habe ich den Artikel jetzt inklusive notify-send korrigiert und hoffentlich keine neuen Fehler eingebaut.

scientific
Beiträge: 2759
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von scientific » 13.01.2018 20:47:39

Vielen Dank für eure Anmerkungen und Korrekturen.
Ich komm beruflich grad weniger dazu ins Debianforum zu schreiben.

Ich checks nochmal mit meiner Lösung quer, was ich da falsch getippt hab.

Ich mein übrigens schon dbus-send. Das sendet auch an den Systembus und kann vom Serviceskript als root benutzt werden.
Notify-send funzt ja nur innerhalb einer Session eines einzelnen Users.
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
smutbert
Beiträge: 5963
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von smutbert » 13.01.2018 21:04:55

scientific hat geschrieben: ↑ zum Beitrag ↑
13.01.2018 20:47:39
[…]
Ich mein übrigens schon dbus-send. Das sendet auch an den Systembus und kann vom Serviceskript als root benutzt werden.
Notify-send funzt ja nur innerhalb einer Session eines einzelnen Users.
Dort wo du es tatsächlich meinst hat es niemand angezweifelt.

Gemeint ist es im Absatz zum Testen ob ein notification-daemon läuft - dort hast du imho schon notify-send gemeint (dort hab ich im Artikel auch dbus-send durch notify-send ersetzt). (Mir ist zuerst nur aufgefallen, dass die Befehlsoptionen nicht zu dbus-send passen, dass sie aber zu notify-send passen ist mir erst aufgefallen, nachdem Inne und Habakug es geschrieben haben).
Zuletzt geändert von smutbert am 13.01.2018 21:19:46, insgesamt 1-mal geändert.

scientific
Beiträge: 2759
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von scientific » 13.01.2018 21:19:04

Ja da hast du recht.
Bin noch nicht ganz bei der Sache... :)
Etwas später hab ich dann Ruhe und Muse, alles zu lesen und zu überarbeiten.

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: 2759
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von scientific » 13.01.2018 21:47:30

smutbert hat geschrieben: ↑ zum Beitrag ↑
11.01.2018 23:46:18
Danke
(und schade, dass etwas vergleichbares bei Debian/freedesktop.org/... nicht schon von Haus dabei ist, so muss jeder Dienst seinen eigenen „notification-daemon-Clientdienst“ mitbringen, zum Beispiel Debianapparmor-notify).
na das ist ja ein ganz schön umfangreiches Progrämmchen... Aber ich vermute, der tut auch nix anderes, als etwas auf Systembus schreiben, was dann am Sesseinbus abgefangen wird um es an einen Notification-Daemon weiterzuleiten...

Da ich perl nicht wirklich kann, tut ich mir schwer, das Programm jetzt näher zu analysieren.

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: 2759
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Neuer Wiki-Artikel über Desktop-Notifications von System-Services mittels dbus

Beitrag von scientific » 13.01.2018 21:55:58

jph hat geschrieben: ↑ zum Beitrag ↑
13.01.2018 08:05:55
Hier (Stretch 64 Bit mit GNOME) der gleiche Fehler:

Code: Alles auswählen

jan@x220:~$ dbus-send Testmessage Body
Must use org.mydomain.Interface.Signal notation, no dot in "Body"
Da müsste der Artikel m.E. überarbeitet werden.

Was mir auch nicht ganz klar ist, was der Lauschdienst ist. Ist das „nur“ ein Vehikel, um die Nachricht auf den Bus zu legen?

One more thing: Ich würde mir an deiner Stelle, wenn der Artikel fertig ist, noch mal die Gliederung vornehmen. Aktuell wiederholst du den Namen des Artikels als erste Überschrift und hängst da alle weiteren Überschriften drunter. Ich würde mit einer Einleitung/Zielsetzung des Artikels beginnen (die kann der Leser überfliegen und weiß dann, ob der Artikel für ihn relevant ist) und die Grundlagen und die Umsetzung in gleichgeordneten Folgeabschnitten unterbringen, die du wiederum unterteilen kannst.
Wie schon korrekt angemerkt und korrigiert (danke @smutbert) ist es notify-send und nicht dbus-send in diesem Falle.

Der "Lauschdienst" tut nix anderes als in einer graphischen Session am Systembus zu lauschen und Messages von dort übersetzen und an den Notification-Daemon dieser Session wiederum über dbus weiterzusenden.
Wie schon in der Einleitung des Artikels erläutert ist das Notwendig, da man von einem Systemdienst aus, der über cron, systemd oder ähnliches als root oder ein anderer User gestartet nicht direkt auf jeden einzelnen Notification-Daemon zugreifen kann - oder nur äußerst umständlich mit dem Auslesen der angemeldeten User, dem suchen der grafischen Sessions dieses Users und dann das Auslesen von Environment-Variablen. Das funktioniert einfach nicht zuverlässig, weil es von der verschiedenen Session- und Loginmanagern abhängt, wie man all diese Werte kriegt.

Daher sendet der Service eine Message an den SystemBus von dbus. Der Lauschdienst in jeder einzelnen Session lauscht am Systembus, ob eine Nachricht an ihn gerichtet kommt und leitet diese dann (ein wenig weiterverarbeitet - das genaue Design hängt vom Anwendungsfall ab) an den Notification-Daemon weiter, der dann die Message am Desktop darstellt.
Dieses Design funktioniert immer, wenn dbus installiert und gestartet ist (Soweit ich weiß, ist das in so gut wie allen modernen Linux-Systemen der Fall) und ein Notification-Daemon in der graphischen Session läuft.

Die Gliederung werd ich mir nochmal genauer zu Gemüte führen. Danke für die Hinweise!

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

Antworten