중지된 VLC가 일시 중지를 금지하는 이유는 무엇입니까?

중지된 VLC가 일시 중지를 금지하는 이유는 무엇입니까?

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.instanceXXXXX14.04. org.mpris.MediaPlayer2.vlc-XXXXX12.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 쿼리를 설정할 수 있습니다. 일시 중지 상태에 대한 보류가 해제되어야 합니다.

답변3

새 HDD에 Ubuntu 12.04를 새로 설치한 후 이 문제는 다음을 추가하여 해결되었습니다.이 아빠설명한대로여기. VLC Player 2.1.3에서는 버그가 수정된 것 같습니다.

관련 정보