VLC가 실행 중이면 컴퓨터가 일시 중지되는 것을 방지합니다.
VLC가 중지된 경우(미디어 재생이 완료된 경우) 일시 중지를 허용하고 싶습니다.
어떻게 할 수 있습니까?
답변1
Ubuntu 12.04 PC에서 동일한 문제가 발생했습니다. @hbdgaf의 제안을 받아 문제를 해결했습니다. 뭔가를 보다가 잠이 들었다가 깨어나면 화면 보호기가 전혀 켜지지 않았다는 걸 알게 되니 짜증나네요. C로 작성된 내 솔루션내가 지금 사용하는 것입니다. 낮은 수준의 DBus API를 사용하여 VLC에서 메서드를 호출하여 재생 상태를 가져오고 VLC가 중지되면 종료하도록 요청하는 데몬입니다. bash 및 python 스크립트는 내 컴퓨터에서 Ubuntu 시작 응용 프로그램으로 실행할 때 신뢰할 수 없었습니다. 이것이 바로 제가 원했던 것입니다. 재부팅할 때마다 스크립트를 다시 시작하는 것을 기억할 필요가 없겠죠? 그러나 수동으로 실행하면 작동합니다. C 프로그램에는 그런 문제가 없습니다. 시작 응용 프로그램에 붙이고 잊어버리세요.
Ubuntu 14.04에서는 DBus 객체 이름이 다르다고 들었습니다(그러나 VLC는 화면 보호기와 동일한 문제가 있습니다). org.mpris.MediaPlayer2.vlc.instanceXXXXX
14.04. org.mpris.MediaPlayer2.vlc-XXXXX
12.04. 감사해요스니셔.
세게 때리다GDBus를 사용하는 솔루션(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
파이썬
#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()
답변2
VLC의 재생 상태를 가져오고 재생이 끝나면 프로세스를 종료하도록 DBus 쿼리를 설정할 수 있습니다. 일시 중지 상태에 대한 보류가 해제되어야 합니다.