O script para evitar o apagamento da tela usando "movimento do mouse" não funciona

O script para evitar o apagamento da tela usando "movimento do mouse" não funciona

Esta é minha tentativa de criar um script que use o "movimento do mouse" para evitar o apagamento da tela enquanto assiste a vídeos. Espero usar o valor do processo de% de CPU mais alto tope, se o uso da CPU exceder 5%, deverá ocorrer um movimento do mouse.

#!/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

Infelizmente isso não funciona. Os erros são assim:

[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 ")

Como faço para corrigir isso? (Observe que não tenho experiência em scripts.)


Com base nas respostas aqui, juntei:

#!/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

Então, relatei esse código nos fóruns do Ubuntu eVaphelltrabalhou nisso ainda mais. Abaixo está a versão do Vaphell e é o que estou usando:

#!/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

Responder1

Você pode usar

xset -dpms; xset s off

para impedir que a tela fique preta.

Para habilitar isso novamente, use

xset +dpms; xset s on

Portanto, -dpmsdesativa os recursos de economia de energia, que podem desligar todo o monitor e s offdesativar o recurso de proteção de tela do servidor X.

Isso não funciona com o xscreensaver, que foi mencionado nos comentários.

Responder2

Você tem alguns problemas, primeiro, precisará de 2 iterações de topcada vez, veja minha respostaaquie o relatório de bugaqui.

O outro problema é que o bash não usa ponto flutuante; portanto, se o uso da CPU for algo como 6.2, .2o script será interrompido. O Bash simplesmente não foi projetado para operações aritméticas “complexas”. Uma maneira de contornar isso seria mover a >5verificação dentro do seu awkcomando:

#!/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

Responder3

Primeiro, você precisa instalar o xdotool & rand. Exemplo no Ubuntu:

sudo apt install xdotool rand

Em seguida, execute este one-liner em um terminal (como usuário):

eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;

informação relacionada