Проблема

Проблема

Проблема

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

Использование 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

Нашел ваш вопрос, когда искал ответ на свою собственную проблему. Ребята с 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

Связанный контент