
問題
dbus
ターミナルから VLC メディア プレーヤーの複数のインスタンスを制御するために使用しようとしています。
dbus
VLCの単一インスタンスで使用するのは問題ありません。VLCを起動するとすぐに、再生/一時停止などのコマンドが実行されます。
dbus-send --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
期待通りに動作します。ただし、VLC の 2 番目のインスタンスを起動すると、dbus-send
コマンドが登録されません。最初のインスタンスは引き続きすべてのコマンドを正常に登録しますが、2 番目のインスタンスは反応しません。
私が試したこと
dbus-vlc を起動する
を使ってみましたdbus-launch vlc
。 を使用すると、dbus-launch
セッション バス インスタンスが作成され、その一意の識別アドレスが印刷されるだけです。 を使用すると、実行中のインスタンスを確認することもできますps -aux | grep dbus
。 アドレスを使用すると、 でコマンドを送信できますdbus-send --address=X
。
しかし、 を使用するとdbus-launch vlc
、新しいバスに関する情報(識別アドレスを含む)が標準出力に出力されません。そのため、できたを使用してコマンドを送信しますがdbus-send
、どのアドレスを使用すればよいかわかりません。ニュース セッション バス インスタンスが使用するアドレスを指定する方法もありません。
によって作成された新しいインスタンスのアドレスを何らかの方法で取得できればdbus-launch
、問題は(理論的には)解決されます。
dbusデーモン
と同様にdbus-launch
、 を使用してdbus-daemon
セッション バス インスタンスを作成できますが、 フラグを使用してそのアドレスを指定することもできます--address=X
。 を使用すると、dbus-send --address=X
「接続を開けませんでした [...]」というエラーが発生しますが、これを解決できたとしても、VLC インスタンスをその特定のセッション バス インスタンスに接続する方法がわかりません。ここでどのように進めればよいかわかりません。
答え1
自分の問題に対する答えを探しているときに、あなたの質問を見つけました。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