問題

問題

問題

我正在嘗試dbus從終端控制 VLC 媒體播放器的多個實例。

用於dbusVLC 的單一實例沒有問題:一旦 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

相關內容