Ubuntu с Kodi & mdash; как приостановить работу на основе аудиовыхода?

Хорошо, я запускаю Ubuntu 15.04 с Kodi 15.2 как HTPC. У меня всегда были проблемы с приостановкой и спящим режимом из-за того, что, по-видимому, управление питанием двух систем вызывает некоторые конфликты. У меня была Ubuntu, чтобы моя система спала во время просмотра фильмов на Kodi, поэтому я отключил управление питанием. У меня был Kodi, который заставлял мою систему спать, наблюдая за Netflix (либо с помощью Advanced Launcher, либо с помощью Chrome Launcher), поэтому я отключил это (в настоящее время мой HTPC работает 24/7). Я пытаюсь придумать какой-то сценарий, который не только измеряет бездействие, но и аудио выход. Я - полный noob, когда дело доходит до скриптов, но это то, к чему я придумал:

    LOG=/var/log/sleepcounter.log
    sound=0 > /var/log/sleepcounter.log

    while true: do
        sleep 1

        # check if sound is sent to speakers, add 1 if not
        if pactl list | grep -v RUNNING > /dev/null; then
            echo sound=$((sound += 1)) > /var/log/sleepcounter.log;
        fi
    done

Это, по сути, отсчет секунд, когда звук не воспроизводится. Тогда проблема заключается в том, что он не сбрасывает счетчик на «0» при воспроизведении звука. Я попытался переключить его и придумал немного другой скрипт, который НЕ работает:

    LOG=/var/log/sleepcounter.log
    sound=0 > /var/log/sleepcounter.log
    read -d $'\x04' sound < "$LOG"


    while true; do
            sleep 1

            # check if sound is sent to speakers, add 1 if not
            if pactl list | grep  RUNNING > /dev/null; then
                    echo sound=0 > /var/log/sleepcounter.log
            else echo sound=$((sound += 1)) > /var/log/sleepcounter.log;

            fi
    done

Этот точный скрипт ничего не пишет в файл sleepcounter.log, когда я проверяю, что он пуст , Я не могу понять, как сделать его по умолчанию звуком = 0 и поддерживать 0 во время воспроизведения звука, начать отсчет при остановке звука, а затем начать с 0, когда звук снова начнется ...

I добавьте это с другим сценарием:

    LOG=/var/log/sleepcounter.log
    read -d $'\x04' sound < $LOG

    while true; do
            sleep 30
            # check if there is any system activity
            if [[ `xprintidle` > 600000 && "$sound" -ge 600 ]]; then
                    (sudo pm-suspend-hybrid);
            fi
    done

Это работает. Если я вручную установил sleepcounter.log на звук = 600 (или больше), он заставляет систему спать, когда она неактивна в течение 10 минут. Хотя это работает, я думаю, что также может быть способ объединить два сценария в один, просто чтобы сделать его немного проще.

Я знаю, что у меня проблема с ссылкой на переменные, и это я впервые пытаюсь написать сценарий. Если бы кто-нибудь мог мне помочь, я был бы очень признателен.

1
задан 11 December 2015 в 21:57

1 ответ

С небольшим количеством тестирования здесь я увидел, как Kodi закрыл своего клиента в Pulseaudio через пару минут бездействия. Это делает эту проблему довольно простой. В сценарии завершения работы все, что вам нужно проверить (за исключением времени), это отсутствие клиентов Kodi или Chrome. Это так же просто, как:

DISPLAY=:0 pactl list clients | grep -E 'kodi|chrome'

Редактировать: Я честно не читал заглавие, прежде чем писать этот ответ. Установка DISPLAY кажется критическим элементом, по крайней мере здесь, для того, чтобы pactl посмотрел на правильную сессию Pulseaudio.

Если вы скриптируете это во что-то, помните, что grep возвращает 0 на матче. И вы можете использовать аргумент -q вместо перенаправления на /dev/null.

Однако, если у вас также отключены звуки навигации, пользователь может просто находиться в меню. Возможно, вам захочется сделать еще один вид проверки, возможно, подключиться к вводу или проверить средний цвет экрана (установите экранную заставку на черный экран, если экран черный, и звука нет, приостановите).

1
ответ дан 23 May 2018 в 15:06
  • 1
    Я еще не пробовал этого, но Коди не получает " приостановлено " в способе использования Chrome Launcher? Если вы не знакомы с Chrome Launcher, это минимизирует интерфейс Kodi и запускает Chrome с рабочего стола Ubuntu. Когда я выхожу из Chrome (alt + F4), он возвращается обратно в Kodi с активной заставкой (у меня это установлено на 50% тускло). Когда я запускаю pactl list | grep RUNNING, он показывает, работает ли я в Chrome или Kodi, пока звук воспроизводится. – Bighairyg 12 December 2015 в 01:28
  • 2
    I см. , почему у вас сейчас так много проблем (вернитесь мне, чтобы я не читал). Да. Да, это так. Но вам нечего мешать расширять grep до хром. Если Kodi или Chrome (или что-то еще) создают шум, не приостанавливайте работу. Если они не выполняют другие проверки, и если они пройдут, приостановите. – Oli♦ 12 December 2015 в 02:20
  • 3
    Chrome будет вешать бесконечно, пока он жив. – Oli♦ 12 December 2015 в 02:25
  • 4
    Каждый раз, когда я проверял, выполняя команду pactl list | grep RUNNING, похоже, что Chrome выпустил ее примерно через 30 секунд. Спасибо за вашу помощь, но я решил пойти другим путем, который я разместил ниже. – Bighairyg 21 December 2015 в 00:36

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

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