nanopi_m4:kiosk:software
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| nanopi_m4:kiosk:software [2020/11/10 00:30] – andmin | nanopi_m4:kiosk:software [2024/03/01 21:09] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| 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 |
| * sudo lighty-enable-mod fastcgi-php | * sudo lighty-enable-mod fastcgi-php | ||
| * sudo nano -w / | * sudo nano -w / | ||
| Zeile 39: | Zeile 39: | ||
| < | < | ||
| #!/bin/sh | #!/bin/sh | ||
| - | if ! ps ax | grep [/]opt/kiosk.sh | + | touch /tmp/kiosk.status |
| - | then | + | chmod 666 / |
| - | | + | |
| - | | + | |
| - | | + | |
| xset s noblank | xset s noblank | ||
| xset s 300 | xset s 300 | ||
| openbox-session & | openbox-session & | ||
| - | unclutter & | + | unclutter |
| if ! lsusb | grep " | if ! lsusb | grep " | ||
| then | then | ||
| startadresse=" | startadresse=" | ||
| + | echo 2 > / | ||
| else | else | ||
| - | | + | echo 1 > / |
| + | | ||
| fi | fi | ||
| - | chromium --no-first-run --kiosk --agc-startup-min-volume=255 --disable-pinch --overscroll-history-navigation=0 | + | chromium --no-first-run |
| - | fi | + | |
| </ | </ | ||
| * sudo chmod 755 / | * sudo chmod 755 / | ||
| Zeile 62: | Zeile 63: | ||
| < | < | ||
| [Unit] | [Unit] | ||
| - | Description=Kiosk | + | Description=Starte Chromium |
| [Service] | [Service] | ||
| Type=oneshot | Type=oneshot | ||
| - | User=USER | + | User=kiosk |
| - | ExecStart=/ | + | ExecStart= / |
| [Install] | [Install] | ||
| Zeile 104: | Zeile 105: | ||
| | | ||
| // Taste y: | // Taste y: | ||
| - | case " | + | case " |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | var path=window.location.pathname; | + | |
| - | if (path=="/ | + | |
| - | { | + | |
| - | telefonstatus(); | + | |
| - | break; | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | location.href = " | + | |
| - | break; | + | |
| - | } | + | |
| - | } | + | |
| - | } | + | |
| - | var intervalPing = setInterval(function(){ | + | |
| - | var xhr = new XMLHttpRequest(); | + | |
| - | xhr.onreadystatechange = function() {}; | + | |
| - | xhr.open(' | + | |
| - | xhr.send(); | + | |
| - | }, 5000); | + | |
| - | + | ||
| - | var tasten=[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); | + | |
| - | + | ||
| - | | + | |
| - | // Taste y: | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | var path=window.location.pathname; | + | |
| - | if (path=="/ | + | |
| - | { | + | |
| - | telefonstatus(); | + | |
| - | break; | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | location.href = " | + | |
| - | break; | + | |
| - | } | + | |
| - | } | + | |
| - | } | + | |
| - | var intervalPing = setInterval(function(){ | + | |
| - | var xhr = new XMLHttpRequest(); | + | |
| - | xhr.onreadystatechange = function() {}; | + | |
| - | xhr.open(' | + | |
| - | xhr.send(); | + | |
| - | }, 5000); | + | |
| - | + | ||
| - | var tasten=[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); | + | |
| - | + | ||
| - | | + | |
| - | // Taste y: | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | case " | + | |
| - | var path=window.location.pathname; | + | |
| - | if (path=="/ | + | |
| - | { | + | |
| - | telefonstatus(); | + | |
| - | break; | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | location.href = " | + | |
| - | break; | + | |
| - | } | + | |
| - | } | + | |
| - | } | + | |
| - | var intervalPing = setInterval(function(){ | + | |
| - | var xhr = new XMLHttpRequest(); | + | |
| - | xhr.onreadystatechange = function() {}; | + | |
| - | xhr.open(' | + | |
| - | xhr.send(); | + | |
| - | }, 5000); | + | |
| - | + | ||
| - | var tasten=[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); | + | |
| - | + | ||
| - | | + | |
| - | // Taste y: | + | |
| - | case " | + | |
| case " | case " | ||
| case " | case " | ||
| Zeile 313: | Zeile 191: | ||
| / | / | ||
| < | < | ||
| - | ACTION==" | + | ACTION==" |
| - | ACTION==" | + | ACTION==" |
| </ | </ | ||
| ==== 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 / | ||
| + | ExecStartPre=chmod 666 / | ||
| ExecStart=screen -d -U -L -Logfile / | ExecStart=screen -d -U -L -Logfile / | ||
| + | ExecStop=screen -p 0 -X stuff " | ||
| + | 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 | + | Start als systemd service |
| + | < | ||
| + | [Unit] | ||
| + | Description=Startet Scan nach Bluetooth LE Geräten | ||
| + | After=bluetooth.target | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=/ | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | |||
| + | </ | ||
| + | |||
| + | 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: | swaks --to ZIELMAILADRESSE -s MAILSERVER: | ||
| + | |||
| + | 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 | + | Das Programm zum Überwachen der Tasten-GPIOs und das Ausschalten der blinkenden grünen LED wird über / |
| < | < | ||
| Zeile 360: | Zeile 261: | ||
| < | < | ||
| + | |||
| + | 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 " | + | Bleibt dieser " |
| - | + | ||
| + | ==== Benachrichtigung Ein- und Ausschalten ==== | ||
| + | |||
| + | < | ||
| + | Description=Sending Alert Emails on System shutdown. | ||
| + | Requires=network.target | ||
| + | Before=shutdown.target reboot.target | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | User=kiosk | ||
| + | RemainAfterExit=true | ||
| + | ExecStart=/ | ||
| + | ExecStop=/ | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
nanopi_m4/kiosk/software.1604964630.txt.gz · Zuletzt geändert: 2024/03/01 21:09 (Externe Bearbeitung)
