Управление несколькими экземплярами одного и того же приложения с помощью dbus?
Эта проблема
Я пытаюсь использовать dbus
управлять несколькими экземплярами медиаплеера VLC из терминала.
С помощью dbus
для отдельного экземпляра VLC нет проблем: как только VLC запускается, такие команды, как Play/Pause,
dbus-send --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
работать как положено. Однако, если я начну второй экземпляр VLC, нет dbus-send
команды когда-либо регистрируются им. Первый экземпляр по-прежнему регистрирует все команды нормально, но второй экземпляр не реагирует.
Что я пробовал
dbus-launch 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=X
флаг. С помощью dbus-send --address=X
дает мне ошибку "Не удалось открыть соединение [...]", и даже если бы мне пришлось решить, что я понятия не имею, как подключить экземпляр VLC к этому конкретному экземпляру шины сеанса. Я не знаю, как действовать здесь.
1 ответ
Нашел свой вопрос, когда искал ответ на свою проблему. Ребята из IRC канала dbus помогли мне с ответом.
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