====== Display Panel ======
===== Install =====
Wegen zu vielen Problemen mit Wayland wird hier **Bookworm mit X11** genutzt.
Das Hauptproblem ist, dass das Display beim Stromsparen einen nervigen Bildschirm anzeigt ... "No Signal" ...
==== Updates ====
* Command Line \\ ''sudo apt update && sudo apt upgrade -y && sudo apt install -y git git-lfs silversearcher-ag wavemon hexedit sudoku tcpdump iptraf mc htop dcfldd nano usbutils openvpn ranger tldr ncdu can-utils multitail fd-find lsof x11vnc minicom joystick i2c-tools speedtest-cli iotop fio ir-keytable curl inxi lshw nala fzf duf && mkdir -p ~/.local/share && tldr -u''
* UI Tools \\ ''sudo apt update && sudo apt upgrade -y && sudo apt install -y flameshot terminator cutecom jstest-gtk xclip''
* Nutzloses Zeug \\ ''sudo apt autoremove -y modem* cups* avahi* triggerhappy* rpi-connect openvpn''
==== Display ====
* ''sudo raspi-config'' -> Screen Blanking aus !
* Screensaver aus
* ''mkdir -p /home/pi/.config/lxsession/LXDE-pi''
* ''cp /etc/xdg/lxsession/LXDE-pi/autostart /home/pi/.config/lxsession/LXDE-pi/autostart''
* ''nano /home/pi/.config/lxsession/LXDE-pi/autostart''
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
#@xscreensaver -no-splash
@xset s off
@xset -dpms
* ''sudo apt remove xscreensaver''
* Venv einrichten
* ''sudo apt -y update && sudo apt-get install -y build-essential cmake make gcc pkg-config python3-dev python3-virtualenv libsystemd-dev libopenblas-dev''
* ''cd ~ && mkdir -p DisplayOnOff && cd DisplayOnOff ''
* ''python -m venv . && source bin/activate''
* ''pip3 install %%--%%upgrade pip && pip3 install RPi.GPIO pynput smbus paho-mqtt psutil''
* Compile VL53 Lib ...
* ''sudo apt-get install build-essential python-dev''
* ''cd ~''
* ''git clone https://github.com/pimoroni/VL53L0X_rasp_python.git''
* ''cd VL53L0X-python''
* ''make''
* VL53L0X.py in den Scriptordner kopieren ...
* Tests starten ...
==== Tests ====
=== VL ===
==== X11VNC ====
* ''sudo apt install x11vnc''
* für einen ersten Test kann man das verwenden \\ ''x11vnc -usepw -forever -display :0''
* **Einrichtung als Dienst**
* ''sudo x11vnc -storepasswd /etc/x11vnc.pass''
* ''sudo nano /lib/systemd/system/x11vnc.service''
*
[Unit]
Description=Start X11VNC
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -display :0 -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared
[Install]
WantedBy=multi-user.target
* ''sudo systemctl enable x11vnc.service''
===== Motion Detect =====
* Sensor : VL53L0X
* Altes Script \\ import sys
import time
import VL53L0X
import os
import subprocess
import RPi.GPIO as GPIO
from pynput import mouse
def on_move(x, y):
global Display_Last_Action
print('Pointer moved to {0}'.format((x, y)))
sys.stdout.flush()
Display_Last_Action = time.time()
print("Time %d" % (Display_Last_Action))
def on_click(x, y, button, pressed):
global Display_Last_Action
print('{0} at {1}'.format('Pressed' if pressed else 'Released', (x, y)))
sys.stdout.flush()
Display_Last_Action = time.time()
print("Time %d" % (Display_Last_Action))
def on_scroll(x, y, dx, dy):
global Display_Last_Action
print('Scrolled {0} at {1}'.format('down' if dy < 0 else 'up', (x, y)))
sys.stdout.flush()
Display_Last_Action = time.time()
print("Time %d" % (Display_Last_Action))
def toggleOnOff():
GPIO.output(36, GPIO.HIGH)
time.sleep(0.4)
GPIO.output(36, GPIO.LOW)
print("Toggle Switch ....")
sys.stdout.flush()
listener = mouse.Listener(
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll)
listener.start()
# Last Time Event happend on Display
Display_Last_Action = time.time()
Display_State = True
Display_Timeout_Sec = 180
# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)
# RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setwarnings(False)
# Pin 36 (GPIO 16) auf Output setzen -> Display ON / OFF
GPIO.setup(36, GPIO.OUT)
# Pin 38 (GPIO 20) auf Output setzen -> Brightness +
GPIO.setup(38, GPIO.OUT)
# Pin 40 (GPIO 21) auf Output setzen -> Brightness -
GPIO.setup(40, GPIO.OUT)
# Create a VL53L0X object
tof = VL53L0X.VL53L0X(i2c_bus=1,i2c_address=0x29)
tof.open()
tof.start_ranging(VL53L0X.Vl53l0xAccuracyMode.BETTER)
while 1:
# Distanz vom VL53L0X Sensor messen
distance = tof.get_distance()
#print("%d mm, %d cm" % (distance, (distance/10)))
# Display ggf. abschalten
if time.time()-Display_Last_Action >= Display_Timeout_Sec:
if Display_State == True:
#subprocess.call("DISPLAY=:0 xset dpms force off", shell=True)
toggleOnOff()
Display_State = False
print("Display wird abgeschaltet ...")
sys.stdout.flush()
# Abstand vom Sensor pruefen
if distance < 900:
print("DETECTED, %d cm , %d sec" % (distance/10, time.time()-Display_Last_Action ))
sys.stdout.flush()
Display_Last_Action = time.time()
print("Time %d" % (Display_Last_Action))
# Display ggf. wieder einschalten
if time.time()-Display_Last_Action < Display_Timeout_Sec:
if Display_State == False:
#subprocess.call("DISPLAY=:0 xset dpms force on", shell=True)
toggleOnOff()
Display_State = True
print("Display wird eingeschaltet ...")
sys.stdout.flush()
# Display Einschalten
#os.system('DISPLAY=:0 xdotool key "shift"')
###subprocess.call("DISPLAY=:0 xset s reset", shell=True)
#subprocess.call("DISPLAY=:0 xset dpms force on", shell=True)
#subprocess.call("DISPLAY=:0 xset dpms 120 120 120", shell=True)
time.sleep(0.1)
tof.stop_ranging()
tof.close()
* Service \\
pi@SHome-Display-VPN-DNS:/ $ cat lib/systemd/system/display.service
[Unit]
Description=Display Controller
[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/usr/bin/python /home/pi/DisplayOn/MotionDetect.py
Restart=always
RestartSec=30s
KillMode=process
TimeoutSec=infinity
[Install]
WantedBy=graphical.target
===== 100 Mbit Fix (Buster) =====
* ''/etc/systemd/system/eth0fix.service''
*
[Unit]
Description=100MBit Fix for eth0
Requires=network.target
[Service]
ExecStart=/sbin/ethtool -s eth0 speed 100 duplex full autoneg on
Type=oneshot
[Install]
WantedBy=multi-user.target\
===== Chromium Start =====
pi@SHome-Display-VPN-DNS:~ $ cat chrome.sh
#!/bin/sh -e
pfad="http://192.168.30.22:8082/vis/index.html?main#Home"
# Chromium ggf. beenden
chromerunning=`ps aux | grep chromium |wc -l`
echo $chromerunning
if test $chromerunning -gt 1; then
echo "Beende alle Chromium Instanzen ..."
sudo killall /usr/lib/chromium-browser/chromium-browser-v7
sleep 4
fi
# Chromium zurücksetzen
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences
# Chromium starten
DISPLAY=:0 /usr/lib/chromium-browser/chromium-browser-v7 --touch-events=enabled --noerrdialogs --check-for-update-interval=31536000 &
# Chromium in Fullscreen
sleep 15
#WID=$(DISPLAY=:0 xdotool search --onlyvisible --class chromium|head -1)
#DISPLAY=:0 xdotool windowactivate ${WID}
#DISPLAY=:0 xdotool key F11
# An Display Position navigieren mit der Maus und Vollbild auslösen
DISPLAY=:0 /usr/bin/xdotool mousemove --sync 954 200 click 1
exit 0