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