Por que um VLC Parado inibe a Suspensão?

3

Quando o VLC está em execução, ele impede que o computador suspenda.

Eu quero permitir suspender IF VLC está parado (a mídia terminou de jogar).

Como isso pode ser feito?

    
por Tesco 04.04.2012 / 00:30

3 respostas

2

Eu estava tendo o mesmo problema no Ubuntu 12.04 PC. Eu consertei isso tomando a sugestão do @ hbdgaf. Suga adormecer assistindo algo e acorda para descobrir que o protetor de tela nunca apareceu. 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 sair se estiver parado. Os scripts bash e python não eram confiáveis quando executados como aplicativos de inicialização do Ubuntu na minha máquina, que é o que eu queria. Eu não deveria ter que lembrar de reiniciar um script toda vez que eu reinicio, certo? Eles funcionariam se fossem executados manualmente, no entanto. O programa C não tem esse problema. Cole-o em Startup Applications e esqueça.

Disseram-me que o nome do objeto DBus é diferente no Ubuntu 14.04 (mas o VLC tem o mesmo problema com o protetor de tela). org.mpris.MediaPlayer2.vlc.instanceXXXXX em 14.04. org.mpris.MediaPlayer2.vlc-XXXXX em 12.04. Obrigado Sneetsher .

Solução

Bash usando o GDBus (foi instalado 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

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()
    
por JB0x2D1 17.01.2014 / 21:03
1

Você pode configurar uma consulta DBus para obter o estado de reprodução do VLC e interromper o processo quando ele é reproduzido. Isso deve liberar seu estado de suspensão.

    
por RobotHumans 04.04.2012 / 01:20
0

Após um novo Ubuntu 12.04 instalar em um novo HDD, isso foi resolvido por mim, adicionando este ppa conforme descrito aqui . Eu acho que o bug foi corrigido no VLC Player 2.1.3.

    
por JB0x2D1 09.05.2014 / 20:30