停止した VLC がサスペンドを禁止するのはなぜですか?

停止した VLC がサスペンドを禁止するのはなぜですか?

VLC が実行されている場合、コンピューターがサスペンドするのを防ぎます。

VLC が停止している場合 (メディアの再生が終了した場合)、サスペンドを許可したいと思います。

これはどうすればできるのでしょうか?

答え1

Ubuntu 12.04 PC でも同じ問題が発生していました。@hbdgaf の提案に従って解決しました。何かを見ながら眠りに落ち、起きたらスクリーン セーバーが起動していなかったことに気づくのは最悪です。 C言語で書かれた私のソリューション私が今使っているのはこれです。これは低レベルの DBus API を使用して VLC のメソッドを呼び出し、再生ステータスを取得し、停止している場合は VLC に終了するように要求するデーモンです。私のマシンで Ubuntu スタートアップ アプリケーションとして実行した場合、bash および python スクリプトは信頼できませんでしたが、それが私の望みでした。再起動するたびにスクリプトを再起動することを覚えておく必要はありませんよね? ただし、手動で実行する場合は機能します。C プログラムにはその問題はありません。スタートアップ アプリケーションに貼り付けて忘れてください。

Ubuntu 14.04ではDBusオブジェクト名が異なると聞きました(ただし、VLCではスクリーンセーバーで同じ問題が発生します)。14.04 org.mpris.MediaPlayer2.vlc.instanceXXXXXで。12.04 org.mpris.MediaPlayer2.vlc-XXXXXで。ありがとうございますスニーシャー

バッシュ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

DBus クエリを設定して VLC の再生状態を取得し、再生が終了したらプロセスを強制終了することができます。これにより、サスペンド状態の保持が解除されるはずです。

答え3

新しいHDDにUbuntu 12.04をインストールした後、次のコードを追加することでこの問題が解決しました。このPPA説明どおりこここのバグはVLC Player 2.1.3で修正されたようです。

関連情報