Управление несколькими экземплярами того же приложения с dbus?

Проблема

Я пытаюсь использовать dbus управлять несколькими экземплярами VLC Media Player от терминала.

Используя dbus поскольку единственный экземпляр VLC не является никакой проблемой: как только VLC запускается, команды как Игра/Пауза,

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

работа как ожидалось. Однако, если я запускаю второй экземпляр VLC, нет dbus-send команды когда-либо регистрируются им. Первая инстанция все еще регистрирует все прекрасные команды, но второй экземпляр не реагирует.

Что я попробовал

dbus-запуск 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
задан 27 July 2017 в 21:51

1 ответ

Найденный Вашим вопросом при поиске решения моей собственной проблемы. Парни на dbus канале IRC выручили меня с ответом.

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-отправлять будет похож на это (обратите внимание, что двоеточие необходимо!)...

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
ответ дан 7 December 2019 в 15:32

Другие вопросы по тегам:

Похожие вопросы: