Kiosk Chromium — Debian 13
Kiosk wyświetlający stronę http://instrukcje.local w Chromium na pełnym ekranie. Używa sway jako kompozytora Wayland oraz swayidle + wlopm do zarządzania energią monitora.
Wymagania
- Debian 13 netinst — instalacja minimalna bez środowiska graficznego
Instalacja krok po kroku
1. Utwórz użytkownika kiosk
useradd -m -r -s /usr/sbin/nologin kiosk
usermod -aG tty,input,video,render,dialout kiosk
2. Zainstaluj pakiety
apt update && apt install -y sway swayidle wlopm wlr-randr chromium seatd
systemctl enable --now seatd
cagenie obsługuje protokołuwlr-output-power-management-v1, przez cowlopmz nim nie działa — ekran można wygasić, ale nie można go wybudzić. Dlatego używamysway.
3. Skopiuj pliki konfiguracyjne
# Skrypt zarządzający kioskiem
cp kiosk-manager.sh /home/kiosk/kiosk-manager.sh
chmod +x /home/kiosk/kiosk-manager.sh
# Strona oczekiwania na sieć
cp waiting.html /home/kiosk/waiting.html
cp logo.png /home/kiosk/logo.png
# Konfiguracja sway
mkdir -p /home/kiosk/.config/sway
cp sway-config /home/kiosk/.config/sway/config
# Ustawienie właściciela
chown -R kiosk:kiosk /home/kiosk/
# Jednostka systemd
cp kiosk.service /etc/systemd/system/kiosk.service
4. Rozwiązanie problemu z domenami .local
Musimy powiedzieć systemowi: "Najpierw sprawdź w DNS, a dopiero potem szukaj przez mDNS".
- Otwórz plik:
/etc/nsswitch.conf - Znajdź linię
hosts:. Zapewne wygląda tak:hosts: files mdns4_minimal [NOTFOUND=return] dns - Zmień ją na:
hosts: files dns mdns4_minimal [NOTFOUND=return]
5. Włącz i uruchom serwis
systemctl daemon-reload
systemctl enable kiosk.service
systemctl start kiosk.service
6. Skonfiguruj GRUB'a aby uruchamiał system natychmiast
nano /etc/default/grub
- Znajdź i zmień poniższe linie (lub dodaj je, jeśli ich nie ma):
GRUB_DEFAULT=0 – wskazuje, że domyślnie ma być uruchamiana pierwsza pozycja na liście.
GRUB_TIMEOUT=0 – ustawia czas oczekiwania na 0 sekund.
- Zastosuj zmiany
/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg
Opis plików
kiosk.service
Jednostka systemd uruchamiająca sway jako użytkownik kiosk. Ważne parametry:
| Opcja | Wartość | Opis |
|---|---|---|
TTYPath |
/dev/tty7 |
Przypisuje sway do wirtualnego terminala tty7 |
RuntimeDirectory=kiosk |
kiosk |
Automatycznie tworzy /run/kiosk z prawami 0700 |
XDG_RUNTIME_DIR |
/run/kiosk |
Wymagane przez sway / Wayland |
WLR_LIBSEAT_BACKEND |
seatd |
Dostęp do GPU/input przez demona seatd (bez logind) |
IDLE_TIME |
120 |
Czas bezczynności (sekundy) przed wygaszeniem ekranu |
ExecStartPre |
chvt 7 |
Przełącza konsolę na tty7 przed startem sway |
ExecStart |
/usr/bin/sway |
Kompozytor Wayland |
Restart=always |
— | Automatyczny restart po awarii / wyjściu Chromium |
Zmiana czasu wygaszania:
# Edytuj /etc/systemd/system/kiosk.service
Environment=IDLE_TIME=300 # 5 minut
systemctl daemon-reload
systemctl restart kiosk.service
Uwaga: Serwis używa
seatdjako menedżera seat zamiastlogind. Wymaga to, abyseatd.servicebył uruchomiony oraz żeby użytkownikkiosknależał do grupyvideo(dostęp do socketu seatd) irender(dostęp do/dev/dri/renderD128).
sway-config → /home/kiosk/.config/sway/config
Minimalna konfiguracja sway:
output * bg #000000 solid_color # czarne tło
output * transform 270 # obrót monitora o 270°
input * xkb_numlock enabled # NumLock zawsze włączony
exec swayidle before-sleep "wlopm --off '*'" # wygaszenie przy sleep
exec /home/kiosk/kiosk-manager.sh # start kiosku
kiosk-manager.sh → /home/kiosk/kiosk-manager.sh
Uruchamiany przez sway przy starcie sesji. Kolejność działania:
- Uruchamia
swayidlebez flagi-w— ignoruje idle inhibitory (Chromium ustawia inhibitor Wayland;swayidle -wrespektuje go i nigdy nie wygasiłby ekranu) wlopm --off '*'po IDLE_TIME sekundach — wysyła DPMS standby przez protokółwlr-output-power-management-v1; link DP/HDMI pozostaje aktywny, więc wybudzenie jest niezawodne- Chromium startuje natychmiast z lokalnym plikiem
waiting.html(ekran oczekiwania) - Ping-loop czeka, aż
KIOSK_HOST(192.168.40.126) odpowie - Po uzyskaniu sieci: Chromium jest zamykany i restartowany z docelowym
http://instrukcje.local
Flagi Chromium (CHROMIUM_OPTS):
| Flaga | Opis |
|---|---|
--ozone-platform=wayland |
Używa backendu Wayland zamiast X11 |
--no-first-run |
Pomija ekran powitalny przy pierwszym uruchomieniu |
--noerrdialogs |
Ukrywa okna dialogowe błędów Chromium |
--disable-infobars |
Ukrywa paski informacyjne (np. „Chromium jest zarządzany...") |
--disable-gpu-suspend |
Zapobiega zawieszaniu GPU podczas wygaszania ekranu |
--force-device-scale-factor=1 |
Wymusza skalowanie 1:1 (bez DPI scaling) |
--user-data-dir |
Osobny katalog profilu — izoluje dane kiosku |
--disable-features=AutofillServerCommunication |
Wyłącza pobieranie podpowiedzi autouzupełniania z serwerów Google |
--disable-features=Translate |
Wyłącza pasek z propozycją tłumaczenia strony |
--disable-features=MediaRouter |
Wyłącza obsługę Chromecast / Cast |
--disable-save-password-bubble |
Ukrywa bańkę „Zapisz hasło" |
--disable-sync |
Wyłącza synchronizację z kontem Google |
--disable-extensions |
Wyłącza wszystkie rozszerzenia |
--disable-background-networking |
Blokuje ruch sieciowy w tle (aktualizacje, telemetria) |
--disable-notifications |
Wyłącza powiadomienia systemowe |
--disable-component-update |
Wyłącza automatyczne aktualizacje komponentów Chromium |
--password-store=basic |
Nie używa systemowego portfela haseł (gnome-keyring, kwallet) |
--disable-pinch |
Wyłącza gesty pinch-to-zoom (ekran dotykowy) |
Zmiana adresu IP serwera:
# W kiosk-manager.sh zmień zmienną:
KIOSK_HOST="192.168.40.126"
waiting.html → /home/kiosk/waiting.html
Lokalna strona HTML wyświetlana przez Chromium w trakcie oczekiwania na sieć. Ciemne tło, animowany spinner i pulsujący napis „Oczekiwanie na sieć...".
Zarządzanie i diagnostyka
Logi
# Ostatnie 100 linii logów serwisu
journalctl -u kiosk.service -b --no-pager -n 100 -o cat
# Śledzenie na żywo
journalctl -u kiosk.service -f
Restart / zatrzymanie
systemctl restart kiosk.service
systemctl stop kiosk.service
Sprawdzenie wyjść wideo
WAYLAND_DISPLAY=wayland-0 XDG_RUNTIME_DIR=/run/kiosk wlr-randr
Ręczne wygaszenie / wybudzenie
WAYLAND_DISPLAY=wayland-0 XDG_RUNTIME_DIR=/run/kiosk wlopm --off '*'
WAYLAND_DISPLAY=wayland-0 XDG_RUNTIME_DIR=/run/kiosk wlopm --on '*'
Rozwiązywanie problemów
| Objaw | Przyczyna | Rozwiązanie |
|---|---|---|
| Serwis natychmiast się kończy | Brak /run/kiosk |
Sprawdź RuntimeDirectory=kiosk w pliku unit |
XDG_RUNTIME_DIR is not set |
Brak zmiennej środowiskowej | Upewnij się że Environment=XDG_RUNTIME_DIR=/run/kiosk jest w unit |
Timeout waiting session to become active |
logind nie aktywuje sesji (race condition z VT) | Użyj seatd zamiast logind jako WLR_LIBSEAT_BACKEND |
failed to open /dev/dri/renderD128: Permission denied |
Brak grupy render |
usermod -aG render kiosk |
Could not open target tty: Permission denied |
Brak TTYPath — logind przydziela VT 0 |
Dodaj TTYPath=/dev/tty7 i StandardInput=tty do unit |
| Ekran się nie wygasza | Chromium blokuje idle | swayidle musi być uruchomiony bez flagi -w |
| Ekran gaśnie ale nie wraca | wlr-randr --off rozłącza link DRM |
Używaj wlopm z sway (nie wlr-randr --off) |
wlopm: Wayland server does not support... |
Kompozytor bez protokołu power-management | Zamień cage na sway |
| Czarny ekran po restarcie | Chromium trzyma zablokowany profil | rm -rf /home/kiosk/.cache/chromium && systemctl restart kiosk.service |