
Проблема
Я пытаюсь использовать его 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