我试图编写一个程序,它将通过D-Bus与VLC交互。
当一个VLC实例正在运行时,我可以在shell中执行这样的事情
qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play
VLC按预期暂停和恢复。大。
如果有多个VLC实例在运行,如何选择将命令发送到哪个实例怎么办?我知道它的PID。 DBus客户端不必是qdebus。
答案 0 :(得分:0)
没有
每个d-bus连接都有唯一的名称,您可以稍后使用org.freedesktop.DBus.RequestName
调用请求其他名称,但它也必须是唯一的。见" message bus names"规范的一部分。请注意,一个进程可以创建多个到总线的连接(因此有多个与之关联的名称)
进行d-bus函数调用时,使用服务名称,对象路径,接口名称和方法名称。第一个由总线守护程序用于路由您的消息,服务本身决定如何解释消息的路径/接口/方法/参数部分。
你可以通过另一种方式获得pid:行为良好的dbus客户端必须支持org.freedesktop.DBus
接口,并且你有org.freedesktop.DBus.GetConnectionUnixProcessID
。您可以迭代所有连接(ListNames
方法)并将连接pid与您拥有的连接进行比较。这并不能保证一对一的映射。