dbusを使用して現在再生中のメディアプレーヤーの名前を取得します。

dbusを使用して現在再生中のメディアプレーヤーの名前を取得します。

編集:質問を直接作成し、投稿を短くするために、ほとんどの投稿を削除して再作成しました。もちろん、以前のバージョンの編集履歴も見ることができます。

Arch Linuxではbspwmを使用します。playerctlメディアを制御するには、sxhkdメディアキーをplayerctlコマンドにバインドします。

最新のアクティブメディアプレーヤーを取得する方法を見つけようとしているので、メディアキーを使用して曲/映画を再生/一時停止すると、コンピュータは自動的に最新のアクティブメディアプレーヤーを制御します。

たとえば、Spotifyがバックグラウンドで開いていてVLCで何かを見ているときにメディアキーを押すと、SpotifyがSpotifyの代わりにVLCを制御することがわかります。これで両方を開くと、VLCは常にplayerctlで優先順位を持ちます。

私にとって必要なのは、現在どのメディアプレーヤーが曲を再生しているかをdbusに尋ねてファイルに保存する方法です。


編集:以下を使用して、各SpotifyとVLCに要求する方法を見つけました。

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus

そして

qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus

しかし、自動的に尋ねたいです。みんな各メディアプレーヤーの名前の代わりにメディアプレーヤーを使用してください。私はこれを試しましたが、org.mpris.MediaPlayer2.*うまくいきません。

どんなアイデアがありますか?

答え1

最新バージョンで利用可能プレーヤーコントロール

playerctl -p playerctld play-pause

これにより、プレイヤーの活動を監視し、アクティブなプレイヤーにコマンドを発行する継続的なプロセスが開始されます。

答え2

これが私がする方法です:

以下は、現在アクティブまたは最後にアクティブなプレーヤーを確認し、そのプレーヤーをファイルに保存するために常に実行されるスクリプトです。

#!/bin/sh

while true ; do
    for m in `qdbus | egrep -i 'org.mpris.MediaPlayer2|plasma-browser-integration'` ; do
        if [[ `qdbus $m /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus` == 'Playing' ]]; then
            echo $m > ~/.config/activePlayer/currentPlaying.txt
        fi
    done
    sleep 1
done

これは、現在アクティブなプレーヤー(このファイルに基づいています)にdbusコマンド(再生/一時停止/ etc /など)を送信するスクリプトです。このスクリプトは私のキーストロークを受け取るsxhkdによって呼び出されます。

#!/bin/sh

#Get command
case $1 in
    'play-pause')
        cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause';;
    'next')
        cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next';;
    'previous')
        cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous';;
    'stop')
        cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop';;
    'skipForward')
        cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek 5000000';;
    'skipBackward')
        cmd='/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek -5000000';;
    *)
esac

#Send command to qdbus
if [[ `qdbus | egrep -i 'org.mpris.MediaPlayer2|plasma-browser-integration' | wc -l` -eq 1 ]]; then
    qdbus `qdbus | egrep -i 'org.mpris.MediaPlayer2|plasma-browser-integration'` $cmd
else
    qdbus `cat ~/.config/activePlayer/currentPlaying.txt` $cmd
fi

unset cmd

関連情報