VLC 인스턴스를 하나만 실행하는 경우 org.mpris.MediaPlayer2.vlc를 대상으로 사용하여 dbus-send를 통해 VLC와 통신할 수 있습니다.
$ dbus-send --dest=org.mpris.MediaPlayer2.vlc ...
두 개의 VLC 인스턴스가 실행 중인 경우 대상 xxxx와 yyyy가 다릅니다. 이들 중 한 명과 대화하려면 xxxx 또는 yyyy를 대상으로 사용해야 합니다.
$ dbus-send --dest=:xxxx ...
다음을 통해 첫 번째 인스턴스의 대상을 찾을 수 있습니다.
$ dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBusorg.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc
method return time=1702494718.199915 sender=org.freedesktop.DBus -> destination=:1.1256 serial=3 reply_serial=2
array [
string ":1.1251"
]
그러면 목적지는 1.1251인 것으로 보입니다.
그런데 두 번째 인스턴스의 대상을 어떻게 얻을 수 있습니까?
답변1
나는 항상 전체 dbus 정보를 얻기 위해 Busctl을 사용합니다.
시스템 버스(busctl --system) 및 세션 버스(busctl --user) 또는 전체 목록(busctl -l)
입력이 있습니다.
busctl --user | grep "vlc"
그러면 다음과 같은 것을 얻게 될 것입니다.
:1.641 91266 vlc xxxxx :1.641 session-c2.scope c2 -
:1.642 91266 vlc xxxxx :1.642 session-c2.scope c2 -
:1.643 91266 vlc xxxxx :1.643 session-c2.scope c2 -
:1.644 91266 vlc xxxxx :1.644 session-c2.scope c2 -
:1.654 91361 vlc xxxxx :1.654 session-c2.scope c2 -
:1.655 91361 vlc xxxxx :1.655 session-c2.scope c2 -
:1.656 91361 vlc xxxxx :1.656 session-c2.scope c2 -
:1.657 91361 vlc xxxxx :1.657 session-c2.scope c2 -
org.kde.StatusNotifierItem-91266-2 91266 vlc xxxxx :1.644 session-c2.scope c2 -
org.kde.StatusNotifierItem-91361-2 91361 vlc xxxxx :1.657 session-c2.scope c2 -
org.mpris.MediaPlayer2.vlc 91266 vlc xxxxx :1.641 session-c2.scope c2 -
org.mpris.MediaPlayer2.vlc.instance91361 91361 vlc xxxxx :1.654 session-c2.scope c2
org 파일은 활성 서비스입니다.
org.mpris.MediaPlayer2.vlc.instance91361이라는 두 번째 서비스가 있음을 알 수 있습니다.
첫 번째 VLC 인스턴스는 PID 91266에 있고 두 번째 VLC 인스턴스는 PID 91361에 있습니다.
내 예에서는 다음과 같이 호출되었습니다.
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc.instance91361
두 번째 사례에 대한 정보를 제공합니다.
- - - - - - 덧붙여서
dbus 서비스에 대한 객체 트리를 확인할 수 있습니다.
busctl --user tree org.mpris.MediaPlayer2.vlc.instance91361
당신은 다음을 얻습니다:
└─/org
└─/org/mpris
└─/org/mpris/MediaPlayer2
그런 다음 개체를 검사할 수도 있습니다.
busctl --user introspect org.mpris.MediaPlayer2.vlc.instance91361 /org/mpris/MediaPlayer2
산출:
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
org.mpris.MediaPlayer2 interface - - -
.Quit method - - -
.Raise method - - -
.CanQuit property b true emits-change
.CanRaise property b false emits-change
.CanSetFullscreen property b false emits-change
.DesktopEntry property s "vlc" emits-change
.Fullscreen property b false emits-change writable
.HasTrackList property b false emits-change
.Identity property s "VLC media player" emits-change
.SupportedMimeTypes property as 29 "audio/mpeg" "audio/x-mpeg" "video/m… emits-change
.SupportedUriSchemes property as 21 "file" "http" "https" "rtsp" "realrt… emits-change
org.mpris.MediaPlayer2.Player interface - - -
.Next method - - -
.OpenUri method s - -
.Pause method - - -
.Play method - - -
.PlayPause method - - -
.Previous method - - -
.Seek method x - -
.SetPosition method ox - -
.Stop method - - -
.CanControl property b true emits-change
.CanPause property b false emits-change
.CanPlay property b false emits-change
.CanSeek property b false emits-change
.LoopStatus property s "None" emits-change writable
.MaximumRate property d 32 emits-change writable
.Metadata property a{sv} 0 emits-change
.MinimumRate property d 0.032 emits-change writable
.PlaybackStatus property s "Stopped" emits-change
.Position property i 0 emits-change
.Rate property d 1 emits-change writable
.Shuffle property d false emits-change writable
.Volume property d 0 emits-change writable
org.mpris.MediaPlayer2.TrackList interface - - -
.AddTrack method sob - -
.GetTracksMetadata method ao aa{sv} -
.GoTo method o - -
.RemoveTrack method o - -
.CanEditTracks property b true emits-change
.Tracks property ao 0 emits-change
.TrackAdded signal a{sv}o - -
.TrackListReplaced signal aoo - -
.TrackMetadataChanged signal oa{sv} - -
.TrackRemoved signal o - -
정의된 모든 인터페이스와 메소드가 표시됩니다.
예를 들어 인터페이스 org.mpris.MediaPlayer2.Player에서 "OpenUri" 메서드를 가져옵니다.
busctl --user call org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player OpenUri s "your url"
-- 먼저 비디오를 엽니다
busctl --user call org.mpris.MediaPlayer2.vlc.instance91361 /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player OpenUri s "your url"
-- 동영상을 두 번째로 엽니다.
호출 구문:
=============
SERVICE OBJECT INTERFACE METHOD [SIGNATURE [ARGUMENT...]]를 호출하여
자세한 내용을 확인하세요. - Busctl - 도움말을 참조하세요.
좋은 하루 보내세요!