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.instanceXXXXX
em 14.04. org.mpris.MediaPlayer2.vlc-XXXXX
em 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.