Warum verhindert ein angehaltener VLC die Suspend-Funktion?

Warum verhindert ein angehaltener VLC die Suspend-Funktion?

Wenn VLC ausgeführt wird, wird ein Suspendieren des Computers verhindert.

Ich möchte, dass ein Anhalten möglich ist, WENN VLC gestoppt wird (die Wiedergabe des Mediums beendet ist).

Wie kann das erreicht werden?

Antwort1

Ich hatte das gleiche Problem auf einem Ubuntu 12.04-PC. Ich habe es behoben, indem ich den Vorschlag von @hbdgaf befolgte. Es ist ärgerlich, beim Anschauen einzuschlafen und aufzuwachen und festzustellen, dass der Bildschirmschoner nicht eingeschaltet wurde. Meine Lösung in C geschriebenist das, was ich jetzt verwende. Es ist ein Daemon, der die Low-Level-DBus-API verwendet, um Methoden auf VLC aufzurufen, um den Wiedergabestatus abzurufen und VLC zum Beenden aufzufordern, wenn es gestoppt wird. Die Bash- und Python-Skripte waren nicht zuverlässig, wenn sie als Ubuntu-Startup-Anwendungen auf meinem Rechner ausgeführt wurden, was ich wollte. Ich sollte doch nicht daran denken müssen, bei jedem Neustart ein Skript neu zu starten, oder? Sie würden jedoch funktionieren, wenn sie manuell ausgeführt würden. Das C-Programm hat dieses Problem nicht. Legen Sie es in die Startanwendungen und vergessen Sie es.

Mir wurde gesagt, dass der DBus-Objektname in Ubuntu 14.04 anders ist (aber VLC hat das gleiche Problem mit dem Bildschirmschoner). org.mpris.MediaPlayer2.vlc.instanceXXXXXam 14.04. org.mpris.MediaPlayer2.vlc-XXXXXam 12.04. DankeSchniefer.

SchlagLösung mit GDBus (war standardmäßig auf meinem Ubuntu 12.04 installiert):

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

Antwort2

Sie könnten eine DBus-Abfrage einrichten, um den Wiedergabestatus von VLC abzurufen und den Prozess zu beenden, wenn die Wiedergabe beendet ist. Dadurch sollte der Suspend-Status aufgehoben werden.

Antwort3

Nach einer Neuinstallation von Ubuntu 12.04 auf einer neuen Festplatte wurde dieses Problem für mich gelöst durch das Hinzufügendieses ppawie beschriebenHier. Ich vermute, der Fehler ist im VLC Player 2.1.3 behoben.

verwandte Informationen