Как настроить запрос DBus, чтобы получить состояние воспроизведения VLC?

Я сталкиваюсь с этой проблемой , когда VLC продолжает блокировать демон управления питанием даже после завершения воспроизведения (даже если параметр в настройках VLC помечен как «Запретить демон управления питанием во время»). воспроизведения "). Я спросил в VLC Forum , но не получил ответа. Я рассмотрел ручную компиляцию последней версии разработки VLC, чтобы исправить эту проблему, но я не уверен, что хочу пойти туда или если это даже решит проблему. В одном ответе предлагается настроить запрос DBus, чтобы получить состояние воспроизведения VLC, и завершить процесс по окончании воспроизведения. Как можно было бы настроить такой запрос DBus? Моя система работает под управлением VLC 2.0.9 из ppa:videolan/stable-daily в Ubuntu 12.04 LTS, и все установленные пакеты обновлены до последних версий. Спасибо.

1
задан 13 April 2017 в 15:24

1 ответ

Мое решение, написанное в C , - то, на чем я остановился. Это демон, который использует низкоуровневый API DBus для вызова методов в VLC, чтобы получить состояние воспроизведения и попросить VLC выйти, если он остановлен. Скрипты bash и python не были надежными при запуске как Ubuntu Startup Applications, что я и хотел. IIRC, bash и python версии должны были запускаться вручную из терминала, чтобы работать.

Решение Bash с использованием 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 Так я настроил запрос DBus к получить состояние воспроизведения VLC, используя Python и модуль python-dbus:

import dbus

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')
0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: