2026-05-26 14:55:20 +02:00
2026-05-25 13:16:44 +02:00
2026-05-06 13:28:39 +02:00
2026-05-26 14:22:33 +02:00
2026-05-25 12:13:39 +02:00
2026-05-26 14:22:33 +02:00
2026-05-05 15:54:08 +02:00
2026-05-06 13:28:39 +02:00

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

cage nie obsługuje protokołu wlr-output-power-management-v1, przez co wlopm z nim nie działa — ekran można wygasić, ale nie można go wybudzić. Dlatego używamy sway.

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 seatd jako menedżera seat zamiast logind. Wymaga to, aby seatd.service był uruchomiony oraz żeby użytkownik kiosk należał do grupy video (dostęp do socketu seatd) i render (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:

  1. Uruchamia swayidle bez flagi -w — ignoruje idle inhibitory (Chromium ustawia inhibitor Wayland; swayidle -w respektuje go i nigdy nie wygasiłby ekranu)
  2. 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
  3. Chromium startuje natychmiast z lokalnym plikiem waiting.html (ekran oczekiwania)
  4. Ping-loop czeka, aż KIOSK_HOST (192.168.40.126) odpowie
  5. 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
S
Description
Konfiguracja komputera pod instrukcje.local działające w trybie kiosku.
Readme 144 KiB
Languages
HTML 61.5%
Shell 38.5%