Nach zehn Minuten ohne Tastatur- und Mausaktivität aktiviert sich unter Raspbian automatisch ein Bildschirmschoner. Damit wird der Bildschirminhalt zwar schwarz, der Monitor läuft aber weiter. Der Raspberry Pi ist leider nicht in der Lage, das richtige DPMS-Signal (Display Power Management Signaling) an den Monitor zu senden, damit sich dieser abschaltet. Das Problem ist u.a. hier dokumentiert:
https://github.com/raspberrypi/linux/issues/487
Zum Glück gibt es eine Möglichkeit, das Display manuell durch ein Script aus- und wieder ein zu schalten. Das gibt Ihnen die Möglichkeit, den Monitor zeitgesteuert ein- und aus zu schalten, z.b. um 6:00 ein und um 22:00 aus. Das ist Thema dieses Blog-Beitrags.
Update 20.11.2015: Es geht noch einfacher, siehe HDMI-Ausgang unkompliziert ein- und ausschalten.
Das tvservice-Kommando
Mit dem wenig bekannten tvservice
-Kommando können Sie Informationen über den HDMI-Status ermitteln und das HDMI-Signal aus- und wieder einschalten. Zuerst der Hilfetext:
tvservice
Usage: tvservice [OPTION]...
-p, --preferred Power on HDMI with
preferred settings
-e, --explicit="GROUP MODE DRIVE" Power on HDMI with explicit
GROUP (CEA, DMT, CEA_3D_SBS,
CEA_3D_TB, CEA_3D_FP)
MODE (see --modes) and
DRIVE (HDMI, DVI)
-t, --ntsc Use NTSC frequency for HDMI mode
(e.g. 59.94Hz rather than 60Hz)
-c, --sdtvon="MODE ASPECT" Power on SDTV with MODE (PAL or NTSC)
and ASPECT (4:3 14:9 or 16:9)
-o, --off Power off the display
-m, --modes=GROUP Get supported modes for GROUP (CEA, DMT)
-M, --monitor Monitor HDMI events
-s, --status Get HDMI status
-a, --audio Get supported audio information
-d, --dumpedid <filename> Dump EDID information to file
-j, --json Use JSON format for --modes output
-n, --name Print the device ID from EDID
-h, --help Print this information
Hier das Ergebnis von tvservice --status
:
tvservice --status
state 0x12001a [HDMI DMT (68) RGB full 16:10],
1920x1200 @ 60.00Hz, progressive
Mit dem Kommando tvservice --off
können Sie den Monitor ausschalten. Die meisten Monitore aktivieren dann in einen Energiesparmodus:
tvservice --off
Powering off HDMI
Und so sollte sich der Montitor wieder einschalten lassen:
tvservice --preferred
Powering on HDMI with preferred settings
Auf dem Raspberry Pi funktioniert letzteres Kommando aber nur bedingt: Der Monitor schaltet sich zwar ein, das Bild bleibt aber schwarz.
Abhilfe schafft nun ein Umschalten der virtuellen Konsole mit dem Kommando chvt
. Raspbian verwendet für den Grafikmodus normalerweise die Konsole 7. Die kurzzeitige Aktivierung von Konsole 1 (Textmodus) und danach die Re-Aktivierung von Konsole 7 (Grafikmodus) führt dazu, dass am Monitor wieder der Inhalt des Grafiksystems zu sehen ist.
sudo chvt 1
sudo chvt 7
Das neue Init-Script hdmi
Andrew Ayer hat die oben beschriebenen Schritte dankenswerterweise in ein komfortables Script verpackt. Im Vergleich zur oben skizzierten Vorgehensweise verwendet das Script noch das Kommando fgconsole
, um festzustellen, welche virtuelle Konsole gerade aktiv ist. Anschließend aktiviert das Script zuerst eine andere Konsole (1 oder 2) und danach wieder die ursprüngliche Konsole. Damit funktioniert das Script auch dann, wenn das Grafiksystem nicht die Konsole 7 nutzt.
Ich habe das Script ein wenig modifiziert, so dass es kompatibel zu anderen Init-V-Scripts ist:
#!/bin/sh
# Script /etc/init.d/hdmi
### BEGIN INIT INFO
# Provides: hdmi
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Enable and disable HDMI output on the Raspberry Pi
### END INIT INFO
is_off ()
{
tvservice -s | grep "TV is off" >/dev/null
}
case $1 in
stop)
tvservice -o
;;
start)
if is_off
then
tvservice -p
curr_vt=`fgconsole`
if [ "$curr_vt" = "1" ]
then
chvt 2
chvt 1
else
chvt 1
chvt "$curr_vt"
fi
fi
;;
status)
if is_off
then
echo off
else
echo on
fi
;;
*)
echo "Usage: $0 start|stop|status" >&2
exit 2
;;
esac
exit 0
Kopieren Sie das Script in die Zwischenablage und führen Sie dann die folgenden Kommandos aus, um den Code in /etc/init.d/hdmi
zu speichern.
sudo cat > /etc/init.d/hdmi
<Strg>+<V>
<Strg>+<D>
sudo chmod a+x /etc/init.d/hdmi
Jetzt können Sie den Monitor wie folgt in den Energiesparmodus versetzen bzw. wieder aktivieren:
sudo service hdmi stop # Monitor ausschalten
sudo service hdmi start # Monitor einschalten
Monitor zeitgesteuert ein und aus schalten
Nehmen wir an, Sie verwenden den Raspberry Pi in einem Museum, um dort Informationen zu einem Exponat anzuzeigen. Die Öffnungszeiten des Museums sind täglich von 9:00 bis 19:00 Uhr. Also wollen Sie, dass der Monitor täglich um 8:45 ein und um 19:15 ausgeschaltet wird. Das erreichen Sie durch die zwei folgenden Zeilen in /etc/crontab
:
# Datei /etc/crontab um die folgenden
# zwei Zeilen erweitern
45 8 * * * root service hdmi start
15 19 * * * root service hdmi stop
Wenn Sie sich ein wenig in die crontab-Syntax einarbeiten, können Sie auch Regeln für unterschiedliche Wochentage definieren, so dass das Display z.B. an einem Ruhetag gar nicht eingeschaltet wird.
Bildschirmschoner deaktivieren
In einem Museum und bei der Verwendung des Raspberry Pi zur Ansteuerung eines ständig angezeigten Displays ist der unter Raspbian standardmäßig aktive Bildschirmschoner natürlich nicht zweckmäßig. Um ihn zu deaktivieren, laden Sie die Datei /etc/lightdm/lightdm.conf
in einen Editor, suchen nach dem Abschnitt, der mit [SeatDefaults]
eingeleitet wird, und fügen dort die Zeile xserver-command=...
ein:
# in der Datei /etc/lightdm/lightdm.conf
...
[SeatDefaults]
xserver-command=X -s 0 -dpms
...