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é top
et 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
-gt
attend 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
xset
comme suggéré par Raphael ci-dessous.Réponses:
Vous avez quelques problèmes, tout d'abord, vous aurez besoin de 2 itérations à
top
chaque 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.2
casse 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>5
chèque dans votreawk
commande:la source
Vous pouvez utiliser
pour empêcher l'écran de devenir noir.
Pour réactiver cela, utilisez
Ainsi ,
-dpms
désactive les fonctions d' économie d' énergie de puissance, ce qui peut éteindre tout le moniteur ets off
désactive la fonction d'économiseur d'écran du serveur X.Cela ne fonctionne pas avec le
xscreensaver
, qui a été mentionné dans les commentaires.la source
xscreensaver
? Cela fonctionnera-t-il avec n'importe quel économiseur d' écran? Même les DE commegnome-screensaver
?xdotool mousemove 0 100
.Tout d'abord, vous devez installer xdotool & rand. Exemple sur Ubuntu:
Exécutez ensuite ce one-liner dans un terminal (en tant qu'utilisateur):
la source