Это моя попытка создать скрипт, который будет использовать «движение мышью», чтобы предотвратить гашение экрана при просмотре видео. Я надеюсь использовать значение для максимального процесса CPU%, top
и если загрузка процессора превышает 5%, должно произойти перемещение мыши.
#!/usr/bin/env bash
sleep_period=60s
while true; do
if (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); then
while (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); do
xdotool mousemove 0 100
xdotool mousemove 0 50
sleep ${sleep_period}
done
else
sleep ${sleep_period}
fi
done
К сожалению, это не работает. Ошибки такие:
[07:20 PM] /bin $ noo.sh
/home/vasa1/bin/noo.sh: line 6: ((: 0.0 -gt 5 : syntax error: invalid arithmetic operator (error token is ".0 -gt 5 ")
/home/vasa1/bin/noo.sh: line 6: ((: 6.4 -gt 5 : syntax error: invalid arithmetic operator (error token is ".4 -gt 5 ")
Как я могу это исправить? (Обратите внимание, что у меня нет опыта в написании сценариев.)
Основываясь на ответах здесь, я собрал:
#!/usr/bin/env bash
sleep_period=5m
while true; do
if [[ $(top -bn 1 | sed -nrs '8p' | awk '{ print int($9) }') -gt 8 ]]; then
while [[ $(top -bn 1 | sed -nrs '8p' | awk '{ print int($9) }') -gt 8 ]]; do
xset -dpms; xset s off
xset +dpms; xset s on
sleep ${sleep_period}
done
else
sleep ${sleep_period}
fi
done
Затем я сообщил об этом коде на форумах Ubuntu, и Vaphell продолжил работу над ним. Ниже приведена версия Vaphell, которую я использую:
#!/usr/bin/env bash
sleep_period=5m
while true; do
if top -bn 1 | awk 'NR==8 { exit !($9>8); }'; then
xset -dpms; xset s off
xset +dpms; xset s on
fi
sleep ${sleep_period}
done
-gt
ожидает целочисленные операнды, а не числа с плавающей запятой. и я не уверен , почему вы используете((
...))
а не просто[
...]
. или почему вы используете CPU% в качестве триггера ... или даже почему вы извлекаете загрузку CPU% из программы curses типа top, а не чего-то вродеps -heo %C --sort -%cpu | head -1
xset
Рафаэля ниже.Ответы:
У вас есть пара вопросов, во-первых, вам понадобятся 2 итерации
top
каждый раз, посмотрите мой ответ здесь и отчет об ошибке здесь .Другая проблема заключается в том, что bash не выполняет операции с плавающей запятой, поэтому, если загрузка вашего процессора примерно такая
6.2
,.2
сценарий будет нарушен. Bash просто не предназначен для «сложных» арифметических операций. Один из способов обойти это - переместить>5
проверку внутри вашейawk
команды:источник
Ты можешь использовать
чтобы экран не стал черным.
Чтобы включить это снова используйте
Таким образом,
-dpms
отключаются функции энергосбережения, которые могут отключить весь монитор иs off
отключить функцию заставки X-сервера.Это не работает с тем
xscreensaver
, что было упомянуто в комментариях.источник
xscreensaver
? Будет ли это работать с любой заставкой? Даже DE, какgnome-screensaver
?xdotool mousemove 0 100
.Сначала вам нужно установить xdotool & rand. Пример на Ubuntu:
Затем запустите эту однострочную строку в терминале (как пользователь):
источник