La secuencia de comandos para evitar que la pantalla quede en blanco usando "mover el mouse" no funciona

9

Este es mi intento de crear una secuencia de comandos que use un "movimiento del mouse" para evitar que la pantalla quede en blanco mientras veo videos. Espero usar el valor para el proceso de% 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

Lamentablemente, 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í, puse juntas:

#!/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é sobre este código en los foros de Ubuntu y Vaphell trabajó más en él. A continuación se muestra la versión de Vaphell y es lo 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

fuente
para empezar, -gtespera operandos enteros, no coma flotante. Y no estoy seguro de por qué estás usando ((... ))en lugar de sólo [... ]. o por qué está utilizando CPU% como desencadenante ... o incluso por qué está extrayendo la utilización de CPU% de un programa de maldiciones como top en lugar de algo comops -heo %C --sort -%cpu | head -1
cas
55
En mi opinión, sería mejor descubrir por qué su programa de reproductor de video no deshabilita el protector de pantalla y lo arregla. ¿Qué jugador usas? (por ejemplo, totem, vlc, ...) y qué escritorio / gestor de ventanas (gnome, xfce, lxde, kde, otro) y qué protector de pantalla.
cas
1
Sí, me he encontrado con problemas vlc / gnome antes. Iirc, terminé usando xsetcomo lo sugiere Raphael a continuación.
cas
44
Quizás más que un poco relacionado: xkcd.com/196
DanteTheEgregore
3
¿Puedo sugerirle que simplemente instale una aplicación para evitar que se borre la pantalla mientras se ejecutan los videos? Yo uso cafeína , que funciona muy bien.
Paddy Landau

Respuestas:

5

Tiene un par de problemas, primero, necesitará 2 iteraciones de topcada vez, vea mi respuesta aquí y el informe de error aquí .

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

Puedes usar

xset -dpms; xset s off

para evitar que la pantalla se ponga 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 offdesactivar la función de protector de pantalla del servidor X.

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

Raphael Ahrens
fuente
¿No supone eso que estás usando xscreensaver? ¿Funcionará con cualquier protector de pantalla? ¿Incluso a los de DE gnome-screensaver?
terdon
@terdon Hasta donde yo sé, esto desactiva todos los tipos de salvapantallas.
Raphael Ahrens
Quiero algo que no necesite mi intervención
@ vasa1 siempre que esto funcione para su protector de pantalla, no necesita más intervención que su script. Simplemente ejecuta ese comando una vez y el protector de pantalla está apagado.
terdon
2
@ vasa1 podría usar esto en lugar de xdotool mousemove 0 100.
Raphael Ahrens
0

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

sudo apt install xdotool rand

Luego ejecute este one-liner 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;
Pivert
fuente