Wie zuvor erwähnt, arbeite ich gerade an einem Adafruit PiTFT, dass auf einen Raspberry Pi gesteckt ist.
Mein Problem: Der Bildschirmschoner geht nach einigen Minuten an und schaltet den Bildschirm schwarz, die Hintergrundbeleuchtung des Displays bleibt aber angeschaltet.
Ich habe Stunden damit verbracht eine Möglichkeit zu finden, um ein Script oder Befehl auszuführen, wenn der Bildschirmschoner aktiviert oder deaktiviert wird. Anscheinend ist diese Möglichkeit selten gefragt, den ich habe keine passende Lösung finden können und mich selbst um Marke-Eigenbau bemüht…Der Bildschirmschoner des Raspbian besitzt selbst keine Konfigurationsmöglichkeiten, um spezielle Befehle vor oder nach der Ausführung abzusetzen.
Allerdings ist es möglich die Aktivität des xscreensavers mit dem Befehl „xscreensaver-command -watch“ zu überwachen. Hierfür muss zuerst das komplette Paket installiert werden:
1 |
sudo apt-get install xscreensaver |
Danach solltet ihr euren Raspberry neu starten und euch auf dem Desktop anmelden (ggf. tightvncserver installieren oder RPI per HDMI an einen Monitor anschließen).
Im Startmenü unter Einstellungen taucht nun der Punkt „Screensaver“ auf – hier habe ich lediglich ausgewählt, dass der Bildschirmschoner nach 1 Minute aktiviert wird und den Bildschirm schwärzt (also keine Farbeffekte o.ä.).
Nun startet in einer ersten Putty-Sitzung den Befehl:
1 |
xscreensaver-command -watch |
Öffnet nun eine zweite Sitzung und führt folgende Befehle aus, um den Bildschirmschoner testweise an- und abzuschalten:
1 2 |
xscreensaver-command -activate xscreensaver-command -deactivate |
Daraufhin erscheint im ersten Putty-Fenster folgender Output:
1 2 3 4 |
pi@raspberrypi ~ $ xscreensaver-command -watch xscreensaver-command: warning: $DISPLAY is not set: defaulting to ":0.0". BLANK Sun Jan 12 14:14:55 2014 UNBLANK Sun Jan 12 14:14:59 2014 |
Ich habe daraufhin ein einfaches Python3-Script geschrieben (wie üblich: ich bin kein Programmierer und das ist nur ein Entwurf) das die Ausgabe von „xscreensaver-comand -watch“ auf die Strings „BLANK“ und „UNBLANK“ überwacht:
1 2 3 4 5 6 7 8 9 10 11 12 |
import subprocess process = subprocess.Popen(['xscreensaver-command','-watch'], stdout=subprocess.PIPE) for line in iter(process.stdout.readline, ''): read_line = line.decode("utf-8") if "BLANK" in read_line and not "UNBLANK" in read_line: print("Bildschirmschoner aktiviert") if "UNBLANK" in read_line: print("Bildschirmschoner deaktiviert") # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 |
Ihr könnt das ganze auf Basis des obigen Scripts auf eure Bedürfnisse anpassen.
Mein Script zum Steuern der Hintergrundbeleuchtung des Adafruit PiTFT sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import subprocess subprocess.Popen(['sudo', 'sh', '-c', 'echo 252 > /sys/class/gpio/export']) subprocess.Popen(['sudo', 'sh', '-c', 'echo "out" > /sys/class/gpio/gpio252/direction']) subprocess.Popen(['sudo', 'sh', '-c', 'echo "1" > /sys/class/gpio/gpio252/value']) process = subprocess.Popen(['xscreensaver-command','-watch'], stdout=subprocess.PIPE) for line in iter(process.stdout.readline, ''): read_line = line.decode("utf-8") if "BLANK" in read_line and not "UNBLANK" in read_line: print("Bildschirmschoner aktiviert") subprocess.Popen(['sudo', 'sh', '-c', 'echo "0" > /sys/class/gpio/gpio252/value']) if "UNBLANK" in read_line: print("Bildschirmschoner deaktiviert") subprocess.Popen(['sudo', 'sh', '-c', 'echo "1" > /sys/class/gpio/gpio252/value']) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 |
Vielen Dank für die super Anleitung Bastian!
Ich habe lange nach einer Möglichkeit gesucht um die Beleuchtung meines Waveshare Touch Displays auszuschalten.
Mein Code sieht folgendermaßen aus:
“
import subprocess
process = subprocess.Popen([‚xscreensaver-command‘,‘-watch‘], stdout=subprocess.PIPE)
for line in iter(process.stdout.readline, “):
read_line = line.decode(„utf-8“)
if „BLANK“ in read_line and not „UNBLANK“ in read_line:
print(„Bildschirmschoner aktiviert“)
subprocess.call([‚gpio‘,‘-g‘,’pwm‘, ’18‘, ‚0‘])
if „UNBLANK“ in read_line:
print(„Bildschirmschoner deaktiviert“)
subprocess.call([‚gpio‘,‘-g‘,’pwm‘, ’18‘, ‚1024‘])
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
„