
Dies ist mein Versuch, ein Skript zu erstellen, das mithilfe einer „Mausbewegung“ verhindert, dass der Bildschirm beim Ansehen von Videos schwarz wird. Ich hoffe, den Wert für den Prozess mit der höchsten CPU-Auslastung verwenden zu können, top
und wenn die CPU-Auslastung 5 % übersteigt, sollte eine Mausbewegung erfolgen.
#!/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
Leider funktioniert es nicht. Die Fehler lauten wie folgt:
[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 ")
Wie behebe ich das? (Bitte beachten Sie, dass ich keine Erfahrung mit Skripting habe.)
Basierend auf den Antworten hier habe ich Folgendes zusammengestellt:
#!/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
Dann habe ich diesen Code in den Ubuntu-Foren gemeldet undVaphellhabe weiter daran gearbeitet. Unten ist Vaphells Version und das, was ich verwende:
#!/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
Antwort1
Sie können
xset -dpms; xset s off
um zu verhindern, dass der Bildschirm schwarz wird.
Um dies wieder zu aktivieren, verwenden Sie
xset +dpms; xset s on
Dadurch -dpms
werden die Energiesparfunktionen deaktiviert, wodurch der gesamte Monitor ausgeschaltet werden kann und s off
die Bildschirmschonerfunktion des X-Servers ausgeschaltet wird.
Dies funktioniert nicht mit dem xscreensaver
, was in den Kommentaren erwähnt wurde.
Antwort2
Sie haben ein paar Probleme, erstens benötigen Sie top
jedes Mal 2 Iterationen, siehe meine AntwortHierund der FehlerberichtHier.
Das andere Problem ist, dass Bash keine Gleitkommazahlen verarbeiten kann. Wenn Ihre CPU-Auslastung also etwa beträgt 6.2
, wird das Skript dadurch unterbrochen. Bash ist einfach nicht für „komplexe“ Rechenoperationen ausgelegt. Eine Möglichkeit, dies zu umgehen, besteht darin, die Prüfung in Ihren Befehl .2
zu verschieben :>5
awk
#!/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
Antwort3
Zuerst müssen Sie xdotool & rand installieren. Beispiel unter Ubuntu:
sudo apt install xdotool rand
Führen Sie dann diesen Einzeiler in einem Terminal aus (als Benutzer):
eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;