Wer sein Smarthome über ein zentrales Wand-Tablet steuert hat an diesen eigentlich keine großen Anforderungen, oder doch?
Anforderungen
- Touchscreen Monitor/Bildschirm größer 15″, besser 18″ Zoll
- Kein Tablet System von Apple(iPad) oder Android
- Ein- und Ausschalten des Bildschirms per einfachem Remote-Command (bzw. bei Bewegungserkennung des Smarthomes)
Das Smarthome erkennt in meinem Fall per Präsenzmelder ob jemand im Raum ist und soll dem Tablet-Bildschirm mitteilen ob der Bildschirm Ein oder Aus sein soll.
Bisherige Systeme
- Android-Tablet: war längere Zeit im Einsatz, Problem hier ist jedoch die schnelle Alterung, die zu geringe Bildschirmgrösse und den Balast den so ein System mitbringt.
- Windows-OS: Windows mit dem IOT-Link Tool, jedoch muss es doch mit weniger Ballast gehen um nur eine einzelne Webseite anzuzeigen..
- Porteus-Linux: eigentlich genau das richtige für diesen Zweck, jedoch ist Porteus nur mehr im kostenpflichtigen Abo erhältlich, also an der Zeit eine Alternative für Porteus Linux zu finden.
Neues System
- Der Wunsch war ein schlankes und stabiles Debian Linux im Kiosk Mode, das die Befehle einfach per Secure Shell entgegen nimmt und ausführt
- Einen neuen 18″ Touchscreen Monitor und immer noch der INTEL NUC, jedoch nun mit Debian 12 minimal, anstatt der Porteus-Linux Distribution
![](https://www.flurweg.net/wp-content/uploads/Wandtablet_Touchscreen_18Zoll-1020x575.jpg)
Debian 12, Kiosk System Script
Ziel war es ein Skript zu schreiben das das folgendes erledigt:
- Installation und Konfiguration der notwendigen Pakete (openbox, lightdm, vnc)
- Einrichtung des xorg Umgebung (Mauszeiger ausblenden) und des Diskplaymanagers (Autologin)
- Einrichtung eines Autostart Scripts, das nur den Browser startet um die gewünschte URL anzugeigen
- Beim Einsatz einer eigenen internen CA kann das Zertifikat von dieser importiert werden so das die verschlüsselte Seite vom Browser akzeptiert wird
- Als Ersatz für VNC könnte man den RemoteUtilities Agent installieren (Abhängigkeiten installiert das Script, der Agent selbst beim Hersteller herunterladen und installieren)
Das Script ist fertig und setzt ein installiertes und fertig konfiguriertes Debian Minimal voraus (nur SSH-Server und Standard-Tools, keine Gui)
Dieses Skript findet ihr auf dieser Seite unter Menü Computer>Files>Linux>Scripts>Debian-Kiosk-Openbox.sh
Ein Auszug daraus..
#!/bin/bash
#(c) by www.flurweg.net
TITLE="Debian 12 Kiosk (Openbox)"
#--------------------------------------------------------------------------------------------------------------------------------
#Variablen
#--------------------------------------------------------------------------------------------------------------------------------
USERNAME=kiosk # Benutzername
VNCPASS=pass # Passwort für den VNC Zugriff
URL=https://www.debian.org/ # URL
#Variablen ab hier können bei Nichtbenutzung einfach per # vor der Zeile deaktiviert werden!
#CERT=domain_CA.crt # Eigenes Selfsign Zertifikat importieren
#CERTURL=http://ca.domain.net/certs # URL wo das Zertifikat heruntergeladen und dann importiert wird
DISABLECONSOLE=0 # 0=Sperrt den Consolenzugriff per [Strg]+[Alt]+[F2] usw..
GRUBTIMEOUT=0 # Angabe der Wartezeit (in Sekunden) des Grub-Bootloaders (und Splash aktivieren)
SSHROOTLOGIN=1 # 1=Erlaube root sich per SSH anzumelden
REMOTEUTILITIES=0 # Abhängigkeiten für RemoteUtilities installieren (Agent muss manuell installiert werden)
#--------------------------------------------------------------------------------------------------------------------------------
#Hilfe
#Installation mit 2 Befehlen
# SCRIPT=debian-kiosk-openbox.sh
# wget www.flurweg.net/files/linux/debian/scripts/$SCRIPT && chmod +x $SCRIPT && ./$SCRIPT
#Bildschirm über SSH Sitzung steuern (Zuvor Password für den SSH-Login des kiosk Users setzen! Befehl: passwd kiosk)
# ssh kiosk@debian-kiosk 'export DISPLAY=":0"; xset dpms force off'
# ssh kiosk@debian-kiosk 'export DISPLAY=":0"; xset dpms force on'
clear && echo $TITLE
echo
echo "Voraussetzungen:"
echo " Debian Netinst ohne GUI"
echo " Die Einstellungen sollten schon erledigt sein"
echo " Hostname, DNS, timesyncd usw.."
echo
read -p "Press [Enter] to start.."
clear && echo $TITLE
echo "Aktualisiere System.."
sleep 2
apt update -y && apt dist-upgrade -y
Script Download, Anpassung und Installation
SCRIPT=debian-kiosk-openbox.sh
#Download
wget www.flurweg.net/files/debian/scripts/$SCRIPT && chmod +x $SCRIPT
#Anpassung der Variablen
nano $SCRIPT
#Installation
./$SCRIPT
Das Script erstellt einen neuen Befehl kiosk, damit kann die Startkonfiguration den eigenen Bedürfnissen angepasst werden.
#!/bin/bash
#Standby des Bildschirms deaktivieren
xset dpms 0 0 0
#Screensaver deaktivieren
xset s 0 0
#Starte Oberfläche
startx &
#VNC starten
x11vnc -forever -loop -noxdamage -repeat -rfbport 5900 -shared -passwd geheim
#Remote-Utilities Agent starten
#/usr/bin/r-agent &
#Browser starten
while :
do
chromium \\
--no-first-run \\
--start-maximized \\
--disable \\
--disable-translate \\
--disable-infobars \\
--disable-suggestions-service \\
--disable-save-password-bubble \\
--disable-session-crashed-bubble \\
--incognito \\
--kiosk "https://io.domain.net"
sleep 5
done &
SSH Remote Befehle
Und wie schalte ich nun per SSH Command den externen Touchscreen ein und aus?
- Kennwort für den kiosk Benutzer erstellen
passwd kiosk - Einrichtung des Kennwortlosen Zugriff (authorized Keys) von dem System was den Befehl senden können soll
ssh-keygen
ssh-copy-id kiosk@<IP> - Testen der Anmeldung mit
ssh kiosk@<IP> - Senden des Befehls für Bildschirm Aus
ssh kiosk@<IP> ‘export DISPLAY=”:0″; xset dpms force off’
Berechtigungen für kiosk Benutzer
Wer zusätzlich per SSH Command einen Reboot des Systems auslösen können möchte sollte dem kiosk Benutzer die Berechtiungen dafür per visudo erteilen
kiosk ALL=NOPASSWD:/usr/sbin/reboot
Der Befehl zum Neustart lautet dann einfach
ssh kiosk@<IP> sudo reboot
Per Smarthome (Symcon) das Display ein- und ausschalten
In meinem Symcon Smarthome sieht das PHP Script zum ein- und ausschalten des Displays nun so aus
<?php
#Script zum ein- und ausschalten des Wandtablets
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
include("15096.ips.php"); //Globale Variablen
switch ($_IPS['VALUE']) {
case 0: #Display aus
$Result = SSHC_Execute($ID_SSH_TKU, 'export DISPLAY=":0"; xset dpms force off');
LF(3,eName().": Display aus");
break;
case 1: #Display ein
$Result = SSHC_Execute($ID_SSH_TKU, 'export DISPLAY=":0"; xset dpms force on');
LF(3,eName().": Display ein");
break;
case 2: #Reboot
$Result = SSHC_Execute($ID_SSH_TKU, 'sudo reboot');
LF(3,eName().": Reboot");
break;
}