El script para evitar que la pantalla se quede en blanco usando "movimiento del mouse" no funciona

El script para evitar que la pantalla se quede en blanco usando "movimiento del mouse" no funciona

Este es mi intento de crear un script que utilice un "movimiento del mouse" para evitar que la pantalla se quede en blanco mientras mira videos. Espero usar el valor para el proceso con el porcentaje de CPU más alto topy, si el uso de la CPU excede el 5%, debería ocurrir un movimiento del 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

Desafortunadamente, no funciona. Los errores son así:

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

¿Cómo puedo solucionar esto? (Tenga en cuenta que no tengo experiencia en secuencias de comandos).


Basado en las respuestas aquí, reuní:

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

Luego, informé este código en los foros de Ubuntu yVaphellTrabajé más en ello. A continuación se muestra la versión de Vaphell y es la que estoy 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

Respuesta1

Puedes usar

xset -dpms; xset s off

para evitar que la pantalla se vuelva negra.

Para habilitar esto nuevamente use

xset +dpms; xset s on

Por lo tanto, -dpmsdesactiva las funciones de ahorro de energía, que pueden apagar todo el monitor y s offdesactiva la función de protector de pantalla del servidor X.

Esto no funciona con xscreensaver, que se mencionó en los comentarios.

Respuesta2

Tienes un par de problemas, primero necesitarás 2 iteraciones de topcada vez, mira mi respuestaaquíy el informe de erroraquí.

El otro problema es que bash no utiliza punto flotante, por lo que si el uso de su CPU es algo así como 6.2, .2interrumpirá el script. Bash simplemente no está diseñado para operaciones aritméticas "complejas". Una forma de evitar esto sería mover la >5marca dentro de su 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

Respuesta3

Primero, necesitas instalar xdotool y rand. Ejemplo en Ubuntu:

sudo apt install xdotool rand

Luego ejecute esta frase en una terminal (como usuario):

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

información relacionada