alpine chromium boot (kiosk system)

reinhard@finalmedia.de Thu 04 Jul 2024 11:16:06 PM CEST

Hintergrund

Zuweilen benötigt man ein kleines Kiosk System, das direkt und ausschließlich in einen Browser bootet und dabei eine einzelne Webseite verfügbar macht. Es soll eine virtuelle Tastatur einblendbar sein, z.B. auf einem TouchScreen PC. Dafür ist diese Anleitung gemacht. Wir verwenden ein Alpine Linux und das Gesamtsystem wird weniger als 800MB Speicherplatz benötigen.

Die Installation ist auf einem physischen System am sinnvollsten. Hier im Beispiel exerziere ich aber in einer vm durch:

# qemu plattenimage erstellen
qemu-img create kiosk.raw 2G

# qemu live aus dem internet von alpine iso booten und installieren
qemu-system-x86_64 -m 2048 -enable-kvm -hda kiosk.raw -cdrom https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.1-x86_64.iso

(ja ich weiß, dass es eine separate VM optimierte iso von alpine gibt. Die Installation soll aber auch für physischen Rechner verwendet werden können. daher auch raw statt qcow2 format - weil man das später mit dd ohne vorherige Wandlung wieder 1:1 auf eine ssd/emmc übertragen kann)

Alternative Variante... direkt auf einem physischen System installieren. Dazu die iso mit wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.1-x86_64.iso herunterladen, auf usb stick schreiben und davon booten.

In beiden Varianten geht es hier mit dem Setup weiter

Setup

dann als root mit leerem passwort einloggen und mittels dem Befehl installieren:

setup-alpine

de enter, de enter, kiosk enter, dann dreimal enter, ein passwort wählen und weiter mit enter enter bis zum Punkt "Disk & Install", dort dann sda eingeben, dann sys eingeben, dann y eingeben.

Also im Kern: Den Dialogen folgen, auf sys installieren und openssh verwenden, ein root passwort setzen und erst einmal keinen zusätzlichen user anlegen. bootloader schreiben. Dann in das frische System booten. (usb stick oder cdrom abklemmen). Wenn installiert, dann reboot als befehl eingeben.

Dann gehts im frischen System weiter. Entweder direkt mein Setup-Script runterladen und ausführen

apk add curl && curl https://finalmedia.de/kb/4fc8962abf25/do | sh

oder die sichere Variante... Schritt für Schritt befolgen:

# community repository aktivieren
sed -i "/community/s/^#//" /etc/apk/repositories
apk update
apk upgrade

# xserver basics minimal installieren
setup-xorg-base
apk add xorg-server xinit xterm

# chromium installieren
apk add chromium
rc-update add dbus

# user kiosk anlegen und ihm X11 Zugriff gestatten
adduser kiosk
addgroup kiosk input
addgroup kiosk video

# autologin des users kiosk realisieren
apk add agetty
sed -i 's/getty 38400 tty1/agetty --autologin kiosk tty1 linux/g' /etc/inittab

# login info screen im startup
apk add figlet
figlet kiosk > /etc/motd
echo system >> /etc/motd

# startup loop script gui erstellen
touch /home/kiosk/gui
chmod +x /home/kiosk/gui

# bei einem Display 1024x768 Pixel also 1024,768
# das ggf. anpassen, wenn andere auflösung gewünscht
export resolution=1024,768
export url=https://finalmedia.de/code

cat << +++EOF+++ > /home/kiosk/gui
#!/bin/sh
while true
do
test -f /home/kiosk/debug && rm -f /home/kiosk/debug && chromium --start-maximized --window-position=0,0 https://chromewebstore.google.com/detail/virtuelles-tastatur-tool/gkiknnlmdgcmhmncldcmmnhhdiakielc
chromium --window-size=$resolution --window-position=0,0 --start-fullscreen --kiosk --incognito "$url"
done
+++EOF+++

# xstartup und profile eintragen
echo "exec /home/kiosk/gui" > /home/kiosk/.xinitrc
echo "while true; do startx; done" > /home/kiosk/.profile

# debughilfe aktivieren
touch /home/kiosk/debug

# neustarten
reboot

dann im chromium die extension "screen virtual keyboard" installieren und auf deutsch konfigurieren, sowie 1.5 size, black und "Show on-sceen keyboard only on active text field" stellen. runter scrollem, deutsch hinzufügen, englisch abwählen. Save klicken. Dann.. wichtig.. auf das Pullz eIcon klicken, Manage Extension klicken, Details klicken, und "Allow in icognito" aktiviere, damit das Keyboard auch im incognito mode genutzt werden kann. Dann alle tabs schließen und damit chromium beenden. damit wird er im kiosk mode respawned. und startet künftig auch nur in diesem Modus.