Skript zum Verhindern der Bildschirmausblendung durch „Mausbewegung“ funktioniert nicht

Skript zum Verhindern der Bildschirmausblendung durch „Mausbewegung“ funktioniert nicht

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, topund 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 -dpmswerden die Energiesparfunktionen deaktiviert, wodurch der gesamte Monitor ausgeschaltet werden kann und s offdie 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 topjedes 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 .2zu verschieben :>5awk

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

verwandte Informationen