web-dev-qa-db-ja.com

DBusサービス名の所有者を見つける

どのプログラムがorg.freedesktop.Notificationsサービスを実装しているかを見つける方法が見つかりません。 DBusに、どのプログラムがそれを提供するかを教えてもらうことは可能ですか?

この質問をする理由は非常にありふれたものです。使用したい新しいデスクトップ通知デーモンを見つけましたが、起動せず、代わりにこのメッセージが表示されます。

名前を失った。別の通知デーモンが実行されていますか?

ただし、名前を保持しているプログラムisを特定できません。他の通知デーモンはすべてアンインストールし、Xサーバーを再起動し、マシンを再起動しました。

ただし、このコマンドを実行すると:

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

string "org.freedesktop.Notifications"が出力に含まれているため、somethingが名前を保持しているため、目的のデーモンを起動できません。

7
Mael

多くのシステムでパッケージとして利用可能なd-busデバッグユーティリティ d-feet は、サービスを提供するプロセスIDとコマンドを見つけることができるようです。たとえば、Fedora 23 xfce4 X11 systemdプラットフォームで実行し、Session Busを選択して、サービス名org.freedesktop.Notificationsを入力しました。サービスをイントロスペクトしてアクティブ化し、pidおよび/usr/lib64/xfce4/notifyd/xfce4-notifydコマンドを示しました。

before activation

after activation

7
meuh

呼び出し元PIDorg.freedesktop.DBus.GetConnectionUnixProcessID

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

プリント

(uint32 737,)

あなたのPIDがあります。 dbus-sendgdbusはGNOME固有であるため)次に、

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