をハックする過程でdbus-monitor
、Avahi デーモンに接続してみました。
$ dbus-monitor --system \
"type='signal',interface='org.freedesktop.Avahi.Server',member='StateChanged'"
これは、Avahi デーモンの状態の変化に対応します。
$ sudo restart avahi-daemon
signal sender=org.freedesktop.DBus ->
dest=:1.315
serial=2
path=/org/freedesktop/DBus;
interface=org.freedesktop.DBus;
member=NameAcquired
string ":1.315"
signal sender=:1.318 ->
dest=(null destination)
serial=4
path=/;
interface=org.freedesktop.Avahi.Server;
member=StateChanged
int32 1
string "org.freedesktop.Avahi.Success"
signal sender=:1.318 ->
dest=(null destination)
serial=13
path=/;
interface=org.freedesktop.Avahi.Server;
member=StateChanged
int32 2
string "org.freedesktop.Avahi.Success"
しかし、このようなサービスを閲覧することはできません。
$ dbus-send --system --dest=org.freedesktop.Avahi --print-reply \
/ org.freedesktop.Avahi.Server.ServiceBrowserNew \
int32:-1 int32:-1 string:'_http._tcp' string:'local' uint32:0
method return sender=:1.345 ->
dest=:1.354
reply_serial=2
object path "/Client5/ServiceBrowser1"
$ dbus-monitor --system \
"type='signal',interface='org.freedesktop.Avahi.ServiceBrowser'"
私の知る限り、これは新しい/削除された http サービス インスタンスに応答するはずですが、応答しません。
なんで?
アップデート:
上記のシェル コマンドと同等のコマンドを python および c API で実行すると、期待どおりに機能しました。しかし、彼らは私が構築した ServiceBrowser に接続できず、彼らが構築した ServiceBrowser をリッスンするためにdbus-send
使用できませんでした。dbus-monitor
この時点で、私の最善の推測は次のとおりです。
- (コマンドの終了により
dbus-send
) 接続が閉じられると、作成した ServiceBrowser は破棄されます。dbus-monitor
ただし、これは、Python スクリプトとアクティブに通信している ServiceBrowser に接続できない理由を説明していません 。 - ServiceBrowser からのシグナルは、それらをインスタンス化した接続にのみ送信されます。