web-dev-qa-db-fra.com

Comment configurer la requête DBus pour obtenir l'état de lecture de VLC?

Je rencontre ce problème où VLC continue d'inhiber le démon de gestion de l'alimentation même après la fin de la lecture (même si l'option dans les préférences de VLC est intitulée "Inhiber le démon de gestion de l'alimentation pendant la lecture "). J'ai demandé dans le Forum VLC mais je n'ai reçu aucune réponse. J'ai considéré compilation manuelle la dernière version de développement de VLC afin de résoudre ce problème, mais je ne suis pas sûr de vouloir y aller ou si cela résoudrait même le problème. ne réponse suggère de configurer une requête DBus pour obtenir l'état de lecture de VLC et de tuer le processus une fois la lecture terminée. Comment procéder pour configurer une telle requête DBus? Mon système exécute VLC 2.0.9 à partir de ppa:videolan/stable-daily sur Ubuntu 12.04 LTS et tous les packages installés sont mis à jour vers les dernières versions. Merci.

1
JB0x2D1

Ma solution écrite en C est ce sur quoi je me suis installé. Il s'agit d'un démon qui utilise l'API DBus de bas niveau pour appeler des méthodes sur VLC pour obtenir l'état de lecture et demander à VLC de quitter s'il est arrêté. Les scripts bash et python n'étaient pas fiables lorsqu'ils étaient exécutés en tant qu'applications de démarrage Ubuntu, ce que je voulais. IIRC, les versions bash et python devaient être manuellement exécuter à partir d'un terminal pour travailler.

Solution Bash utilisant GDBus (a été installée par défaut sur mon 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 Voici comment j'ai configuré une requête DBus pour obtenir l'état de lecture de VLC en utilisant Python et python-dbus module:

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')
1
JB0x2D1