使用 dbus 获取当前正在播放的媒体播放器的名称

使用 dbus 获取当前正在播放的媒体播放器的名称

编辑:我删除并重写了大部分帖子,以使问题更直接并使帖子更短。您当然可以查看编辑历史记录以获取以前的版本。

在 Arch Linux 上使用 bspwm。playerctl控制媒体,sxhkd将媒体键绑定到playerctl命令。

我正在尝试找到一种方法来获取最新的活动媒体播放器,因此当我使用媒体键播放/暂停歌曲/电影/.. 时,我的电脑会自动控制最新的活动媒体播放器。

例如,当 Spotify 恰好在后台打开并且我正在 VLC 上观看某些内容时,它知道当我按下媒体键时控制 VLC 而不是 Spotify。现在,如果两者都打开,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

在最新版本中,您可以使用玩家ctld

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 命令(如 play/pause/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

相关内容