
Это моя попытка сделать скрипт, который будет использовать "движение мыши" для предотвращения гашения экрана во время просмотра видео. Я надеюсь использовать значение для самого высокого процесса CPU% в top
и если использование CPU превышает 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, которую я использую:
#!/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
решение1
Вы можете использовать
xset -dpms; xset s off
чтобы экран не стал черным.
Чтобы снова включить это, используйте
xset +dpms; xset s on
Таким образом -dpms
отключаются функции энергосбережения, которые могут отключить весь монитор, а также s off
отключается функция экранной заставки X-сервера.
Это не работает с xscreensaver
, о чем упоминалось в комментариях.
решение2
У вас есть пара проблем, во-первых, вам понадобится 2 итерации top
каждого раза, см. мой ответ.здесьи отчет об ошибкездесь.
Другая проблема в том, что bash не поддерживает операции с плавающей точкой, поэтому если загрузка вашего процессора составляет около 6.2
, .2
скрипт сломается. Bash просто не предназначен для «сложных» арифметических операций. Одним из способов обойти это будет перемещение >5
проверки внутрь вашей awk
команды:
#!/usr/bin/env bash
sleep_period=60s
while true; do
until top -bn 2 -d 0.01 | sed -nrs '8p' | awk '{if($9>5){exit 1}else{exit 0}}'; do
xdotool mousemove 0 100
xdotool mousemove 0 50
sleep ${sleep_period}
done
sleep ${sleep_period}
done
решение3
Сначала вам нужно установить xdotool & rand. Пример на Ubuntu:
sudo apt install xdotool rand
Затем запустите эту однострочную команду в терминале (как пользователь):
eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;