Como configurar a consulta DBus para obter o estado de reprodução do VLC?

1

Estou experimentando esse problema onde o VLC continua a inibir o daemon de gerenciamento de energia mesmo depois que a reprodução foi finalizada (embora a opção nas preferências do VLC é rotulada como "Inibir o daemon de gerenciamento de energia durante a reprodução "). Perguntei no Fórum VLC , mas não obtive resposta. Eu considerei compilar manualmente a mais recente versão de desenvolvimento do VLC, a fim de corrigir este problema, mas não tenho certeza se quero ir até lá ou se isso resolver o problema. Uma resposta sugere configurar uma consulta DBus para obter o estado de reprodução do VLC e matar o processo quando ele é executado. Como alguém faria para configurar essa consulta DBus? Meu sistema está executando o VLC 2.0.9 de ppa:videolan/stable-daily no Ubuntu 12.04 LTS e todos os pacotes instalados são atualizados para as versões mais recentes. Obrigado.

    
por JB0x2D1 15.01.2014 / 16:44

1 resposta

1

Minha solução escrita em C é o que eu escolhi. É um daemon que usa a API DBus de baixo nível para chamar métodos no VLC para obter o status de reprodução e pedir ao VLC para sair se estiver parado. Os scripts bash e python não eram confiáveis quando executados como aplicativos de inicialização do Ubuntu, que é o que eu queria. As versões IIRC, bash e python tinham que ser executadas manualmente de um terminal para o trabalho.

Solução

Bash usando o GDBus (foi instalado por padrão no meu Ubuntu 12.04):

#VLC Watchdog Bash Script (vlcwd.sh)
while [ 1 -eq 1 ]
do
    if [ "$(pgrep vlc)" != "" ] #if VLC is running
        then #get the playback status and save to variable pbs
        pbs=$(bash -c 'gdbus call --session \
        --dest org.mpris.MediaPlayer2.vlc-$(pgrep vlc) \
        --object-path /org/mpris/MediaPlayer2 \
        --method org.freedesktop.DBus.Properties.Get \
        "org.mpris.MediaPlayer2.Player" \
        "PlaybackStatus"')
        if [ "$pbs" = "(<'Stopped'>,)" ] #if VLC is stopped
        then kill -9 $(pgrep vlc) #then kill it so it doesn't block my screen saver
        fi
    fi
    sleep 5
done

Python É assim que eu configurei uma consulta DBus para obter o estado de reprodução do VLC usando Python e o módulo python-dbus :

import dbus

bus = dbus.SessionBus()
vlc_media_player_obj = bus.get_object("org.mpris.MediaPlayer2.vlc", "/org/mpris/MediaPlayer2")
props_iface = dbus.Interface(vlc_media_player_obj, 'org.freedesktop.DBus.Properties')
pb_stat = props_iface.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus')
    
por JB0x2D1 20.01.2014 / 08:34