Benutzer-Werkzeuge

Webseiten-Werkzeuge


nanopi_m4:kiosk:software

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
nanopi_m4:kiosk:software [2020/11/10 00:30]
andmin
nanopi_m4:kiosk:software [2021/04/16 21:06] (aktuell)
andmin [Kiosk Ping]
Zeile 29: Zeile 29:
   * sudo apt upgrade   * sudo apt upgrade
   * sudo apt dist-upgrade   * sudo apt dist-upgrade
-  * sudo apt install xorg xserver-xorg-legacy openbox chromium xdotool unclutter lighttpd twinkle swaks bluez php-cgi+  * sudo apt install xorg xserver-xorg-legacy openbox chromium xdotool unclutter lighttpd twinkle swaks bluez php-cgi ​php7.3-gd
   * sudo lighty-enable-mod fastcgi-php   * sudo lighty-enable-mod fastcgi-php
   * sudo nano -w /​etc/​X11/​Xwrapper.config   * sudo nano -w /​etc/​X11/​Xwrapper.config
Zeile 39: Zeile 39:
 <​code>​ <​code>​
 #!/bin/sh #!/bin/sh
-if ! ps ax | grep [/]opt/kiosk.sh +    touch /tmp/kiosk.status 
-then  +    chmod 666 /​tmp/​kiosk.status 
-    ​pulseaudio --daemonize +    ​touch /​tmp/​switch.status 
-    ​sleep 2 +    ​chmod 666 /​tmp/​switch.status 
-    ​xset -dpms+    ​sleep 10
     xset s noblank     xset s noblank
     xset s 300     xset s 300
     openbox-session &     openbox-session &
-    unclutter &+    unclutter ​-grab -visible ​&
     if ! lsusb | grep "​1bcf:​2284"​ > /dev/null     if ! lsusb | grep "​1bcf:​2284"​ > /dev/null
     then      then 
         startadresse="​https://​www.kinasen.de/​wetteruebersicht.php"​         startadresse="​https://​www.kinasen.de/​wetteruebersicht.php"​
 + echo 2 > /​tmp/​switch.status
     else     else
-        ​startadresse="​JITSIURL"+ echo 1 > /​tmp/​switch.status 
 +        ​startadresse="​URL_JITSI"
     fi     fi
-    chromium --no-first-run --kiosk --agc-startup-min-volume=255 --disable-pinch --overscroll-history-navigation=0 ​--disable-translate --disable-suggestions-service --disable-save-password-bubble --start-maximized --disable-session-crashed-bubble --disk-cache-dir=/​dev/null $startadresse +    chromium --no-first-run ​--lang=de-DE ​--kiosk --agc-startup-min-volume=255 --compensate-for-unstable-pinch-zoom --disable-pinch --disable-translate --disable-suggestions-service --disable-save-password-bubble --start-maximized --disable-session-crashed-bubble --disk-cache-dir=/​tmp/kioskcache --disk-cache-size=1 ​$startadresse
-fi+
 </​code>​ </​code>​
    * sudo chmod 755 /​opt/​kiosk.sh    * sudo chmod 755 /​opt/​kiosk.sh
Zeile 62: Zeile 63:
 <​code>​ <​code>​
 [Unit] [Unit]
-Description=Kiosk+Description=Starte Chromium ​Kiosk
  
 [Service] [Service]
 Type=oneshot Type=oneshot
-User=USER +User=kiosk 
-ExecStart=/​usr/​bin/​startx /​etc/​X11/​Xsession /opt/kiosk.sh+ExecStart= /​usr/​bin/​startx /​etc/​X11/​Xsession /opt/start_kiosk.sh
  
 [Install] [Install]
