Por que um VLC interrompido inibe a suspensão?

Por que um VLC interrompido inibe a suspensão?

Quando o VLC está em execução, evita a suspensão do computador.

Quero permitir a suspensão SE o VLC for interrompido (a mídia terminou de ser reproduzida).

Como isso pode ser feito?

Responder1

Eu estava enfrentando o mesmo problema em um PC Ubuntu 12.04. Eu consertei seguindo a sugestão de @hbdgaf. É uma pena adormecer assistindo alguma coisa e acordar e descobrir que o protetor de tela nunca foi ativado. Minha solução escrita em Cé o que eu uso agora. É um daemon que usa a API DBus de baixo nível para chamar métodos no VLC para obter o status de reprodução e pedir ao VLC para encerrar se for interrompido. Os scripts bash e python não eram confiáveis ​​quando executados como aplicativos de inicialização do Ubuntu na minha máquina, que era o que eu queria. Eu não deveria me lembrar de reiniciar um script toda vez que reinicializar, certo? Eles funcionariam se executados manualmente, no entanto. O programa C não tem esse problema. Cole-o em Aplicativos de inicialização e esqueça.

Disseram-me que o nome do objeto DBus é diferente no Ubuntu 14.04 (mas o VLC tem o mesmo problema com a proteção de tela). org.mpris.MediaPlayer2.vlc.instanceXXXXXem 14.04. org.mpris.MediaPlayer2.vlc-XXXXXem 12.04. ObrigadoSneetsher.

Bashsolução usando GDBus (foi instalada por padrão no meu 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ão

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

Responder2

Você pode configurar uma consulta DBus para obter o estado de reprodução do VLC e encerrar o processo quando terminar de jogar. Isso deve liberar seu estado de suspensão.

Responder3

Depois de uma nova instalação do Ubuntu 12.04 em um novo HDD, isso foi resolvido para mim adicionandoesse caraconforme descritoaqui. Acho que o bug foi corrigido no VLC Player 2.1.3.

informação relacionada