Für ein kleines Projekt habe ich mir einen 7" Touchscreen für ein Raspberry Pi bestellt. Das Einrichten gelingt sehr schnell. Was schade ist, das der Display mit xscreensaver schwarz wird, aber nicht phsysisch abschaltet. Ich habe aus verschiedenen Quellen funktionen zusammengenommen und diese für den 7" Touchscreen optimiert.
~/bin/xscreensaver-displayhelper
Das Hilfsprogramm besteht aus 2 Teilen die auf den xscreensaver aufbaut. Der erste steuert die HDMI Schnittstelle, der zweite das Display direkt per Flachkabel. Für HDMI müssen zwei Voraussetzungen erfüllt sein. Das Packet "tvservice" und der User muss in der Gruppe video sein. Für den Touchscreen muss das Utility als root, bez. per sudo gestartet werden.
#!/bin/bash
#Override DISPLAY (if starts over ssh/shell)
#export DISPLAY=:0.0
howto() {
PROG=`basename $0`
echo "+-----------------------+------------+"
echo "displayhelper v1.0 (c)stastka.ch"
echo "+-----------------------+------------+"
echo "Usage: $PROG [duration_in_sec] [touch|hdmi]"
echo "Disable Raspberry Pi Official 7\" Touchscreen or HDMI after xscreensaver starts."
echo "Default Duration: 10 seconds"
echo "Default Displayoutput: touchscreen"
echo "Example: 7\" Touchscreen after 20 seconds go Backlight off"
echo ""
echo "$PROG 20 touch"
echo ""
echo "Options:"
echo " -s, --status status of display (on|off)"
echo " -f, --off Touchscreen/Hdmi off"
echo " -o, --on Touchsceen/Hdmi on"
echo " -h, --help This help text"
}
getstatus() {
if [ "$SCREENMODE" == "hdmi" ]; then
tvservice --status | grep -q HDMI
RESULT=$?
if [ "$RESULT" -eq 1 ]; then
echo "HDMI are off (=$RESULT)"
else
echo "HDMI are on (=$RESULT)"
fi
elif [ "$SCREENMODE" == "touch" ]; then
RESULT="$(cat /sys/class/backlight/rpi_backlight/bl_power)"
if [ "$RESULT" -eq 1 ]; then
echo "Touchscreen Backlight are off (=$RESULT)"
else
echo "Touchscreen Backlight are on (=$RESULT)"
fi
fi
}
DURATION_SEC=10
if [[ "" != "$1" && $1 =~ ^[0-9]+$ ]] ; then
DURATION_SEC=$1
fi
SCREENMODE="touch"
if [[ "" != "$2" && $2 =~ ^[a-z]+$ ]] ; then
SCREENMODE=$2
fi
display_off() {
if [ "$SCREENMODE" == "hdmi" ]; then
# no --quiet switch
tvservice --off > /dev/null
elif [ "$SCREENMODE" == "touch" ]; then
sudo echo 1 > /sys/class/backlight/rpi_backlight/bl_power
fi
}
display_on() {
if [ "$SCREENMODE" == "hdmi" ]; then
# get the current state of HDMI output
tvservice --status | grep -q HDMI
RESULT=$?
elif [ "$SCREENMODE" == "touch" ]; then
RESULT="$(cat /sys/class/backlight/rpi_backlight/bl_power)"
fi
# if Touchscreen/HDMI was not found, RESULT=1 ... turn it back on
if [ "$RESULT" -eq 1 ] ; then
if [ "$SCREENMODE" == "hdmi" ]; then
# no --quiet switch
tvservice --preferred > /dev/null
fbset -depth 8
fbset -depth 16
xrefresh
elif [ "$SCREENMODE" == "touch" ]; then
sudo echo 0 > /sys/class/backlight/rpi_backlight/bl_power
fi
fi
}
if [[ "-f" == "$1" || "--off" == "$1" ]] ; then
echo "Touchscreen turn off"
display_off
exit
fi
if [[ "-h" == "$1" || "--help" == "$1" ]] ; then
howto
exit
fi
if [[ "-s" == "$1" || "--status" == "$1" ]] ; then
getstatus
exit
fi
if [[ "-o" == "$1" || "--on" == "$1" ]] ; then
echo "Touchscreen/HDMI turn on"
display_on
exit
fi
TEMPFILE=`tempfile --prefix=xsdisplayhelper. --suffix=.pid`
echo 0 > $TEMPFILE
interrupt_potential_sleeping_processes() {
SLEEP_PID=0
if [ -x $TEMPFILE ] ; then
SLEEP_PID=`cat $TEMPFILE`
fi
if [ "0" != "$SLEEP_PID" ] ; then
echo 0 > $TEMPFILE
kill $SLEEP_PID
fi
}
# failsafe to make sure monitor stays on in case of quit
display_on_exit() {
interrupt_potential_sleeping_processes
rm $TEMPFILE
display_on
exit
}
#set -o monitor notify
#set -bm
#set +m
trap 'display_on_exit' SIGQUIT SIGINT
display_on
# see fancy process substitution down below
while read line ; do
if [[ $line =~ ^BLANK || $line =~ ^LOCK ]] ; then
(
sleep $DURATION_SEC
display_off
echo 0 > $TEMPFILE
) &
echo $! > $TEMPFILE
fi
if [[ $line =~ ^UNBLANK ]] ; then
interrupt_potential_sleeping_processes
display_on
fi
done < <( xscreensaver-command --watch )
display_on_exit
Möglichkeiten:
- Touchscreen nach 5 Sekunden abschalten: ~/bin/xscreensaver-displayhelper 5 touch&
- HDMI nach 5 Sekunden abschalten: ~/bin/xscreensaver-displayhelper 5 hdmi&
- Status: ~/bin/xscreensaver-displayhelper -s
- Bildschirm an: ~/bin/xscreensaver-displayhelper -o touch
- Bildschirm aus: ~/bin/xscreensaver-displayhelper -f touch
LXDE
Im Autostart des LXDE (~/.config/lxsession/LXDE-pi/autostart) fügt man folgende Zeile ein. Der Touchscreen wird nach 5 Sekunden abgeschatet:
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
sudo ~/bin/xscreensaver-displayhelper 5 touch&
Nichts gefunden
Es wurde zur Story Raspberry Pi: 7 Zoll Touchscreen oder HDMI automatisch abschalten kein Kommentar gefundenInformation
Werbung oder Ähnliches sind nicht erlaubt, daher wird jeder Beitrag geprüft und freigegeben.Advertising, etc. are not allowed, so any contribution is reviewed and approved.
Facebook-Webadress are not allowed, Facebook als Webadresse ist nicht erlaubt
* Die E-Mail wird nicht veröffentlicht / The email will not be published
** Bitte Zahl eintragen / Please enter the number
Modal Header
Some text in the Modal Body
Some other text...
(c)2024 stastka.ch // help system