Хорошо, я запускаю 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 минут. Хотя это работает, я думаю, что также может быть способ объединить два сценария в один, просто чтобы сделать его немного проще.
Я знаю, что у меня проблема с ссылкой на переменные, и это я впервые пытаюсь написать сценарий. Если бы кто-нибудь мог мне помочь, я был бы очень признателен.
С небольшим количеством тестирования здесь я увидел, как Kodi закрыл своего клиента в Pulseaudio через пару минут бездействия. Это делает эту проблему довольно простой. В сценарии завершения работы все, что вам нужно проверить (за исключением времени), это отсутствие клиентов Kodi или Chrome. Это так же просто, как:
DISPLAY=:0 pactl list clients | grep -E 'kodi|chrome'
Редактировать: Я честно не читал заглавие, прежде чем писать этот ответ. Установка DISPLAY кажется критическим элементом, по крайней мере здесь, для того, чтобы pactl посмотрел на правильную сессию Pulseaudio.
Если вы скриптируете это во что-то, помните, что grep возвращает 0 на матче. И вы можете использовать аргумент -q вместо перенаправления на /dev/null.
Однако, если у вас также отключены звуки навигации, пользователь может просто находиться в меню. Возможно, вам захочется сделать еще один вид проверки, возможно, подключиться к вводу или проверить средний цвет экрана (установите экранную заставку на черный экран, если экран черный, и звука нет, приостановите).