
편집: 질문을 더 직접적으로 만들고 게시물을 더 짧게 만들기 위해 대부분의 게시물을 삭제하고 다시 작성했습니다. 물론 이전 버전의 편집 기록도 볼 수 있습니다.
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