Controlando múltiplas instâncias do mesmo aplicativo com dbus?

1

O problema

Estou tentando usar dbus para controlar várias instâncias do VLC media player a partir do terminal.

Usar dbus para uma única instância do VLC não é problema: assim que o VLC é iniciado, comandos como Reproduzir / Pausar,

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

trabalhe como esperado. No entanto, se eu iniciar uma segunda instância do VLC, nenhum comando dbus-send será registrado por ela. A primeira instância ainda registra todos os comandos bem, mas a segunda instância não reage.

O que eu tentei

dlc-launch vlc

Eu tentei usar dbus-launch vlc . Usar somente dbus-launch cria uma instância de barramento de sessão e imprime seu endereço de identificação exclusivo. Você pode até ver as instâncias em execução usando ps -aux | grep dbus . Usando o endereço, você pode enviar comandos com dbus-send --address=X .

No entanto, ao usar dbus-launch vlc , ele não imprimirá as informações sobre o novo barramento na saída padrão (incluindo seu endereço de identificação). Então, mesmo que eu pudesse enviar comandos para ele usando dbus-send , não tenho idéia de qual endereço usar. Não há como especificar o endereço que a instância de barramento de sessão de notícias deve usar.

Se eu conseguisse de alguma forma obter o endereço da nova instância criada por dbus-launch , o problema seria (teoricamente) resolvido.

dbus-daemon

Semelhante a dbus-launch , você pode usar dbus-daemon para criar uma instância de barramento de sessão, mas também pode especificar seu endereço com o sinalizador --address=X . Usar o dbus-send --address=X me dá um erro de "Falha ao abrir [...] a conexão", e mesmo se eu resolvesse isso, não teria idéia de como ligar uma instância do VLC àquela instância de barramento de sessão específica. Eu não sei como proceder aqui.

    
por Mossmyr 27.07.2017 / 20:51

1 resposta

1

Encontrou sua pergunta enquanto procurava por uma resposta para o meu próprio problema. Os caras do canal dbus IRC me ajudaram com a resposta.

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc

Isso lhe dará os destinos pelos quais você pode percorrer. Ele os lista como: 1.25: 1.26, então seu dbus-send ficará assim (note que o cólon é necessário!) ...

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
    
por AustinBrock 09.08.2017 / 00:36