Lorsque VLC est en cours d'exécution, il empêche l'ordinateur de se suspendre.
Je veux qu'il autorise la suspension SI VLC est arrêté (la lecture du média est terminée).
Comment cela peut-il être fait?
Je rencontrais le même problème sur un PC Ubuntu 12.04. Je l'ai corrigé en prenant la suggestion de @ hbdgaf. Suce de s'endormir en regardant quelque chose et se réveille pour découvrir que l'économiseur d'écran ne s'est jamais activé. Ma solution écrite en C est ce que j'utilise maintenant. 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 sur ma machine, ce que je voulais. Je ne devrais pas avoir à me rappeler de redémarrer un script à chaque redémarrage, à droite "Ils fonctionneraient s'ils étaient exécutés manuellement, cependant. Le programme C n'a pas ce problème. Collez-le dans les applications de démarrage et oubliez-le.
On me dit que le nom d'objet DBus est différent dans Ubuntu 14.04 (mais VLC a le même problème avec l'économiseur d'écran). org.mpris.MediaPlayer2.vlc.instanceXXXXX
le 14.04. org.mpris.MediaPlayer2.vlc-XXXXX
le 12.04. Merci Sneetsher .
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
#vlc_watchdog_daemon.py
import time
time.sleep(30)
import dbus
import os
import subprocess
from subprocess import Popen, PIPE
import daemon
def vlc_killer():
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')
if pb_stat == 'Stopped':
os.system("kill -9 $(pidof vlc)")
def vlc_is_running():
ps = subprocess.Popen(['ps', '-e'], stdout = PIPE)
out, err = ps.communicate()
for line in out.splitlines():
if 'vlc' in line:
return True
return False
def run():
while True:
if vlc_is_running():
vlc_killer()
else:
time.sleep(5)
with daemon.DaemonContext():
run()
Vous pouvez configurer une requête DBus pour obtenir l'état de lecture de VLC et tuer le processus une fois la lecture terminée. Cela devrait libérer son emprise sur l'état suspendu.