web-dev-qa-db-fra.com

Pourquoi un VLC arrêté inhibe-t-il la suspension?

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?

3
Tesco

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

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.

1
RobotHumans

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

0
JB0x2D1