Use dbus para obter o nome do mediaplayer que está jogando atualmente

1

EDIT: Eu removi e reescrevi a maior parte da postagem para tornar a pergunta mais direta e para deixar a postagem muito mais curta. Você pode ver o histórico de edições para obter a versão anterior.

Usando o bspwm no Arch Linux. playerctl para controlar a mídia, sxhkd para vincular as chaves de mídia aos comandos playerctl.

Estou tentando encontrar uma maneira de obter o mais recente media player ativo, por isso, quando uso as teclas de mídia para reproduzir / pausar uma música / filme / ..., meu computador controla automaticamente o mediaplayer ativo mais recente.

Por exemplo, quando o Spotify está aberto em segundo plano e eu estou assistindo algo no VLC, ele sabe controlar o VLC e não o Spotify quando pressiono as teclas de mídia. Neste momento, se ambos estiverem abertos, o VLC sempre terá prioridade no playerctl.

O que eu preciso é uma maneira de perguntar ao dbus qual mediaplayer está tocando uma música, então eu posso mantê-lo em um arquivo.

EDIT: Eu encontrei uma maneira de perguntar a cada spotify e vlc usando:

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

e

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

mas gostaria de perguntar automaticamente a todos mediaplayers, não a cada um por nome. Eu tentei fazer isso com org.mpris.MediaPlayer2.* , mas isso não funciona.

Alguma idéia?

    
por zjeffer 25.10.2018 / 21:33

1 resposta

0

Eu fiz assim:

Este é um script que sempre é executado para verificar qual player está ativo / ativo por último e armazena esse player em um arquivo:

#!/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 3
done

e este é um script que envia comandos dbus como play / pause / etc / para o player que está atualmente ativo (baseado nesse arquivo). O script é chamado por sxhkd, que escuta meus pressionamentos de tecla.

#!/bin/sh

if [[ $1 == 'play-pause' ]]; then
    qdbus 'cat ~/.config/activePlayer/currentPlaying.txt' /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
elif [[ $1 == 'next' ]]; then
    qdbus 'cat ~/.config/activePlayer/currentPlaying.txt' /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
elif [[ $1 == 'previous' ]]; then
    qdbus 'cat ~/.config/activePlayer/currentPlaying.txt' /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous
elif [[ $1 == 'stop' ]]; then
    qdbus 'cat ~/.config/activePlayer/currentPlaying.txt' /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop
fi

Esta é uma boa maneira de fazer isso?

    
por 09.11.2018 / 19:32