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.
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.
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.
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