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

관련 정보