Files
kiosk-instrukcje/README.md
T
2026-05-05 15:54:08 +02:00

169 lines
5.1 KiB
Markdown

# Kiosk Chromium — Debian 13 (trixie) — Dell OptiPlex 3040
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
- Dell OptiPlex 3040, monitor DP lub HDMI
- Debian 13 (trixie) netinst — instalacja minimalna bez środowiska graficznego
---
## Instalacja krok po kroku
### 1. Utwórz użytkownika kiosk
```bash
useradd -m -r -s /usr/sbin/nologin kiosk
usermod -aG tty,input,video,dialout kiosk
```
### 2. Zainstaluj pakiety
```bash
apt update && apt install -y \
sway swayidle wlopm wlr-randr \
chromium
```
> `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
```bash
# 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
chown kiosk:kiosk /home/kiosk/waiting.html
# Konfiguracja sway
mkdir -p /home/kiosk/.config/sway
cp sway-config /home/kiosk/.config/sway/config
chown -R kiosk:kiosk /home/kiosk/.config
# Jednostka systemd
cp kiosk.service /etc/systemd/system/kiosk.service
```
### 4. Włącz i uruchom serwis
```bash
systemctl daemon-reload
systemctl enable kiosk.service
systemctl start kiosk.service
```
---
## Opis plików
### `kiosk.service`
Jednostka systemd uruchamiająca `sway` jako użytkownik `kiosk`. Ważne parametry:
| Opcja | Wartość | Opis |
|---|---|---|
| `PAMName=login` | `login` | Dostęp do urządzeń przez logind (GPU, input) |
| `RuntimeDirectory=kiosk` | `kiosk` | Automatycznie tworzy `/run/kiosk` z prawami 0700 |
| `XDG_RUNTIME_DIR` | `/run/kiosk` | Wymagane przez sway / Wayland |
| `WLR_LIBSEAT_BACKEND` | `logind` | Dostęp do GPU bez uprawnień roota |
| `IDLE_TIME` | `120` | Czas bezczynności (sekundy) przed wygaszeniem ekranu |
| `ExecStart` | `/usr/bin/sway` | Kompozytor Wayland |
| `Restart=always` | — | Automatyczny restart po awarii / wyjściu Chromium |
**Zmiana czasu wygaszania:**
```bash
# Edytuj /etc/systemd/system/kiosk.service
Environment=IDLE_TIME=300 # 5 minut
systemctl daemon-reload
systemctl restart kiosk.service
```
---
### `sway-config` → `/home/kiosk/.config/sway/config`
Minimalna konfiguracja sway:
```
output * bg #000000 solid_color # czarne tło
output * transform 90 # obrót monitora o 90° (usuń jeśli zbędne)
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`
**Zmiana adresu IP serwera:**
```bash
# 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
```bash
# 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
```bash
systemctl restart kiosk.service
systemctl stop kiosk.service
```
### Sprawdzenie wyjść wideo
```bash
WAYLAND_DISPLAY=wayland-0 XDG_RUNTIME_DIR=/run/kiosk wlr-randr
```
### Ręczne wygaszenie / wybudzenie
```bash
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 |
| 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` |