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.
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')