문제

문제

문제

dbus터미널에서 VLC 미디어 플레이어의 여러 인스턴스를 제어하는 ​​데 사용하려고 합니다 .

VLC의 단일 인스턴스를 사용하는 dbus것은 문제가 되지 않습니다. 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

내 문제에 대한 답을 찾는 동안 귀하의 질문을 찾았습니다. 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-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

관련 정보