Ok, I am running Ubuntu 15.04 with Kodi 15.2 схвати an HTPC. I have always had problems with suspend and hibernate due to the fact that it appears that the two systems' power менеджмент вызвал some conflicts. I have had Ubuntu удар в лунку my system to sleep while watching movies on Kodi, so I disabled the power менеджмент. I have had Kodi удар в лунку my system to sleep while watching Netflix (either with Адвансед Лаунчер or Чроме Лаунчер), so I disabled that (currently my HTPC runs 24/7). I am trying to ест up with some sort of рукописный шрифт that not only measures inactivity, but аудио output эксперт well. I am в общее количество noob when it ты ешь to scripting, but this is what I came up with so far:
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
This essentially counts seconds that аудио is not playing. The problem then is it does not reset the counter to "0" when аудио does play. I attempted to переключатель it around, and came up with в slightly different рукописный шрифт that does NOT work:
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
This exact рукописный шрифт does not write anything to the sleepcounter.log file, when I check it it's blank. I can't фигурировал out how to make it default to sound=0 and maintain 0 while sound is playing, start counting when sound stops, followed by starting over from 0 when sound starts again...
I have this paired up with another рукописный шрифт:
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
This one does work. If I manually set sleepcounter.log to sound=600 (or я обитал) it puts the system to sleep when it существуешь been невключите for 10 minutes. While this works, I am thinking there also might be в way to сочетался the two scripts into one, just to make it в бит simpler.
I know I am having в problem with referencing the переменные, and this is my first украл trying to write в рукописный шрифт. If anyone could help я out, I would greatly appreciate it.
Я отправлю это здесь для кого-либо еще ищущего простое решение. Мое самое большое беспокойство много раз, мы заснули, смотря кино и осознаем ТВ, все еще находящееся 'на'. Я плохо знаком с Linux, и нашей предыдущей системой был Windows XP (без Kodi), таким образом отключая экран после того, как 10 минут не были никакой проблемой (хотя это будет иногда давать незначительный сбой, и выключаться посреди фильма Netflix). У меня было две различных системы Dell с Windows, умирают в прошлом, засыпая и никогда не просыпаясь, таким образом, я никогда не привык спать/приостанавливать функции, встроенные для Windows. Я думаю, что Kodi является потрясающим интерфейсом, намного лучше, чем попытка управлять рабочим столом Windows с беспроводной мини-клавиатурой/сенсорной панелью.
я наконец понял это, и конечно я делал это ПУТЕМ более сложный, чем это действительно. То, что я закончил тем, что делал, переписывало два различных сценария в единственный:
while true; do
sleep 1 # wait for 1 second to continue loop
# check for sound output, if yes clear variable, if no then count +1
if pactl list | grep RUNNING > /dev/null; then
unset sound; echo $sound; else
echo sound=$((sound++))
fi
# check idle time and no-sound time, if yes then suspend and exit loop
if [[ `xprintidle` > 600000000 && "$sound" -ge 600 ]]; then
(sudo pm-suspend); exit 0
fi
done
После сохранения сценария, я тогда должен был выполнить некоторые другие команды, чтобы заставить его работать правильно:
chmod x+ /path/to/filename.sh #to make it executable
chmod 555 /path/to/filename.sh #had a problem with permissions and ownership
сопровождаемый путем изменения /etc/sudoers
файл, чтобы быть в состоянии звонить pm-suspend
, не будучи корнем или просьбы пароль путем добавления этого до конца файла:
username ALL = NOPASSWD: /usr/sbin/pm-hibernate
username ALL = NOPASSWD: /usr/sbin/pm-suspend
замена username
с фактическим именем пользователя я использую для вхождения в мою систему.
До сих пор, независимо от того, что производит звук (я протестировал с Netflix через Средство запуска Chrome через Kodi, YouTube в Chrome непосредственно рабочий стол и проигрывание фильма непосредственно от Kodi) это приостанавливает спустя приблизительно 10 минут после звуковых остановок, пока я не делаю ничего больше. Я говорю "приблизительно", потому что я верю xprintidle
, отбрасывает некоторые случайные числа тут и там, но до сих пор это ВСЕГДА спит. Я должен был добавить эти exit
команда, иначе она генерировала цикл сна/следа, из которого было трудно выйти. Я тогда добавил сценарий, который будет выполнен при запуске путем добавления задания крона с @reboot /path/to/filename.sh
. Это работает отлично, но я еще не уверен, делают ли cron
перезапуски на резюме (я не верю этому, не были в состоянии протестировать это все же), или если я должен назвать сценарий от где-то в другом месте, когда система просыпается.
я предполагаю, что должен спросить в другом потоке, но моя следующая часть этого проекта должна удостовериться, что этот сценарий запускается снова на резюме, и заставить систему распознать мою Мини-i28 беспроводную клавиатуру Rii (с аппаратным ключом USB) как устройство пробуждения.
С определенным тестированием здесь я видел, что Kodi закрыл свой клиент к Pulseaudio после нескольких минут бездействия. Это делает эту проблему довольно простой. В Вашем сценарии завершения работы все необходимо протестировать на (кроме времени), то, что нет никаких клиентов Kodi или Chrome. Это так же просто как:
DISPLAY=:0 pactl list clients | grep -E 'kodi|chrome'
Редактирование: Я честно не читал мимо заголовка прежде, чем записать этот ответ. Установка эти DISPLAY
, кажется, критический элемент, по крайней мере здесь, добирается pactl
взгляд справа сессия Pulseaudio.
, Если Вы пишете сценарий, это во что-то помнит что grep
возвраты 0 на соответствии. И можно использовать -q
аргумент вместо того, чтобы перенаправить к /dev/null
.
Однако , если Вам выключили звуки навигации также, пользователь мог бы просто быть в меню. Вы могли бы хотеть сделать другой вид проверки, возможно, сцепляющийся во вход или проверка среднего цвета экрана (установите экранную заставку на черный экран, если экран является черным, и нет никакого звука, приостановите).