Skip to main content
Raspberry Pi: 7 Zoll Touchscreen oder HDMI automatisch abschalten
Raspberry Pi: 7 Zoll Touchscreen oder HDMI automatisch abschalten

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 gefunden

Information

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
Ihr Kommentar
?
?
captcha Image?
?
 

Tippsammlung

Kleine Tippsammlung für mich und dijenige die sich auf meine Webseite verirrt haben.

Archiv

JahrArchiv
Tag(s):