3 votes

Pourquoi un VLC arrêté empêche-t-il la mise en veille ?

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 ?

2voto

Harper Treadway Points 611

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()

1voto

RobotHumans Points 27764

Vous pourriez 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 maintien sur l'état de suspension.

0voto

Harper Treadway Points 611

Après une nouvelle installation d'Ubuntu 12.04 sur un nouveau disque dur, ce problème a été résolu pour moi en ajoutant ce ppa comme décrit ici. Je suppose que le bogue est corrigé dans VLC Player 2.1.3.

SistemesEz.com

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.

Powered by:

X