1

をハックする過程で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

この時点で、私の最善の推測は次のとおりです。

  1. (コマンドの終了によりdbus-send) 接続が閉じられると、作成した ServiceBrowser は破棄されます。dbus-monitorただし、これは、Python スクリプトとアクティブに通信している ServiceBrowser に接続できない理由を説明していません 。
  2. ServiceBrowser からのシグナルは、それらをインスタンス化した接続にのみ送信されます。
4

0 に答える 0