Zeile 104: Zeile 105:
    ​switch(tasten.join(''​)){    ​switch(tasten.join(''​)){
       // Taste y:       // Taste y:
-      case "​Y1X": ​      ​location.href = "https://​jitsi.kinasen.de/​P0l8a5u2e5n";​ break; +      case "​Y1X": ​      ​location.href = "JITSI_URL"; break;
-      case "​Y2X": ​      ​location.href = "​https://​www.kinasen.de/​wetteruebersicht.php";​ break; +
-      case "​Y3X": ​      ​location.href = "​https://​www.kinasen.de/​gartenbilder.php";​ break; +
-      case "​Y4X": ​      ​location.href = "​http://​localhost/​lexikon.php";​ break; +
-      case "​Y5X":​  +
-        var path=window.location.pathname;​ +
-        if (path=="/​anrufen.php"​) +
-        { +
-                telefonstatus();​ +
-                break; +
-        } +
-        else +
-        { +
-                location.href = "​http://​localhost/​anrufen.php?​incoming=1";​ +
-                break; +
-        } +
-   } +
-+
-var intervalPing = setInterval(function(){ +
-        var xhr = new XMLHttpRequest();​ +
-        xhr.onreadystatechange = function() {}; +
-        xhr.open('​GET',​ '​http://​localhost/​ping.php'​);​ +
-        xhr.send();​ +
-}, 5000); +
- +
-var tasten=[0,​0,​0];​ +
- +
- +
- +
- +
-function keys(key) { +
-   if (!key){ +
-      key = event; +
-      key.which = key.keyCode;​ +
-+
-      tasten[0]=tasten[1];​ +
-      tasten[1]=tasten[2];​ +
-      tasten[2]=String.fromCharCode(key.which);​ +
- +
-   ​switch(tasten.join(''​)){ +
-      // Taste y: +
-      case "​Y1X": ​      ​location.href = "​https://​jitsi.kinasen.de/​P0l8a5u2e5n";​ break; +
-      case "​Y2X": ​      ​location.href = "​https://​www.kinasen.de/​wetteruebersicht.php";​ break; +
-      case "​Y3X": ​      ​location.href = "​https://​www.kinasen.de/​gartenbilder.php";​ break; +
-      case "​Y4X": ​      ​location.href = "​http://​localhost/​lexikon.php";​ break; +
-      case "​Y5X":​  +
-        var path=window.location.pathname;​ +
-        if (path=="/​anrufen.php"​) +
-        { +
-                telefonstatus();​ +
-                break; +
-        } +
-        else +
-        { +
-                location.href = "​http://​localhost/​anrufen.php?​incoming=1";​ +
-                break; +
-        } +
-   } +
-+
-var intervalPing = setInterval(function(){ +
-        var xhr = new XMLHttpRequest();​ +
-        xhr.onreadystatechange = function() {}; +
-        xhr.open('​GET',​ '​http://​localhost/​ping.php'​);​ +
-        xhr.send();​ +
-}, 5000); +
- +
-var tasten=[0,​0,​0];​ +
- +
- +
- +
- +
-function keys(key) { +
-   if (!key){ +
-      key = event; +
-      key.which = key.keyCode;​ +
-+
-      tasten[0]=tasten[1];​ +
-      tasten[1]=tasten[2];​ +
-      tasten[2]=String.fromCharCode(key.which);​ +
- +
-   ​switch(tasten.join(''​)){ +
-      // Taste y: +
-      case "​Y1X": ​      ​location.href = "​https://​jitsi.kinasen.de/​P0l8a5u2e5n";​ break; +
-      case "​Y2X": ​      ​location.href = "​https://​www.kinasen.de/​wetteruebersicht.php";​ break; +
-      case "​Y3X": ​      ​location.href = "​https://​www.kinasen.de/​gartenbilder.php";​ break; +
-      case "​Y4X": ​      ​location.href = "​http://​localhost/​lexikon.php";​ break; +
-      case "​Y5X":​  +
-        var path=window.location.pathname;​ +
-        if (path=="/​anrufen.php"​) +
-        { +
-                telefonstatus();​ +
-                break; +
-        } +
-        else +
-        { +
-                location.href = "​http://​localhost/​anrufen.php?​incoming=1";​ +
-                break; +
-        } +
-   } +
-+
- var intervalPing = setInterval(function(){ +
-        var xhr = new XMLHttpRequest();​ +
-        xhr.onreadystatechange = function() {}; +
-        xhr.open('​GET',​ '​http://​localhost/​ping.php'​);​ +
-        xhr.send();​ +
-}, 5000); +
- +
-var tasten=[0,​0,​0];​ +
- +
- +
- +
- +
-function keys(key) { +
-   if (!key){ +
-      key = event; +
-      key.which = key.keyCode;​ +
-+
-      tasten[0]=tasten[1];​ +
-      tasten[1]=tasten[2];​ +
-      tasten[2]=String.fromCharCode(key.which);​ +
- +
-   ​switch(tasten.join(''​)){ +
-      // Taste y: +
-      case "​Y1X": ​      ​location.href = "​https://​jitsi.........."; break;+
       case "​Y2X": ​      ​location.href = "​https://​www.kinasen.de/​wetteruebersicht.php";​ break;       case "​Y2X": ​      ​location.href = "​https://​www.kinasen.de/​wetteruebersicht.php";​ break;
       case "​Y3X": ​      ​location.href = "​https://​www.kinasen.de/​gartenbilder.php";​ break;       case "​Y3X": ​      ​location.href = "​https://​www.kinasen.de/​gartenbilder.php";​ break;
Zeile 313: Zeile 191:
 /​etc/​udev/​rules.d/​80-jitsi.rules /​etc/​udev/​rules.d/​80-jitsi.rules
 <​code>​ <​code>​
-ACTION=="​add",​ SUBSYSTEM=="​usb",​ ATTRS{idVendor}=="​1bcf",​ ATTRS{idProduct}=="​2284",​ RUN+="/​bin/​su USER -c '/​bin/​sh /opt/switch_2.sh'"​ +ACTION=="​add",​ SUBSYSTEM=="​usb",​ ATTRS{idVendor}=="​1bcf",​ ATTRS{idProduct}=="​2284",​ RUN+="/​bin/​su USER -c '/​bin/​sh /opt/switch.sh 1'"​ 
-ACTION=="​remove",​ SUBSYSTEM=="​usb",​ ATTRS{idVendor}=="​1bcf",​ ATTRS{idProduct}=="​2284",​ RUN+="/​bin/​su USER -c '/​bin/​sh /opt/switch_1.sh'"​+ACTION=="​remove",​ SUBSYSTEM=="​usb",​ ATTRS{idVendor}=="​1bcf",​ ATTRS{idProduct}=="​2284",​ RUN+="/​bin/​su USER -c '/​bin/​sh /opt/switch.sh 2'"​
 </​code>​ </​code>​
 ==== GPIO für Tasten ==== ==== GPIO für Tasten ====
Zeile 321: Zeile 199:
 Pullup 10k nach 3,3V Pin 1 Pinleiste GPIO1 Pullup 10k nach 3,3V Pin 1 Pinleiste GPIO1
  
-Zur Abfrage des Tasters läuft ein Programm (C) und ruft bei Flankenerkennung ein Bash-Script (/opt/switch_3.sh) auf. Dieses simuliert wiederum eine Tastatureingabe (y 3 6) im Browser. ​+Zur Abfrage des Tasters läuft ein Programm (C) und ruft bei Flankenerkennung ein Bash-Script (/opt/switch.sh 3) auf. Dieses simuliert wiederum eine Tastatureingabe (y 3 6) im Browser. ​
  
 ==== Telefonfunktion ==== ==== Telefonfunktion ====
Zeile 333: Zeile 211:
 User=kiosk User=kiosk
 ExecStartPre=sleep 10 ExecStartPre=sleep 10
 +ExecStartPre=pactl set-source-volume USB_in 100%
 +ExecStartPre=touch /​tmp/​twinklestatus.txt
 +ExecStartPre=chmod 666 /​tmp/​twinklestatus.txt
 ExecStart=screen -d -U -L -Logfile /​tmp/​twinkle.log -m twinkle -c ExecStart=screen -d -U -L -Logfile /​tmp/​twinkle.log -m twinkle -c
 +ExecStop=screen -p 0 -X stuff "​quit^M"​
 +RestartSec=15
 +Restart=always
 [Install] [Install]
 WantedBy=multi-user.target WantedBy=multi-user.target
Zeile 340: Zeile 224:
 ==== Bluetooth LE Scan==== ==== Bluetooth LE Scan====
 Hier wird Bluetooth LE zur Anwesenheitserkennung z.B. zum Einschalten von Lampen genutzt. Hier wird Bluetooth LE zur Anwesenheitserkennung z.B. zum Einschalten von Lampen genutzt.
-Start als systemd service ​btlescan.+Start als systemd service ​bluetoothLE. 
 +<​code>​ 
 +[Unit] 
 +Description=Startet Scan nach Bluetooth LE Geräten 
 +After=bluetooth.target 
 + 
 +[Service] 
 +Type=oneshot 
 +ExecStart=/​home/​kiosk/​ble_scan > /dev/null 2>&1 & 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 + 
 +</​code>​ 
 + 
 +ble_scan.c benötigt zum compilieren apt-get install libncurses5-dev libbluetooth-dev
  
    
Zeile 347: Zeile 246:
 ==== Email ==== ==== Email ====
  swaks --to ZIELMAILADRESSE -s MAILSERVER:​PORT -au BENUTZERNAME -ap "​PASSWORT"​  swaks --to ZIELMAILADRESSE -s MAILSERVER:​PORT -au BENUTZERNAME -ap "​PASSWORT"​
 +
 +Ist in ble_scan eincompiliert zur Benachrichtigung.
 ==== GPIO Tasteneingabe ==== ==== GPIO Tasteneingabe ====
-Das Programm zum Überwachen der Tasten-GPIOs und das Ausschalten der blinkenden grünen LED geschieht ​über /​etc/​rc.local+Das Programm zum Überwachen der Tasten-GPIOs und das Ausschalten der blinkenden grünen LED wird über /​etc/​rc.local ​gestartet
  
 <​code>​ <​code>​
Zeile 360: Zeile 261:
  
 <​code>​Option ​                 "​StandbyTime"​ "​5"</​code>​ <​code>​Option ​                 "​StandbyTime"​ "​5"</​code>​
 +
 +Während eines Anrufes soll das Display nicht abgeschalten werden. Ein Cronjob checkt regelmäßig welche Seite derzeit im Browser gezeigt wird und simuliert dann mit XDOtool eine Mausbewegung. ​
 ==== Kiosk Ping==== ==== Kiosk Ping====
 Es kommt vor, dass für den Kiosk keine Internetverbindung besteht und Chromium dann eine Fehlermeldung zeigt. Um diesen Zustand zu beheben ruft auf allen Seiten ein Javascript alle 5 Sekunden ein Script auf. Es kommt vor, dass für den Kiosk keine Internetverbindung besteht und Chromium dann eine Fehlermeldung zeigt. Um diesen Zustand zu beheben ruft auf allen Seiten ein Javascript alle 5 Sekunden ein Script auf.
-Bleibt dieser "​Ping" ​5 Sekunden ​aus so wird das neu laden der Internetseite im Chromium veranlasst. +Bleibt dieser "​Ping"​ aus so wird das neu laden der Internetseite im Chromium veranlasst. 
- + 
 +==== Benachrichtigung Ein- und Ausschalten ==== 
 + 
 +<​code>​ 
 +Description=Sending Alert Emails on System shutdown. 
 +Requires=network.target 
 +Before=shutdown.target reboot.target 
 + 
 +[Service] 
 +Type=oneshot 
 +User=kiosk 
 +RemainAfterExit=true 
 +ExecStart=/​home/​kiosk/​alert.sh startup 
 +ExecStop=/​home/​kiosk/​alert.sh shutdown 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</​code>​
nanopi_m4/kiosk/software.1604964630.txt.gz · Zuletzt geändert: 2020/11/10 00:30 von andmin