
Das Problem
Ich versuche, dbus
mehrere Instanzen des VLC Media Players vom Terminal aus zu steuern.
Die Verwendung dbus
für eine einzelne Instanz von VLC ist kein Problem: Sobald VLC gestartet ist, werden Befehle wie Play/Pause,
dbus-send --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
funktioniert wie erwartet. Wenn ich jedoch eine zweite Instanz von VLC starte, dbus-send
werden von dieser keine Befehle registriert. Die erste Instanz registriert alle Befehle noch einwandfrei, aber die zweite Instanz reagiert nicht.
Was ich versucht habe
Dbus-Start VLC
Ich habe versucht, zu verwenden dbus-launch vlc
. Durch die Verwendung wird nur dbus-launch
eine Session-Bus-Instanz erstellt und ihre eindeutige Identifikationsadresse gedruckt. Sie können sogar die ausgeführten Instanzen sehen, indem Sie verwenden ps -aux | grep dbus
. Mithilfe der Adresse können Sie Befehle mit senden dbus-send --address=X
.
Wenn ich jedoch verwende dbus-launch vlc
, werden die Informationen über den neuen Bus (einschließlich seiner Identifikationsadresse) nicht auf die Standardausgabe gedruckt. Selbst wenn ich alsokönnteBefehle an ihn senden mit dbus-send
, ich habe keine Ahnung, welche Adresse ich verwenden soll. Es gibt auch keine Möglichkeit anzugeben, welche Adresse die News-Session-Bus-Instanz verwenden soll.
Wenn ich irgendwie die Adresse der neuen von erstellten Instanz erhalten könnte dbus-launch
, wäre das Problem (theoretisch) gelöst.
Dbus-Daemon
Ähnlich wie dbus-launch
können Sie dbus-daemon
eine Session-Bus-Instanz erstellen, aber Sie können ihre Adresse auch mit dem --address=X
Flag angeben. Wenn Sie dbus-send --address=X
jedoch verwenden, wird mir der Fehler „Verbindung konnte nicht geöffnet werden [...]“ angezeigt, und selbst wenn ich das lösen würde, habe ich keine Ahnung, wie ich eine VLC-Instanz an diese spezielle Session-Bus-Instanz anschließen kann. Ich weiß nicht, wie ich hier weitermachen soll.
Antwort1
Ich habe Ihre Frage gefunden, als ich nach einer Antwort auf mein eigenes Problem gesucht habe. Die Leute im IRC-Kanal dbus haben mir mit der Antwort geholfen.
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc
Dadurch erhalten Sie die Ziele, die Sie durchlaufen können. Sie werden wie folgt aufgelistet: :1.25 :1.26, sodass Ihr dbus-send folgendermaßen aussieht (beachten Sie, dass der Doppelpunkt erforderlich ist!)...
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