
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 top
e, 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, -dpms
desativa os recursos de economia de energia, que podem desligar todo o monitor e s off
desativar 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 top
cada 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
, .2
o script será interrompido. O Bash simplesmente não foi projetado para operações aritméticas “complexas”. Uma maneira de contornar isso seria mover a >5
verificação dentro do seu awk
comando:
#!/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;