web-dev-qa-db-fra.com

Contrôler plusieurs instances d'une même application avec dbus?

Le problème

J'essaie d'utiliser dbus pour contrôler plusieurs instances du lecteur multimédia VLC à partir du terminal.

L'utilisation de dbus pour une seule instance de VLC ne pose aucun problème: dès que VLC est démarré, des commandes comme Play/Pause,

dbus-send --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause

travailler comme prévu. Cependant, si je démarre une deuxième instance de VLC, aucun dbus-send les commandes sont toujours enregistrées par lui. La première instance enregistre toujours toutes les commandes correctement, mais la deuxième instance ne réagit pas.

Ce que j'ai essayé

dbus-launch vlc

J'ai essayé d'utiliser dbus-launch vlc. Utiliser uniquement dbus-launch crée une instance de bus de session et imprime son adresse d'identification unique. Vous pouvez même voir les instances en cours d'exécution à l'aide de ps -aux | grep dbus. En utilisant l'adresse, vous pouvez envoyer des commandes avec dbus-send --address=X.

Cependant, lorsque vous utilisez dbus-launch vlc, il n'imprimera pas les informations sur le nouveau bus vers la sortie standard (y compris son adresse d'identification). Donc, même si je pouvais lui envoyer des commandes en utilisant dbus-send, Je n'ai aucune idée de l'adresse à utiliser. Il n'y a aucun moyen de spécifier l'adresse que l'instance de bus de session d'actualités doit utiliser.

Si je pouvais en quelque sorte obtenir l'adresse de la nouvelle instance créée par dbus-launch, le problème serait (théoriquement) résolu.

dbus-daemon

Similaire à dbus-launch, vous pouvez utiliser dbus-daemon pour créer une instance de bus de session, mais vous pouvez également spécifier son adresse avec le --address=X drapeau. En utilisant dbus-send --address=X me donne cependant une erreur "Impossible d'ouvrir la connexion [...]", et même si je devais résoudre ce problème, je n'ai aucune idée de la façon de raccorder une instance VLC à cette instance de bus de session spécifique. Je ne sais pas comment procéder ici.

1
Mossmyr

J'ai trouvé votre question en cherchant une réponse à mon propre problème. Les gars de dbus IRC channel m'a aidé avec la réponse.

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc

Cela vous donnera les destinations que vous pouvez parcourir. Il les répertorie comme: 1.25: 1.26, donc votre dbus-send ressemblera à ceci (notez que les deux points sont nécessaires!) ...

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
1
AustinBrock