Почему остановленный VLC блокирует режим приостановки?

Почему остановленный VLC блокирует режим приостановки?

Когда VLC запущен, он предотвращает приостановку работы компьютера.

Я хочу, чтобы он позволял приостанавливать работу, ЕСЛИ VLC остановлен (воспроизведение мультимедиа завершено).

Как это может быть сделано?

решение1

У меня была та же проблема на ПК с Ubuntu 12.04. Я исправил ее, приняв предложение @hbdgaf. Отстойно засыпать за просмотром чего-то и просыпаться, обнаруживая, что заставка так и не включилась. Мое решение написано на языке Cто, что я использую сейчас. Это демон, который использует низкоуровневый API DBus для вызова методов в VLC, чтобы получить статус воспроизведения и попросить VLC выйти, если он остановлен. Скрипты bash и python были ненадежны при запуске в качестве приложений Ubuntu Startup на моей машине, чего я и хотел. Мне не нужно было помнить о перезапуске скрипта каждый раз при перезагрузке, верно? Однако они работали бы, если бы запускались вручную. У программы на C такой проблемы нет. Вставьте ее в Startup Applications и забудьте о ней.

Мне сказали, что имя объекта DBus отличается в Ubuntu 14.04 (но у 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

Вы можете настроить запрос DBus, чтобы получить состояние воспроизведения VLC и завершить процесс, когда он закончит воспроизведение. Это должно снять его удержание в состоянии ожидания.

решение3

После установки новой версии Ubuntu 12.04 на новый жесткий диск эта проблема была решена путем добавленияэтот ппакак описаноздесь. Полагаю, ошибка исправлена ​​в VLC Player 2.1.3.

Связанный контент