為什麼停止的 VLC 會抑制掛起?

為什麼停止的 VLC 會抑制掛起?

當 VLC 運作時,它可以防止電腦掛起。

我希望它允許在 VLC 停止時暫停(媒體播放完畢)。

如何才能做到這一點?

答案1

我在 Ubuntu 12.04 PC 上遇到了同樣的問題。我採納了 @hbdgaf 的建議來修復它。看著什麼東西就睡著了,醒來卻發現螢幕保護程式從未打開,這真是太糟糕了。 我的解決方案是用C寫的是我現在用的。它是一個守護進程,使用低階 DBus API 呼叫 VLC 上的方法來取得播放狀態,並在停止時要求 VLC 退出。當在我的機器上作為 Ubuntu 啟動應用程式運行時,bash 和 python 腳本不可靠,這正是我想要的。我不應該在每次重新啟動時都記住重新啟動腳本,對吧?然而,如果手動運行它們就可以工作。 C 程式不存在這個問題。將其貼在啟動應用程式中,然後就可以忘記它了。

我被告知 Ubuntu 14.04 中的 DBus 物件名稱不同(但 VLC 的螢幕保護程式也有同樣的問題)。 org.mpris.MediaPlayer2.vlc.instanceXXXXX於 14.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

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()

答案2

您可以設定 DBus 查詢來取得 VLC 的播放狀態,並在播放完成後終止該進程。這應該會釋放對掛起狀態的控制。

答案3

在新的 HDD 上安裝全新的 Ubuntu 12.04 後,透過新增解決了我的問題這個ppa如上所述這裡。我猜這個錯誤已在 VLC Player 2.1.3 中修復。

相關內容