Ermitteln Sie den Eigentümer eines DBus-Dienstnamens

7

Ich kann keinen Weg finden, um herauszufinden, welches Programm den org.freedesktop.NotificationsDienst implementiert . Kann ich DBus bitten, mir mitzuteilen, welches Programm dies bietet?

Der Grund für diese Frage ist ziemlich banal: Ich habe einen neuen Desktop-Benachrichtigungs-Daemon gefunden, den ich verwenden möchte, der jedoch nicht gestartet wird und sich stattdessen mit dieser Nachricht beschwert

Name verloren. Wird ein anderer Benachrichtigungsdämon ausgeführt?

Aber ich bin nicht in der Lage zu bestimmen , welches Programm wird den Namen halten. Ich habe bereits jeden anderen Benachrichtigungsdämon deinstalliert, den X-Server neu gestartet und sogar den Computer neu gestartet.

Wenn ich jedoch diesen Befehl ausführe:

dbus-send --session --dest=org.freedesktop.DBus --type=method_call \
--print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames

string "org.freedesktop.Notifications"ist in der Ausgabe vorhanden, daher enthält etwas den Namen, und ich kann den gewünschten Dämon nicht starten.

Mael
quelle
1
Ich kenne keine Möglichkeit, diese Informationen generisch abzurufen, aber in diesem Fall wird der bestimmte Dienst, nach dem Sie fragen, normalerweise von einem Daemon bereitgestellt, der in Ihrer Desktop-Umgebung enthalten ist (Cinnamon, XFCE4 und MATE tun dies alle auf diese Weise). und es ist normalerweise etwas schwierig, den Desktop dazu zu bringen, einen anderen Benachrichtigungsdämon zu verwenden, wenn er mit einem Paket geliefert wird.
Austin Hemmelgarn
@AustinHemmelgarn Danke. Ich verwende AwesomeWM, das den Benachrichtigungsdämon nicht bündelt (ich bin mir nicht sicher, ich werde nachforschen, danke für den Hinweis).
Mael
1
Ich denke, AwesomeWM stellt den Dienst selbst intern bereit (zumindest scheint es bei Gentoo und Debian als Benachrichtigungsanbieter anerkannt zu sein). Wenn nicht, ist die wahrscheinlichste Möglichkeit "notify-osd", da dies der am häufigsten verwendete Desktop-agnostische Benachrichtigungsdämon ist.
Austin Hemmelgarn
@AustinHemmelgarn Du hast mich in die richtige Richtung gelenkt! Es genügte, require ("naughty") in Awesomes Konfiguration zu kommentieren, neu zu starten und den gewünschten Daemon zu starten.
Mael
1
@AustinHemmelgarn Ich weiß nicht, wie es geht, habe aber d-feeteine PID gefunden. Siehe meine Antwort.
Meuh

Antworten:

7

Das D-Bus-Debug-Dienstprogramm d-feet, das in vielen Systemen als Paket verfügbar ist, scheint in der Lage zu sein, die Prozess-ID und den Befehl zu finden, die einen Dienst bereitstellen. Ich habe es beispielsweise auf einer Fedora 23 xfce4 X11- Systemplattform ausgeführt und den Dienstnamen ausgewählt Session Busund eingegeben org.freedesktop.Notifications. Es überprüfte den Dienst, aktivierte ihn und zeigte die PID und den /usr/lib64/xfce4/notifyd/xfce4-notifydBefehl an:

vor der Aktivierung

nach der Aktivierung

meuh
quelle
7

Sie können den Anrufer erhalten PIDüber org.freedesktop.DBus.GetConnectionUnixProcessID:

gdbus call --session --dest org.freedesktop.DBus --object-path / --method \
org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.Notifications

druckt

(uint32 737,)

Also gibt es deine PID. Wenn Sie es vorziehen dbus-send(wie gdbuses GNOME-spezifisch ist), dann:

dbus-send --session --print-reply --dest=org.freedesktop.DBus / \
org.freedesktop.DBus.GetConnectionUnixProcessID string:org.freedesktop.Notifications
don_crissti
quelle