VLCインスタンスを1つだけ実行している場合は、org.mpris.MediaPlayer2.vlcをターゲットとして使用してdbus-sendを介してVLCと通信できます。
$ dbus-send --dest=org.mpris.MediaPlayer2.vlc ...
2つのVLCインスタンスが実行されている場合、ターゲットxxxxとyyyyは異なります。これらのうちの1人と話すには、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のようです。
しかし、2番目のインスタンスのターゲットをどのように取得できますか?
答え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という2番目のサービスがあることがわかります。
最初の VLC インスタンスは PID 91266 にあり、2 番目の VLC インスタンスは PID 91361 にあります。
私の例では、次のように呼び出されました。
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListQueuedOwners string:org.mpris.MediaPlayer2.vlc.instance91361
2番目のケースに関する情報を提供します。
- - - - - - ちなみに
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"
- ビデオを2番目に開きます。
呼び出し構文:
=============
SERVICE OBJECT INTERFACE METHOD [SIGNATURE [ARGUMENT...]]を呼び出して
詳細を確認してください。 - Busctl - ヘルプを参照してください。
良い一日をお過ごしください!