Управление несколькими экземплярами одного и того же приложения с помощью 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
Другие вопросы по тегам