¿Por qué un VLC detenido inhibe la suspensión?

¿Por qué un VLC detenido inhibe la suspensión?

Cuando VLC se está ejecutando, evita que la computadora se suspenda.

Quiero que permita suspender SI se detiene VLC (el medio terminó de reproducirse).

¿Cómo se puede hacer esto?

Respuesta1

Estaba experimentando el mismo problema en una PC con Ubuntu 12.04. Lo solucioné siguiendo la sugerencia de @hbdgaf. Es una mierda quedarse dormido viendo algo y despertarse y descubrir que el protector de pantalla nunca se activó. Mi solución escrita en Ces lo que uso ahora. Es un demonio que utiliza la API DBus de bajo nivel para llamar a métodos en VLC para obtener el estado de reproducción y pedirle a VLC que salga si se detiene. Los scripts de bash y python no eran confiables cuando se ejecutaban como aplicaciones de inicio de Ubuntu en mi máquina, que es lo que quería. No debería tener que acordarme de reiniciar un script cada vez que reinicio, ¿verdad? Sin embargo, funcionarían si se ejecutaran manualmente. El programa C no tiene ese problema. Pégalo en Aplicaciones de inicio y olvídate.

Me dijeron que el nombre del objeto DBus es diferente en Ubuntu 14.04 (pero VLC tiene el mismo problema con el protector de pantalla). org.mpris.MediaPlayer2.vlc.instanceXXXXXel 14.04. org.mpris.MediaPlayer2.vlc-XXXXXel 12.04. GraciasSneetsher.

Intentosolución usando GDBus (se instaló de forma predeterminada en mi 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

Pitón

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

Respuesta2

Puede configurar una consulta DBus para obtener el estado de reproducción de VLC y finalizar el proceso cuando termine de reproducirse. Eso debería liberar su estado de suspensión.

Respuesta3

Después de una nueva instalación de Ubuntu 12.04 en un nuevo disco duro, esto se resolvió agregandoeste padrecomo se describeaquí. Supongo que el error se solucionó en VLC Player 2.1.3.

información relacionada