如果您只运行一个 VLC 实例,您可以使用 org.mpris.MediaPlayer2.vlc 作为目标,通过 dbus-send 与 VLC 通信:
$ dbus-send --dest=org.mpris.MediaPlayer2.vlc ...
如果您有两个正在运行的 VLC 实例,它们具有不同的目标 xxxx 和 yyyy。如果您想与其中之一交谈,则必须使用 xxxx 或 yyyy 作为目的地:
$ dbus-send --dest=:xxxx ...
我可以通过以下方式找到第一个实例的目的地:
$ dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBusorg.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc
method return time=1702494718.199915 sender=org.freedesktop.DBus -> destination=:1.1256 serial=3 reply_serial=2
array [
string ":1.1251"
]
然后我看到目的地是1.1251
但是我如何才能获得第二个实例的目的地呢?
我总是使用busctl来获取完整的dbus信息。
有一个系统总线(busctl --system)和一个会话总线(busctl --user)或完整列表(busctl -l)
输入:
busctl --user | grep "vlc"
然后你会得到这样的东西
org 文件是活动服务。
您会看到有第二个服务名为 org.mpris.MediaPlayer2.vlc.instance91361
第一个 vlc 实例位于 PID 91266 上,第二个 vlc 实例位于 PID 91361 上
在我的示例中调用:
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc.instance91361
将为您提供有关第二个实例的信息
- - - - - - 顺便一提
您可以检查对象树的 dbus 服务
busctl --user tree org.mpris.MediaPlayer2.vlc.instance91361
你得到:
那么你也可以内省对象
busctl --user introspect org.mpris.MediaPlayer2.vlc.instance91361 /org/mpris/MediaPlayer2
输出:
您会看到所有定义的接口和方法。
例如,让我们从接口中获取“OpenUri”方法:org.mpris.MediaPlayer2.Player
busctl --user call org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player OpenUri s "your url"
-- 将首先打开视频
busctl --user call org.mpris.MediaPlayer2.vlc.instance91361 /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player OpenUri s "your url"
-- 将在第二次打开视频
call 语法:
============
call SERVICE OBJECT INTERFACE METHOD [SIGNATURE [ARGUMENT...]]
了解更多信息 - 请参阅busctl - 帮助
祝你今天过得愉快!