5.1 KiB
B13W — Wayland/wlroots on Alpine (Cage, Sway, wayvnc) next to X11 (2026-10-04)
System: Alpine 3.24.2 primary root on p27 (B12Q/B12R), kernel 7.2.7-aurora-b12 (no kernel/DTB/cache change in B13W).
Scripts: b13/run/ (deployed to /usr/local/lib/b13/run): wl-common.sh, cage-up/down.sh, sway-up/down.sh, sway.conf, wayvnc-up/down.sh, pattern.sh.
X11 is the existing /usr/local/bin/aurora-x start|stop (the x-up/vnc-up names from the brief do not exist); its files/config were not edited.
1. Audit
- DRM:
/dev/dri/card0= panel-mipi-dbi-spi (/soc@0/spi@78b8000/panel@0), connector SPI-1 connected, mode 128x128 @ 59.953 Hz, 1 CRTC, 1 plane, physical 26x26 mm. No render node (no GPU)./dev/fb0= DRM fbdev emulation (used by Xorg fbdev driver). - Input: only
pm8941_pwrkey(/dev/input/event0). udevd running (started by the modem controller), /run/udev present. - Seat: seatd 0.9.3 (
seatd -g video, VT-bound seat0), libseat backend seatd; compositors run as root from the session scripts. - Packages (apk, v3.24 via mirror.yandex.ru): wlroots0.20 0.20.2-r0, cage 0.3.0-r0, sway 1.12_rc3-r0, wayvnc 0.10.0-r0 (neatvnc 1.0.0, gnutls 3.8.13), seatd/libseat 0.9.3-r0, wayland 1.25.0, libinput 1.31.3, foot 1.27.0 (test client), font-dejavu, grim (screencopy check), wayland-utils. No Xwayland.
- Note: wlroots links libEGL/libgbm → mesa's libgallium + LLVM must be present even with Pixman (musl resolves all symbols at load). The B13 RAM prune had
removed them →
apk fix mesa* llvm22-libs spirv-tools hwdata-pci xorg-serverrestored the package files (p27 +215 MB; also restores Xorg's glamor/glx modules).
2. Renderer
WLR_RENDERER=pixman WLR_BACKENDS=drm,libinput WLR_DRM_DEVICES=/dev/dri/card0 WLR_LIBINPUT_NO_DEVICES=1 LIBSEAT_BACKEND=seatd — log: "Creating pixman renderer".
3–5. Results
Test UI = foot fullscreen with pattern.sh (red TL, green TR, blue BL, white BR, white frame, label). Cells 25x10 at 9 px → 3 px right / 8 px bottom of background (font grid, visible identically in the screencopy) — not a panel offset.
| check | result |
|---|---|
| Cage on ST7735S | PASS — modeset SPI-1 128x128, pattern correct via grim and on the physical panel (operator: corners OK, only the font-grid strip right/bottom) |
| Sway on ST7735S | PASS — same pattern fullscreen, no bar/wallpaper/borders, 0 errors after xwayland disable + swaybg_command - |
| wayvnc on Sway | PASS — captures output SPI-1 (same physical output), listens 172.16.42.1:5900 only (no 0.0.0.0, no IPv6), security types [19 VeNCrypt, 129, 5], no None; VeNCrypt X509Plain TLS1.3, pinned cert D4:46:9D…; wrong password → "Invalid username or password"; typed "vnc ok 42" + pointer move visible in the next frame and on the physical panel (operator-confirmed) |
| wayvnc on Cage | PASS — same: capture, auth, typed "cage 7" + pointer (warning: no output power-management protocol in Cage, harmless) |
| X11 regression | PASS — after cage/sway/wayvnc down: VT back to tty1, fbcon bound; aurora-x start fbdev → X-START OK 128x128, twm+xterm, x11vnc 172.16.42.1:5900 (IPv4 only) frame OK, X11 visible on the physical panel (operator-confirmed); Xorg (EE) lines identical to B13 (mouse/kbd modules, FBIOPUTCMAP) |
8. Comparison (idle, measured on the board, CPU = utime+stime over 20–30 s)
| stack | RSS | idle CPU | physical output | remote access | 128x128 suitability |
|---|---|---|---|---|---|
| Xorg (fbdev) | 49.0 MB (+ x11vnc 3.8, twm 4.0, xterm 5.9) | 0.05 % | /dev/fb0 (fbdev emulation) | x11vnc, no auth, NCM only | works; legacy toolkit/WM, no per-frame damage path |
| Cage | 47.5 MB (+ foot 7.7, seatd 0.7) | 0.00 % | DRM/KMS card0, Pixman | wayvnc (TLS+password) works | best: kiosk, one fullscreen app, start 0.45–0.67 s |
| Sway | 56.8 MB (+ foot 7.7) | 0.00 % | DRM/KMS card0, Pixman | wayvnc works, IPC/swaymsg for debugging | good debug/service shell, start 0.68 s |
| wayvnc | 38.0–38.6 MB | 0.00 % idle | — | — | — |
| RSS of the wlroots compositors is dominated by mapped mesa/LLVM pages (VmSize ~1.28 GB), not by rendering. Free RAM stayed ≈ 320 MB available. |
Verdict
X11 PASS
Cage PASS
Sway PASS
wayvnc on Sway PASS
wayvnc on Cage PASS
- Production modem UI compositor: Cage (Pixman). Since wayvnc also works on Cage, production can expose remote view without Sway.
- Remote/debug: Sway + wayvnc (or Cage + wayvnc).
- Xorg: keep as fallback until the first Wayland UI exists; afterwards it can be removed (xorg-server, xf86-video-fbdev, x11vnc, twm, xterm) — it shares mesa with wlroots anyway.
State left / notes
- p27 changes: packages above, /usr/local/lib/b13/run/*, /etc/aurora/wayvnc/{config,tls_key.pem,tls_cert.pem} (root 600; password + key only in b13/private/ locally — never publish).
- Nothing autostarts (no runlevel changes). At the end X11 (aurora-x) was left running on vt2 for inspection;
aurora-x stopreturns to the console. - pattern.sh: the echo line clears to EOL and erases the right frame cell (cosmetic).
- 2026-10-04: operator connected interactively with TigerVNC (SecurityTypes X509Plain, X509CA = b13 cert) from 480s to wayvnc on Sway — Sway visible in the viewer.