Скрипт для предотвращения гашения экрана с помощью «перемещения мыши» не работает

Скрипт для предотвращения гашения экрана с помощью «перемещения мыши» не работает

Это моя попытка сделать скрипт, который будет использовать "движение мыши" для предотвращения гашения экрана во время просмотра видео. Я надеюсь использовать значение для самого высокого процесса 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;

Связанный контент