Lorsque VLC est en cours d'exécution, il évite à l'ordinateur de se mettre en veille.
Je veux qu'il permette la mise en veille SI VLC est arrêté (la lecture du média est terminée).
Comment cela peut-il être fait ?
Lorsque VLC est en cours d'exécution, il évite à l'ordinateur de se mettre en veille.
Je veux qu'il permette la mise en veille SI VLC est arrêté (la lecture du média est terminée).
Comment cela peut-il être fait ?
J'ai rencontré le même problème sur un PC Ubuntu 12.04. Je l'ai résolu en suivant la suggestion de @hbdgaf. C'est pénible de s'endormir en regardant quelque chose et de se réveiller pour découvrir que l'économiseur d'écran ne s'est jamais activé. Ma solution écrite en C est ce que j'utilise maintenant. C'est 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 se fermer s'il s'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 qui est ce que je voulais. Je ne devrais pas avoir à me rappeler de redémarrer un script à chaque fois que je redémarre, n'est-ce pas ? Ils fonctionneraient s'ils étaient exécutés manuellement, cependant. Le programme C n'a pas ce problème. Installez-le dans les Applications de démarrage et oubliez-le.
On m'a dit que le nom de l'objet DBus est différent sur Ubuntu 14.04 (mais VLC a le même problème avec l'économiseur d'écran). org.mpris.MediaPlayer2.vlc.instanceXXXXX
sur 14.04. org.mpris.MediaPlayer2.vlc-XXXXX
sur 12.04. Merci Sneetsher.
Solution Bash utilisation de GDBus (installé par défaut sur mon Ubuntu 12.04):
#VLC Watchdog Bash Script (vlcwd.sh)
while [ 1 -eq 1 ]
do
if [ "$(pgrep vlc)" != "" ] #si VLC est en cours d'exécution
then #obtenez l'état de lecture et enregistrez dans la 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'>,)" ] #si VLC est arrêté
then kill -9 $(pgrep vlc) #ensuite le tuer pour qu'il ne bloque pas mon économiseur d'écran
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()
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.