问题
我正在尝试使用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
。使用 只会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