dbus
を使用して、ターミナルからVLCメディアプレーヤーの複数のインスタンスを制御しようとしています。
VLCの単一インスタンスにdbus
を使用しても問題ありません。VLCが起動するとすぐに、Play/Pauseなどのコマンド、
dbus-send --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
期待どおりに動作します。ただし、VLCの2番目のインスタンスを起動した場合、dbus-send
コマンドは登録されません。最初のインスタンスはすべてのコマンドを正常に登録しますが、2番目のインスタンスは反応しません。
dbus-launch vlc
を使用してみました。 dbus-launch
のみを使用すると、セッションバスインスタンスが作成され、一意の識別アドレスが出力されます。 ps -aux | grep dbus
を使用して実行中のインスタンスを確認することもできます。アドレスを使用して、dbus-send --address=X
を使用してコマンドを送信できます。
ただし、dbus-launch vlc
を使用する場合、新しいバスに関する情報を標準出力(識別アドレスを含む)に出力しません。したがって、coulddbus-send
を使用してコマンドを送信しても、使用するアドレスがわかりません。ニュースセッションバスインスタンスが使用するアドレスを指定する方法もありません。
dbus-launch
によって作成された新しいインスタンスのアドレスを何らかの方法で取得できれば、問題は(理論的には)解決されます。
dbus-launch
と同様に、dbus-daemon
を使用してセッションバスインスタンスを作成できますが、--address=X
フラグを使用してそのアドレスを指定することもできます。 dbus-send --address=X
を使用すると、「接続のオープンに失敗しました[...]」エラーが発生します。解決できたとしても、VLCインスタンスを特定のセッションバスインスタンスにフックする方法がわかりません。ここでの進め方がわかりません。
私自身の問題に対する答えを探している間にあなたの質問を見つけました。 dbus IRCチャンネルの人たちが答えを助けてくれました。
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc
これにより、ループできる宛先が提供されます。 :1.25:1.26のようにリストされているので、dbus-sendは次のようになります(コロンが必要です!)...
dbus-send --print-reply --dest=:1.25 /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
dbus-send --print-reply --dest=:1.26 /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause