问题

问题

问题

我正在尝试使用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=Xdbus-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

相关内容