
問題
我正在嘗試dbus
從終端控制 VLC 媒體播放器的多個實例。
用於dbus
VLC 的單一實例沒有問題:一旦 VLC 啟動,諸如播放/暫停之類的命令,
dbus-send --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
按預期工作。但是,如果我啟動 VLC 的第二個實例,dbus-send
它就不會註冊任何命令。第一個實例仍然可以正常註冊所有命令,但第二個實例沒有反應。
我嘗試過的
dbus 啟動 VLC
我嘗試過使用dbus-launch vlc
.使用 onlydbus-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