## RPi ako kiosk
[Miroslav Biňas](https://bletvaska.github.io)
/ [**OpenAlt 2026**](https://www.openalt.cz/2026/)
[](https://bletvaska.github.io)
Čo je to Kiosk?
Počítačový terminál so špecializovaným hardvérom a softvérom, ktorý poskytuje prístup k informáciám a aplikáciám na komunikáciu, nakupovanie, zábavu alebo vzdelávanie.
[](https://www.samsung.com/sk/business/smart-signage/interactive-display/samsung-kiosk-with-windows-os-lh24kmccbgcxen/)
notes:
* kiosky mozu byt implementovane rozlicnym sposobom:
* na pulte
* na stene
* na stojane
* tu je priklad kioskov od Samsungu
* komerne riesenia sa pohybuju v cenach od 1000 EUR vyssie

notes:
* rpi ako kiosk je jeden z popularnych sposobov vyuzitia minipocitaca rpi


###### Toto je Boris. Boris Vaitovič. Boris je umelec.
notes:
* boris je umelec
* kazdy projekt je jedinecny







### Staviame vlastný RPi kiosk
###### (na ľubovoľnom RPi s [RPi OS with desktop](https://www.raspberrypi.com/software/operating-systems/) (6.okt.2026))

## 1. Inštalácia OS
[](https://rpishop.cz/535862/raspberry-pi-64-gb-microsd-karta-tridy-a2/)
[](https://www.raspberrypi.com/software/operating-systems/)
notes:
* oficialny rpi os
* desktop verzia
* pre rpi3 32bit verzia
* hlavne kvoli rozbehanemu a nakonfigurovanemu desktopu
[](https://www.raspberrypi.com/software/)
notes:
* mozete pouzit lubovolnu metodu na flashnutie SD karty
* balenaEtcher, dd
* rpi imager je oficialny nastroj, ktory vie flashnut SD kartu s rpi os
* ma aj moznost stiahnut si aktualnu verziu rpi os
* mozete pomocou neho nakonfigurovat wifi, ssh, locale, timezone a dalsie veci
### RPi Provisioning
* cez RPi Imager:
* zapnúť SSH (nahrať kľúče)
* nastaviť WiFi pripojenie
* nastaviť jazyk, časovú zónu, rozloženie klávesnice
* nastaviť hostname
* zapnúť [RPi Connect](https://connect.raspberrypi.com/)
* pri prvom spustení:
* aktualizovať systém
* doinštalovať potrebné balíčky
[](https://github.com/raspberrypi/rpi-image-gen)
## 2. Konfigurácia sieťového pripojenia
notes:
* pouzitie RPi moze byt v rozlicnych prostrediach
* mozno bude RPi pripojene k internetu 24/7
* mozno RPi nebude pripojene k internetu vobec
* nastavenie siete urobite doma - tam, kde ho mate
* je to priprava na
* produkcne pouzitie (pripojenie k internetu 24/7), ale aj na
* servisne pripojenie, kde bude potrebne sa k RPi pripojit kvoli nastaveniu kiosku
* napr. cez WiFi z telefonu (WiFi tethering)
* alebo cez USB kabel cez telefon (USB tethering)
* alebo cez ethernet kabel s laptopom
### WiFi konfigurácia
```bash
# vytvorenie WiFi pripojenia s názvom "kiosk-wifi",
# ktoré sa pripojí k sieti s názvom "SSID" a heslom "PASSWORD"
$ nmcli connection add type wifi \
con-name "kiosk-wifi" \
ifname wlan0 \
ssid "SSID" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "PASSWORD"
# overenie pripojenia
$ nmcli connection show
# ak mas vypnute rozhranie, tak ho zapni
$ nmcli radio wifi on
```
notes:
* tymto sposobom je mozne pripravit konfiguraciu pre WiFi siet v mieste nasadenia
### Servisná WiFi sieť
```bash
$ nmcli connection add type wifi \
con-name "service-wifi" \
ifname wlan0 \
ssid "kiosk-service" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "PASSWORD" \
connection.autoconnect-priority 100 # rozsah <-999, 999>
# default=0
```
notes:
* ak sa ma nieco pokazit, tak sa to pokazi
* dopredu sa pripravte na tuto moznost
* urcite nieco nepojde
* a to nieco bude okamzite po prichode a pri prvej instalacii :-)
* servisna wifi siet z telefonu
* nastavte si ju rovnako pre vsetky vase kiosky
* priorita sa uplatni len pri vybere siete
* ak uz je pripojeny na wifi, sam sa na inu neprepne
### Servisné Ethernet rozhranie
```bash
# nastavenie IP adresy na 10.20.30.1
$ nmcli connection add type ethernet \
con-name "service-eth" \
ifname eth0 \
ipv4.addresses 10.20.30.1/24 \
ipv4.method shared # DHCP na eth (a v cudzej sieti!)
# ipv4.method manual # klient si nastavi IP adresu rucne
# zapnutie rozhrania
$ nmcli connection up "service-eth"
```
```bash
# ak shared, tak klient dostane GW z RPi
# vypnut tymto
# /etc/NetworkManager/dnsmasq-shared.d/no-gateway.conf
dhcp-option=option:router
dhcp-option=option:dns-server
```
notes:
* ethernetove pripojenie posluzi v pripade, ak sa potrebujeme pripojit k RPi cez kabel
* pripojenie:
* IP adresa RPi bude 10.20.30.1/24
* pri `shared` dostane pocitac IP adresu automaticky (DHCP)
* pri `manual` treba IP adresu nastavit rucne z rovnakeho segmentu
## 3. RPi Connect
[](https://connect.raspberrypi.com/)
notes:
* rpi connect je služba, ktorá umožňuje vzdialený prístup k zariadeniam Raspberry Pi cez webové rozhranie
* zdielanie plochy
* vzdialeny terminal
* umožňuje jednoduché pripojenie a správu viacerých zariadení
* beta od roku 2024, verzia 1.0 bola vydaná v marci 2025, dnes je verzia 2.14
* toto chcete pouzivat!
* nepotrebujete ziadnu verejnu IP adresu
* nepotrebujete nastavovat ziadne port forwardingy
* nepotrebujete nastavovat VPN
* rpi connect je bezplatná služba, ktorá je dostupná pre všetkých používateľov Raspberry Pi
### Intro to RPi Connect
* nepotrebuje mať zapnuté SSH
* dnes je už predinštalovaný v desktopovom obraze a nastavuje sa už v [RPi Imager](https://www.raspberrypi.com/documentation/computers/getting-started.html#customisation)-i
* RPi Connect 101:
```bash
# ak nie je nainštalovaný (napr. RPi OS Lite)
$ sudo apt install rpi-connect
# manualne zapnut/vypnut
$ rpi-connect on
# potom sa prihlásime do sluzby zo zariadenia
$ rpi-connect signin
# kliknutim na vygenerovany odkaz sa zariadenie prihlasi
# do sluzby a bude ho mozne spravovat cez webove rozhranie
```
## 4. Spustenie aplikácie po štarte
notes:
* nasim cielom je spustit pri zapnuti bud
* webovy prehliadac, alebo
* prehravac videa
* v oboch pripadoch sa jedna o graficke aplikacie. a kym si povieme o tom, ako ich spustit, tak si musime povedat trochu o tom, ako pracuje graficke rozhranie v Linuxe.
notes:
* graficke rozhranie v linuxe sa vola **display server** a v sucasnosti existuju dva hlavne display servery
* X11 (Xorg) - starsia technologia, ktora je v linuxe uz velmi dlho (od 80. rokov)
* Wayland - nova technologia, jednoduchsia a bezpecnejsia
* v X serveri sa nachadzali dve aplikacie, ktore sa starali o vykreslenie okna:
* display server - zodpovedny za vykreslenie okna na obrazovke
* window manager - zodpovedny za spravu okien, ich presuvanie, zmenu velkosti, minimalizaciu, maximalizaciu, atd.
* vo Waylande sa tieto dve aplikacie spojili do jednej, ktora sa vola compositor
* RPi OS pouziva wayland experimentalne od roku 2021
* v 2021 s kompozitorom mutter
* v 2023 s kompozitorom wayfire na RPi 4 a 5, kde bol Wayland default
* na konci 2024 s kompozitorom labwc s moznostou spustat aj na starsich RPi a Wayland je default na vsetkych modeloch
* takze aktualny stav
* Wayland je default na RPi OS
* labwc je default compositor
* vysledok je taky, ze ak budete hladat navody, ako spravite kiosk z RPi, tak najdete navody v 99% prave pre X11 s jeho spravcami okien
* https://www.raspberrypi.com/news/a-new-release-of-raspberry-pi-os/
### Autoštart v labwc
* bash skript
* `/etc/xdg/labwc/autostart`
* `$HOME/.config/labwc/autostart`
notes:
* systemovy
* pouzivatelsky
### Prehliadač v kiosk režime
```bash
# start chromium in kiosk mode
/usr/bin/lwrespawn /usr/bin/chromium \
--no-first-run \
--noerrdialogs \
--incognito \
--kiosk \
--hide-scrollbars \
"${URL}"
```
### [Politiky Chromium](https://chromeenterprise.google/policies/)
> Prepínače hovoria, ako sa má prehliadač tváriť. Politiky hovoria, čo smie.
[`chrome://policy`](chrome://policy) -- [dokumentácia](https://chromeenterprise.google/policies/)
### [Politiky Chromium](https://chromeenterprise.google/policies/) - príklad
```
/etc/chromium/policies/managed/kiosk.json
```
```json
{
"TranslateEnabled": false,
"BookmarkBarEnabled": false,
"PasswordManagerEnabled": false,
"AutofillAddressEnabled": false,
"DeveloperToolsAvailability": 2,
"DefaultNotificationsSetting": 2,
"BrowserSignin": 0
}
```
notes:
* politiky su povodne nastroj pre firmy na hromadnu spravu prehliadacov (Chrome Enterprise)
* funguju rovnako v Chrome aj Chromiu
* je ich viac ako 400 - https://chromeenterprise.google/policies/
* na linuxe su to obycajne JSON subory, netreba ziadny server
* `managed/` - povinne, pouzivatel ich nemoze zmenit
* `recommended/` - predvolene hodnoty, pouzivatel ich moze zmenit
* nazov suboru je lubovolny, nacitaju sa vsetky `*.json` v adresari
* platia pre cely system a patria rootovi - kiosk ich nevie obist
* nedaju sa nastavit len pre jedneho pouzivatela
* preco politiky namiesto prepinacov?
* su zdokumentovane a stabilne
* prepinace google rusi bez upozornenia (`--disable-infobars`, `--disable-features=Translate`)
* "prepinace hovoria, ako sa ma prehliadac tvarit. politiky hovoria, co smie."
* overenie: `chrome://policy`
* pozor: chybny JSON sa ticho ignoruje
* overit cez `python3 -m json.tool kiosk.json`
* zmeny sa prejavia az po restarte prehliadaca
* firefox ma ekvivalent: `/etc/firefox/policies/policies.json`
### Videoprehrávač v kiosk režime
```bash
# start vlc in kiosk mode
cd "${HOME}/Videos" \
&& /usr/bin/lwrespawn /usr/bin/cvlc \
--intf rc \
--rc-host localhost:4212 \
--fullscreen \
--no-video-title-show \
--video-on-top \
--no-audio \
--no-osd \
--no-mouse-events \
--loop \
*webm
```
## 5. Tipy a triky
### Kódovanie videa
```bash
$ ffmpeg \
-i input.video.mp4 \
-vf "scale=1920:1080,format=yuv420p" \
-c:v libvpx \
-b:v 1M \
-r 25 \
-c:a libvorbis \
output.webm
```
### "Evanesco" -> kurzor myši
```bash
# ~/.config/labwc/autostart
# move mouse cursor out of the screen
# install package: evemu-tools
evemu-event /dev/input/event0 \
--type EV_REL --code REL_X --value 9999 --sync
evemu-event /dev/input/event0 \
--type EV_REL --code REL_Y --value 9999 --sync
```
### Šetrenie zdrojov
```bash
# ~/.config/labwc/autostart
# on top of autostart file
# kill watchdog for running apps
killall -9 lwrespawn
# turns off pcmanfm for desktop management
pcmanfm --desktop-off
# kill panel
killall -9 wf-panel-pi
```
### Zvuk cez HDMI
* nastaviť cez `raspi-config`
* v menu `System Options > Audio` vybrať položku `HDMI`
### `/boot/firmware/config.txt`
```
# vypne LED pre aktivity SD karty
dtparam=act_led_trigger=none
# vypne napájaciu LED
dtparam=pwr_led_trigger=none
# vypínač RPi na GPIO 3
# vypnutie - 2x stlačiť, zapnutie - 1x stlačiť
dtoverlay=gpio-shutdown
```
notes:
* https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README
* https://www.stderr.nl/Blog/Hardware/RaspberryPi/PowerButton.html
* pravdepodobne sa da este pridat led-ka, ktora bude svietit, ked je rpi vypnute - https://gist.github.com/lbussy/9e81cbcc617952f1250e353bd42e7775
### Obraz bez monitora
```bash
# /boot/firmware/cmdline.txt (jeden riadok!)
... rootwait quiet splash video=HDMI-A-1:1920x1080MR@60D
```
* `M` - režim dopočítaný podľa CVT
* `R` - redukované zatemňovanie (nižšia frekvencia pixelov)
* `D` - výstup zapnutý aj bez pripojeného monitora
notes:
* s KMS (`dtoverlay=vc4-kms-v3d`) sa `hdmi_force_hotplug=1` v `config.txt` ignoruje
* bez parametra labwc vytvori nahradny vystup `NOOP-1` a chromium nema na com bezat
* bez EDID ovladac pozna len rezimy do 1024x768, preto `M`
* bez EDID povoli ovladac max 165 MHz, beznych CVT 1920x1080@60 potrebuje 173 MHz - jadro hlasi `User-defined mode not supported`, preto `R` (~138,5 MHz)
* vysledok: 1920x1080 @ 59,98 Hz
* overenie: `wlr-randr` (ma tam byt `HDMI-A-1`, nie `NOOP-1`), `cat /sys/class/drm/card0-HDMI-A-1/status`
* https://www.kernel.org/doc/html/latest/fb/modedb.html
[](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html)
notes:
* benefitom je aj moznost pripojit dalsiu elektroniku cez GPIO piny
### Zvýšenie kapacity RAM
* vytvára komprimovanú pamäť v RAM, používa sa ako swap pri nedostatku fyzickej pamäte
* inštalácia:
```bash
$ sudo apt install --yes zram-tools
```
* konfigurácia v `/etc/default/zramswap`:
```
ALGO=zstd
PERCENT=75
```
* reštart služby:
```bash
$ sudo systemctl restart zramswap
```
* overenie cez `zramctl` alebo `free`
#### ZRAM je súčasťou nových RPi OS
(Hotovo! Hirošima hadr!)
### Vypnutie obrazovky
* šetríme elektriku v noci ;)
* pomocou `wlr-randr`
* Wayland alternatíva pre `xrandr`
* bez parametrov vypíše zoznam výstupov
* príklady použitia:
```bash
# vypnutie obrazovky HDMI-A-1
$ wlr-randr --output HDMI-A-1 --off
# opätovné zapnutie obrazovky
$ wlr-randr --output HDMI-A-1 --on
# otočenie obrazovky hore nohami
$ wlr-randr --output HDMI-A-1 --transform 180
```

### Boot Splash Screen
* obrázok/animácia pri štartovaní systému
* [Plymouth](https://wiki.archlinux.org/title/Plymouth) - správca tém pre spúšťanie/ukončovanie systému
### Úprava témy pre Plymouth
```bash
# zistíme aktuálnu tému
$ plymouth-set-default-theme
pix
# nahradíme existujúci splash za vlastný
$ sudo cp splash.png /usr/share/plymouth/themes/pix/splash.png
# aplikujeme zmeny
$ sudo plymouth-set-default-theme --rebuild-initrd pix
```
* problém - po aktualizácii balíka sa zmeny obnovia
* vytvoriť vlastnú tému z existujúcej
## ...sa nevošlo
* Overlay FS - SD karta len na čítanie
* ochrana proti výpadku napájania
```bash
$ sudo raspi-config nonint do_overlayfs 0 # 0 = zapnúť
```
* [log2ram](https://github.com/azlux/log2ram) - ramlog like for systemd (Put log into a ram folder)
* stmievania je vypnuté by default - bude aj v budúcnosti?
* vzdialený monitoring a ovládanie
## Otázky?
## Odkazy
* [A new release of Raspberry Pi OS](https://www.raspberrypi.com/news/a-new-release-of-raspberry-pi-os/)
* [RPi Connect](https://www.raspberrypi.com/software/connect/)
* [Getting started with your Raspberry Pi](https://www.raspberrypi.com/documentation/computers/getting-started.html#setting-up-your-raspberry-pi)
* [Návody (nie)len pre RPi](https://github.com/thagrol/Guides/tree/main)
* ArchLinux: [Labwc](https://wiki.archlinux.org/title/Labwc), [Plymouth](https://wiki.archlinux.org/title/Plymouth)
* [Namakaný webinár #44](https://namakanyden.sk/webinare/44/)

(**http://bit.ly/47ZqoTf**)