Ein Skript zum Verhindern des Austastens des Bildschirms mithilfe der Mausbewegung funktioniert nicht


9

Dies ist mein Versuch, ein Skript zu erstellen, das eine "Mausbewegung" verwendet, um ein Ausblenden des Bildschirms beim Ansehen von Videos zu verhindern. Ich hoffe, den Wert für den höchsten CPU% -Prozess in verwenden zu können. topWenn die CPU-Auslastung 5% überschreitet, 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

Geht leider nicht. Die Fehler sind 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 Skripten habe.)


Basierend auf den Antworten hier habe ich 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 und Vaphell hat weiter daran gearbeitet. Unten ist Vaphells Version und ich verwende sie:

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

zu beginnen, -gterwartet ganzzahligen Operanden, nicht Gleitkomma-. und ich bin mir nicht sicher, warum du ((... ))und nicht nur [... verwendest ]. oder warum du CPU% als Auslöser verwendest ... oder sogar warum du CPU% Auslastung aus einem Fluchprogramm wie top extrahierst und nicht so etwas wieps -heo %C --sort -%cpu | head -1
cas

5
IMO, Sie sollten besser herausfinden, warum Ihr Video-Player-Programm den Bildschirmschoner nicht deaktiviert, und das beheben. Welchen Player benutzt du? (zB Totem, vlc, ...) und welcher Desktop- / Fenstermanager (gnome, xfce, lxde, kde, other) und welcher Bildschirmschoner.
Cas

1
Ja, ich bin schon einmal auf VLC / Gnome-Probleme gestoßen. iirc, ich habe letztendlich verwendet, xsetwie von Raphael unten vorgeschlagen.
Cas

4
Vielleicht mehr als ein bisschen bezogen werden : xkcd.com/196
DanteTheEgregore

3
Darf ich vorschlagen, dass Sie einfach eine Anwendung installieren, um ein Ausblenden des Bildschirms zu verhindern, während Videos ausgeführt werden? Ich benutze Koffein , das in der Tat sehr gut funktioniert.
Paddy Landau

Antworten:


5

Sie haben ein paar Probleme. Zuerst benötigen Sie jeweils 2 Iterationen. topMeine Antwort finden Sie hier und den Fehlerbericht hier .

Das andere Problem ist, dass bash kein Gleitkomma ausführt. Wenn Ihre CPU-Auslastung also so etwas wie ist 6.2, .2wird das Skript beschädigt. Bash ist einfach nicht für 'komplexe' arithmetische Operationen ausgelegt. Eine Möglichkeit, dies zu umgehen, besteht darin, den >5Scheck in Ihrem awkBefehl zu verschieben:

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

9

Sie können verwenden

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

So -dpmsdeaktiviert die die Stromenergiesparfunktionen, die den ganzen Monitor und ausschalten können s offschalten die Bildschirmschoner - Funktion des X - Servers.

Dies funktioniert nicht mit dem xscreensaver, was in den Kommentaren erwähnt wurde.


Geht das nicht davon aus, dass Sie verwenden xscreensaver? Funktioniert es mit jedem Bildschirmschoner? Sogar DE mögen gnome-screensaver?
Terdon

@terdon Soweit ich weiß, werden alle Arten von Bildschirmschonern deaktiviert.
Raphael Ahrens

Ich möchte etwas, das meine Intervention nicht benötigt

@ vasa1 Solange dies für Ihren Bildschirmschoner funktioniert, muss nicht mehr eingegriffen werden als für Ihr Skript. Sie führen diesen Befehl nur einmal aus und der Bildschirmschoner ist ausgeschaltet.
Terdon

2
@ vasa1 Sie könnten dies anstelle der verwenden xdotool mousemove 0 100.
Raphael Ahrens

0

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.