7.2 KiB
redbear-full → SDDM Wayland greeter: bring-up campaign
Goal: make redbear-full compile and wire every component so a run shows the
SDDM Wayland login prompt, on either VirGL (QEMU virtio-gpu) or Intel.
Runtime chain: redox-drm → /scheme/drm/card0 → Mesa (GBM/EGL/llvmpipe) →
KWin (Wayland, KWIN_DRM_DEVICES=/scheme/drm/card0) → SDDM greeter (Qt6/Wayland).
Greeter service = 21_sddm.service; seat = seatd.
Grounded in four investigations (2026-07-24): Mesa port, DRM provider, build
efficiency, upstream forks. Key correction to stale memory: the Mesa EGL/DRI
with_dri gate is already solved in-tree (redox added to system_has_kms_drm);
the frontier has moved to Qt6-on-Wayland (see QT6-WAYLAND-NULL8-DIAGNOSIS.md).
Component homes
redox-drm(DRM provider,/scheme/drm/card0):local/recipes/gpu/redox-drm/— cargo. Built-in AMD+Intel+VirtIO KMS drivers; ioctl ABI matches KWin + redbear-compositor.mesa(EGL/GBM/llvmpipe):local/recipes/libs/mesa/(26.1.4) +local/patches/mesa/.- Qt6:
local/recipes/qt/{qtbase,qtdeclarative,qtwayland}+local/patches/qtbase/. - KF6/KWin/SDDM:
local/recipes/kde/. - Compositor:
local/recipes/wayland/redbear-compositor/— cargo. - Config:
config/redbear-full.toml; driver match tablelocal/config/drivers.d/30-graphics.toml.
Phase status
| Phase | Item | Status |
|---|---|---|
| 0 | Build system: stop llvm21/toolchain re-cook on every relibc/base bump (TOOLCHAIN_PRESERVE + REDBEAR_FORCE_TOOLCHAIN_RECOOK escape) |
DONE f6b09ff7 |
| 1a | Mesa EGL gate persisted as tracked patch 08-meson-redox-kms-drm.patch (was untracked in-place edit, lost on re-extract) |
DONE 74d5e01b |
| 1b | Mesa build — clear next blockers (libdrm dep now required; GBM backend; wayland-scanner: patch 07 is stale vs 26.1.4 layout, recipe uses $WAYLAND_SCANNER env — verify) |
TODO (needs cook) |
| 2 | VirGL determinism: redox-drm wins virtio-gpu bind (priority-61 vendor 0x1AF4) so KWin gets a real card0 instead of virtio-gpud's VT scanout |
DONE a00c13e5 |
| R | Rust components compile-verified: redox-drm ✓, redbear-compositor ✓ (x86_64-redox) |
DONE |
| 3 | Full build campaign: mesa → libdrm → qt6 → kf6 → kwin → sddm; fix each compile failure | TODO (needs cook) |
| 4 | Qt6 Wayland null+8: candidate patch wired (qtwaylandscanner-null-guard-listeners.patch) but NOT runtime-validated in isolation; root cause (why proxy NULL) open — see QT6-WAYLAND-NULL8-DIAGNOSIS.md §7 runbook |
TODO (runtime) |
| 5 | Boot redbear-full (QEMU virtio-gpu, -m 4G) → observe SDDM greeter on framebuffer |
TODO |
Upstream cherry-pick candidates (enabling, not required yet)
From the upstream-forks sweep — fetch + cherry-pick only if we hit these runtime bugs (they touch operator-active kernel/relibc, so coordinate):
- kernel
eaf50894..486a7818: futex-on-shared-memory CoW fix (Mesa/Wayland shared buffers), poll-hang, read_with_timeout. - relibc
9867c155..707169e2: ld.so lazy PLT relocation (dlopen of libEGL/libgbm), poll/epoll timeout, UDS-connect outside rootfs. - base
59cf8189..488da6a1: ramfs hosting AF_UNIX sockets (Wayland$XDG_RUNTIME_DIR/wayland-0).
Runtime wiring audit (config/redbear-full.toml)
Greeter compositor: /etc/sddm.conf sets [Wayland] CompositorCommand=/usr/bin/redbear-compositor.
So the SDDM greeter renders on redbear-compositor (KWin is the post-login
session compositor). Rendering the greeter does NOT need the compositor input
wiring (that only gates typing a login) — so "see the SDDM prompt" is reachable
without the input refactor.
Runtime chain (coherent): 00_driver-manager sees the GPU PCI device →
spawns redox-drm (priority-61 for virtio/Intel/AMD) → /scheme/drm/card0 →
21_sddm (REDBEAR_DRM_WAIT_SECONDS=30 waits for card0) → launches
redbear-compositor → SDDM greeter Qt/Wayland UI. Needs dbus, seatd,
redbear-sessiond, redbear-authd (all requires_weak on sddm).
CONFLICT — RESOLVED (9f528397, operator: "SDDM is the only greeter"): three
display entry points fired as oneshot_async, each contending for the
single-owner GPU/card0/VT: 20_display (redbear-session-launch KDE session),
20_greeter (redbear-greeterd), 21_sddm (target). The first two are now gated
off reversibly via condition_path_exists = ["/etc/redbear/enable-legacy-greeter"]
(sentinel not installed; touch it to re-enable). 21_sddm runs ungated.
Post-login session launch is SDDM's job (SessionDir=/usr/share/wayland-sessions
— note: no session .desktop is defined there yet; that's a post-prompt task).
Build notes / deficiencies fixed
- Full builds re-cooked llvm21 (~1-2h) on every base/relibc bump — fixed in Phase 0.
- Mesa source/ is an untracked build artifact; durable Mesa changes MUST be patches (Phase 1a).
- More build-system deficiencies expected during the cook campaign — fix comprehensively as found.
Build campaign log
Round 1 (2026-07-24) — redox-driver-sys Once regression (sole blocker)
redbear-full --upstreamlaunched. llvm21 precook OK (long pole done).- SOLE compile failure:
redox-driver-sysfails for x86_64-redox with E0425 "cannot find type Once" (pci.rs:20) — a regression from operator commitd945483915(added a Redox-only IOPLOnceguard without importing it). It is a foundational dep (vialinux-kpi) of mesa, redox-drm, and every driver, so it cascaded across the whole driver/graphics layer (mesa never reached EGL config). - Fixed: cfg-gated
use std::sync::Once;(commit on redox-driver-sys source). - Desktop stack (Qt6/KF6/KWin/SDDM) does NOT depend on redox-driver-sys → caches fine in the doomed round. Plan: let round 1 cache the desktop stack, then restart incrementally with the fix so the driver/graphics layer cooks correctly.
- Next: on restart, watch mesa (first real EGL-gate validation) + redox-drm.
Round 2 (2026-07-24) — mesa Redox port + full-ISO wiring
- EGL gate validated: mesa configured (with_dri→egl/gbm) and compiled — the
historical hard blocker is cleared. Two C-level Redox port gaps fixed, in order:
allocanot declared (shader_query.cpp + others): force-includealloca.hvia recipe meson c_args/cpp_args (relibc provides#define alloca __builtin_alloca).- wayland-scanner exit 127: meson resolved the TARGET (Redox) wayland-scanner from wayland-scanner.pc (can't run on host); recipe now overwrites the sysroot copy with the host wayland-scanner before meson (protocol codegen is portable).
- Full-ISO wiring fixed to reach SDDM (assessment + fixes):
- VirGL: added priority-61 redox-drm 0x1AF4 entry to the INSTALLED inline 30-graphics.toml in config/redbear-full.toml (local/config/ copy was NOT shipped).
- redbear-compositor: create_dir_all(XDG_RUNTIME_DIR) before Wayland socket bind.
- redbear-iwlwifi excluded from redbear-meta deps (operator-authorized, temporary)
so
make liveassembles. - SDDM-only greeter: 20_greeter/20_display gated off (earlier).
- Next: mesa.pkgar → cook redox-drm/qt/kwin/sddm → assemble ISO (REDBEAR_SKIP_ABI_STALENESS=1 build-redbear.sh --upstream redbear-full) → boot QEMU virtio-gpu → SDDM prompt.