Le script pour empêcher le masquage d'écran à l'aide du «déplacement de la souris» ne fonctionne pas

9

Il s'agit de ma tentative de créer un script qui utilisera un "déplacement de la souris" pour empêcher la suppression de l'écran lors du visionnage de vidéos. J'espère utiliser la valeur du processus% CPU le plus élevé topet si l'utilisation du processeur dépasse 5%, un déplacement de la souris devrait se produire.

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

Malheureusement ça ne marche pas. Les erreurs sont comme ceci:

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

Comment puis-je réparer ça? (Veuillez noter que je n'ai pas d'expérience en scripting.)


Sur la base des réponses ici, j'ai rassemblé:

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

Ensuite, j'ai signalé ce code sur les forums Ubuntu et Vaphell a continué à travailler dessus. Ci-dessous, la version de Vaphell et ce que j'utilise:

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

la source
pour commencer, -gtattend des opérandes entiers, pas des virgules flottantes. et je ne sais pas pourquoi vous utilisez ((... ))plutôt que [... ]. ou pourquoi vous utilisez CPU% comme déclencheur ... ou même pourquoi vous extrayez l'utilisation du CPU% à partir d'un programme curses comme top plutôt que quelque chose commeps -heo %C --sort -%cpu | head -1
cas
5
OMI, vous feriez mieux de découvrir pourquoi votre programme de lecteur vidéo ne désactive pas l'économiseur d'écran et ne corrige pas cela. Quel joueur utilisez-vous? (par exemple totem, vlc, ...) et quel gestionnaire de bureau / fenêtre (gnome, xfce, lxde, kde, autre) et quel économiseur d'écran.
cas
1
oui, j'ai déjà rencontré des problèmes de vlc / gnome. iirc, j'ai fini par utiliser xsetcomme suggéré par Raphael ci-dessous.
cas
4
Peut-être plus un peu lié: xkcd.com/196
DanteTheEgregore
3
Puis-je vous suggérer d'installer simplement une application pour empêcher la suppression de l'écran pendant l'exécution des vidéos? J'utilise de la caféine , qui fonctionne très bien.
Paddy Landau

Réponses:

5

Vous avez quelques problèmes, tout d'abord, vous aurez besoin de 2 itérations à topchaque fois, voir ma réponse ici et le rapport de bogue ici .

L'autre problème est que bash ne fait pas de virgule flottante, donc si votre utilisation CPU est quelque chose comme 6.2, le .2casse le script. Bash n'est tout simplement pas conçu pour des opérations arithmétiques «complexes». Une façon de contourner cela serait de déplacer le >5chèque dans votre awkcommande:

#!/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
la source
9

Vous pouvez utiliser

xset -dpms; xset s off

pour empêcher l'écran de devenir noir.

Pour réactiver cela, utilisez

xset +dpms; xset s on

Ainsi , -dpmsdésactive les fonctions d' économie d' énergie de puissance, ce qui peut éteindre tout le moniteur et s offdésactive la fonction d'économiseur d'écran du serveur X.

Cela ne fonctionne pas avec le xscreensaver, qui a été mentionné dans les commentaires.

Raphael Ahrens
la source
Cela ne suppose-t-il pas que vous utilisez xscreensaver? Cela fonctionnera-t-il avec n'importe quel économiseur d' écran? Même les DE comme gnome-screensaver?
terdon
@terdon Autant que je sache, cela désactive tous les types d'économiseurs d'écran.
Raphael Ahrens
Je veux quelque chose qui n'a pas besoin de mon intervention
@ vasa1 tant que cela fonctionne pour votre économiseur d'écran, il ne nécessite pas plus d'intervention que votre script. Vous venez d'exécuter cette commande une fois et l'économiseur d'écran est désactivé.
terdon
2
@ vasa1 vous pouvez utiliser ceci au lieu de xdotool mousemove 0 100.
Raphael Ahrens
0

Tout d'abord, vous devez installer xdotool & rand. Exemple sur Ubuntu:

sudo apt install xdotool rand

Exécutez ensuite ce one-liner dans un terminal (en tant qu'utilisateur):

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