
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 top
y, 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, -dpms
desactiva las funciones de ahorro de energía, que pueden apagar todo el monitor y s off
desactiva 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 top
cada 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
, .2
interrumpirá el script. Bash simplemente no está diseñado para operaciones aritméticas "complejas". Una forma de evitar esto sería mover la >5
marca dentro de su 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
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;