- redbear-sessiond: add Manager.Inhibit (pipe FD), CanPowerOff/CanReboot/ CanSuspend/CanHibernate/CanHybridSleep/CanSleep (return na), PowerOff/ Reboot/Suspend stubs, GetSessionByPID, ListUsers, ListSeats, ListInhibitors, ActivateSession/LockSession/UnlockSession/TerminateSession - redbear-sessiond: add Session SetIdleHint, SetLockedHint, SetType, Terminate methods; wire PauseDevice/ResumeDevice/Lock/Unlock signal emission via SignalEmitter injection; add dynamic device enumeration scanning /scheme/drm/card* and /dev/input/event* at startup - redbear-sessiond: replace infinite pending() with stoppable shutdown via tokio watch channel + control socket shutdown command - redbear-upower: add Changed signal emission with 30s periodic polling and power state snapshot comparison - redbear-notifications: add ActionInvoked signal, expand capabilities to body + body-markup + actions - redbear-polkit, redbear-udisks: replace pending() with stoppable shutdown via signal handling + watch channel - Add redbear-statusnotifierwatcher: new session bus service implementing org.freedesktop.StatusNotifierWatcher for KDE system tray - Add D-Bus activation file for StatusNotifierWatcher - KWin session.cpp: try LogindSession before NoopSession fallback - Consolidate config profiles: remove obsolete redbear-desktop, redbear-kde, redbear-live-*, redbear-minimal-*, redbear-wayland configs; simplify to three supported targets (redbear-full, redbear-mini, redbear-grub) - Update DBUS-INTEGRATION-PLAN.md and DESKTOP-STACK-CURRENT-STATUS.md with Phase 3/4 fragility assessment, KWin readiness matrix, and completeness gap analysis
17 KiB
Red Bear OS Desktop Stack — Current Status
Last updated: 2026-04-25
Canonical plan: local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md (v2.0)
Purpose
This document is the current build/runtime truth summary for the Red Bear desktop stack.
Its job is to answer:
- what the desktop stack actually builds,
- what the tracked profiles currently expose,
- what is only build-visible,
- what is runtime-proven,
- and what still blocks a trustworthy Wayland/KDE session claim.
For the execution plan (phases, timelines, acceptance criteria), see the canonical plan above.
For subsystem planning detail, see local/docs/WAYLAND-IMPLEMENTATION-PLAN.md; for historical KDE rationale, see docs/05-KDE-PLASMA-ON-REDOX.md.
Where We Are in the Plan
The canonical desktop plan uses a three-track model:
- Track A (Phase 1–2): Runtime Substrate → Software Compositor — Phase 1 test coverage is substantially complete (300+ unit tests across all Phase 1 daemons); runtime validation in a live environment remains the exit gate
- Track B (Phase 3–4): KWin Session → KDE Plasma — blocked on Track A
- Track C (Phase 5): Hardware GPU — can start after Phase 1
Current position: Build-side gates are crossed. Phase 1 (Runtime Substrate Validation) is still
the next broad desktop target, but the repo now also carries an experimental Red Bear-native
greeter/auth/session-launch stack on the redbear-full desktop path.
Active Target Surface and Evidence Boundary
- The supported compile targets are
redbear-mini,redbear-full, andredbear-grub. - Desktop/graphics are available only on
redbear-full. - Older names such as
redbear-kde,redbear-wayland,redbear-minimal*,redbear-live-mini, andredbear-live-fullstill appear in historical or staging material, but they are not the supported compile-target surface. - The greeter/login path is currently an experimental build/integration surface on
redbear-full; it is not yet a runtime-validated end-to-end desktop-login claim.
Status Matrix
| Area | Evidence class | Detail |
|---|---|---|
libwayland |
builds | relibc/Wayland-facing compatibility is materially better than before |
| Qt6 core stack | builds | qtbase (7 libs + 12 plugins), qtdeclarative, qtsvg, qtwayland; Qt6Quick/JIT not runtime-proven |
| KF6 frameworks | builds | All 32/32; some higher-level pieces use bounded/reduced recipes (kf6-kio heavy shim, kirigami stub-only) |
| KWin | experimental | Recipe exists; current reduced path now links honest libudev.so and libdisplay-info.so provider paths alongside real libepoxy and lcms2; 11 feature switches remain disabled and runtime/session proof is still missing |
| plasma-workspace | experimental | Recipe exists; stub deps (kf6-knewstuff, kf6-kwallet) unresolved |
| plasma-desktop | experimental | Recipe exists; depends on plasma-workspace |
| Mesa EGL+GBM+GLES2 | builds | Software path via LLVMpipe proven in QEMU; hardware path not proven |
| libdrm amdgpu | builds | Package-level success only |
| Input stack | builds, enumerates | evdevd (65 tests), libevdev, libinput, seatd present; evdevd registers scheme at boot; end-to-end compositor input path unproven |
| D-Bus | builds, bounded (in improvement) | System bus wired in redbear-full; session bus incomplete; Phase 3/4 improvement plan active; completeness: login1.Manager ~10%, login1.Session ~47%, login1.Seat ~20%, Notifications ~80%, UPower ~60%, UDisks2 ~50%, PolicyKit1 ~50%; StatusNotifierWatcher is the new service being added in Phase 4 |
| redbear-sessiond | builds, scaffold (Phase 3/4 improvement active) | org.freedesktop.login1 D-Bus session broker — Rust daemon (zbus 5), wired on the redbear-full desktop path; Phase 3 hard gate is TakeDevice FD passing plus PauseDevice/ResumeDevice signal emission; Priority 1 in Phase 3/4 improvement plan |
| redbear-authd | builds | Privileged local-user auth daemon; /etc/passwd//etc/shadow//etc/group parsing, SHA-256/SHA-512 crypt verification, bounded lockout, target-side recipe build proven |
| redbear-session-launch | builds | User-session bootstrap tool; runtime-dir/env setup, uid/gid handoff, dbus-run-session → redbear-kde-session, target-side recipe build proven |
| redbear-greeterd | builds, experimental | Root-owned greeter orchestrator; UI/auth socket protocol, bounded restart policy, return-to-greeter daemon logic, crate tests pass; end-to-end runtime proof still pending |
| redbear-greeter UI | builds, experimental | Qt6/QML unprivileged login surface now ships in-tree; bounded runtime proof remains narrower than a full trusted KDE desktop-login claim |
| TUI login fallback | builds, boots | 29_activate_console.service now owns VT3 activation for 30_console.service and 31_debug_console.service, keeping VT2/ debug fallback consoles independent of 20_greeter.service success |
| redbear-validation-session | builds, bounded helper | Still staged as a validation launcher/helper, but no longer the primary redbear-full display-service owner |
| Greeter runtime checker | ✅ implemented (bounded checker) | redbear-greeter-check asserts greeter binaries, assets, service files, socket reachability, hello protocol, invalid-login handling, and a validation-only successful-login/session-return loop inside the guest |
| Greeter QEMU harness | ✅ implemented (bounded harness) | test-greeter-qemu.sh boots redbear-full, logs in on the fallback console, and now passes the in-guest greeter checker for hello, invalid-login, and bounded successful-login return-to-greeter proof |
| redbear-notifications | ✅ Scaffold | org.freedesktop.Notifications — logs to stderr, no display integration yet |
| redbear-upower | ⚠️ scaffold / experimental | org.freedesktop.UPower — service exists, and the backing /scheme/acpi/power surface now performs real AML-backed enumeration, but its bootstrap preconditions and runtime proof are still too weak to call release-grade or consumer-validated; treat current enumeration as provisional until Wave 3 in local/docs/ACPI-IMPROVEMENT-PLAN.md closes |
| redbear-udisks | ✅ bounded real | org.freedesktop.UDisks2 — enumerates real disk.* schemes and partitions into read-only D-Bus objects; no fabricated mount/serial metadata |
| Phase 5 D-Bus runtime proof | ✅ implemented (bounded QEMU proof) | redbear-phase5-network-check + test-phase5-network-qemu.sh assert bounded QEMU service registration and current runtime plumbing on redbear-full; treat UPower as provisional until the ACPI power surface is made honest in local/docs/ACPI-IMPROVEMENT-PLAN.md Wave 3 |
| Phase 6 Solid readiness proof | ✅ implemented, blocked | redbear-phase6-kde-check + test-phase6-kde-qemu.sh now distinguish real Solid validation from blocked states; kf6-solid remains disabled until runtime proof + tooling are present |
| redbear-polkit | ✅ Scaffold | org.freedesktop.PolicyKit1 — always-permit authorization; KAuth still uses FAKE backend because PolkitQt6-1 is not packaged yet |
| redbear-dbus-services | ✅ Created | D-Bus activation files + policies staged |
| DRM/KMS | builds | redox-drm scheme daemon; 68 unit tests (KMS, GEM, PRIME, wire structs, scheme pure logic); no hardware runtime validation |
| GPU acceleration | blocked | PRIME/DMA-BUF ioctls and bounded private CS surface implemented; real vendor render CS/fence path still missing |
| validation compositor runtime | experimental | Reaches early init in QEMU; no complete session |
| validation profile | builds, boots | Bounded Wayland runtime profile |
redbear-full profile |
builds, boots | Active desktop/graphics compile surface; now owns the experimental greeter/auth/session-launch integration path |
redbear-grub profile |
builds | Text-only with GRUB chainload for bare-metal multi-boot |
redbear-mini profile |
builds | Minimal non-desktop compile target |
redbear-hwutils |
builds | lspci/lsusb tools; 19 unit tests (PCI location parsing, USB device description, argument handling) |
Profile View
redbear-full
- Role: Active desktop/graphics compile target and current greeter-integration surface
- Current truth: Carries D-Bus, sessiond, broader integration pieces, and the experimental Red Bear-native greeter/auth/session-launch stack; VirtIO networking works in QEMU, the bounded Phase 5 network/session checker is evidence-backed there, and the repo now includes a bounded greeter checker/harness for the login surface.
redbear-validation-sessionremains staged only as a bounded helper, not the active20_display.serviceowner on this target. TUI fallback (30_console.service/31_debug_console.service) is now triggered through29_activate_console.serviceand is decoupled from greeter success. - Use for: Desktop integration testing, greeter/login bring-up, and bounded desktop/network plumbing validation
- Do not overclaim: This profile proves bounded QEMU desktop/network plumbing only. It does not by itself close the Wi-Fi implementation plan's later real-hardware Phase W5 reporting/recovery gate.
redbear-grub
- Role: Text-only target with GRUB boot manager for bare-metal multi-boot
- Current truth: Follows
redbear-mini; text-only with GRUB chainload ESP layout, no desktop/graphics - Use for: Bare-metal multi-boot, recovery with GRUB menu, and install workflows requiring GRUB
redbear-mini
- Role: Minimal non-desktop target
- Current truth: No desktop/graphics path; recovery and non-desktop integration surface only. TUI recovery is bound to VT activation through
29_activate_console.servicefollowed by30_console.service/31_debug_console.service. - Use for: Minimal runtime bring-up, subsystem validation, and non-desktop packaging checks
Current Blockers
1. Runtime trust trails build success (Phase 1 gate)
The repo has real build-visible desktop progress, but build success exceeds runtime confidence. Phase 1 exists specifically to close this gap. Phase 1 test coverage is now comprehensive (300+ unit tests across evdevd, udev-shim, firmware-loader, redox-drm, redbear-hwutils). The remaining gap is live-environment runtime validation of these tested surfaces.
2. No complete compositor session (Phase 2 gate)
A bounded compositor initialization reaches early startup but does not complete a usable Wayland compositor session. This blocks all desktop session work. KWin is the sole intended compositor. No alternative (weston, wlroots) is in a working state. The KWin reduced path builds with 11 feature groups disabled but has zero runtime session evidence.
3. Greeter/login path now exists, but runtime proof is still missing (desktop-login gate)
The repo now carries the main non-visual pieces of the Red Bear-native greeter/login plan:
redbear-authdredbear-session-launchredbear-greeterdredbear-greeter-services.tomlredbear-greeter-checktest-greeter-qemu.sh
Current truth for that slice:
| Piece | Current state | Remaining limitation |
|---|---|---|
redbear-authd |
Target-side recipe build proven; unit tests cover passwd/shadow parsing, SHA-crypt and Argon2 verification, lockout, approval checks | Remaining risk is no longer auth-format handling, but broader desktop-session stability below the greeter slice |
redbear-session-launch |
Target-side recipe build proven; unit tests cover env/runtime-dir/argument handling, including current session environment contract | Remaining limitation is broader compositor/session stability, not the basic session-launch boundary |
redbear-greeterd |
Crate tests cover protocol-facing state strings, installed asset paths, bounded restart policy, and now own successful-login session launch directly after response delivery | Full desktop-login trust still depends on wider KDE runtime proof; the remaining instability is KWin compositor startup, not greeter/auth protocol wiring |
| Greeter validation helpers | redbear-greeter-check + test-greeter-qemu.sh exist and are wired for bounded runtime proof |
The successful-login path is validation-only and does not replace broader KDE session proof, but the bounded QEMU greeter proof now passes |
redbear-greeter packaging |
Builds in-tree | Qt/QML UI binary, compositor wrapper, branded assets, and a shared login-protocol crate are present; Qt shared-plugin loading now works in the guest, while broader KWin runtime stability still remains experimental |
This means Red Bear now has a credible bounded runtime-visible login boundary, but not yet a runtime-trusted general-purpose graphical login surface.
4. KWin reduced build is now dependency-honest, but runtime proof is still missing (desktop-session gate)
The reduced KWin path now builds with honest provider linkage for libepoxy, lcms2, libudev,
and libdisplay-info.
Current truth for that slice:
| Dependency | Current state | Remaining limitation |
|---|---|---|
libepoxy |
Real dependency | No blocker in this slice |
lcms2 |
Real dependency | No blocker in this slice |
libudev |
Honest scheme-backed provider (libudev.so) |
Hotplug monitoring remains bounded rather than full eudev parity |
libdisplay-info |
Honest bounded provider (libdisplay-info.so) |
Base-EDID parsing only; CTA / DisplayID / HDR metadata remain unsupported |
Additionally, two packages still need more honest session-ready treatment: kirigami (stub-only), kf6-kio (heavy shim).
5. Hardware acceleration missing GPU CS ioctl (Phase 5 gate)
PRIME/DMA-BUF buffer sharing is implemented at the scheme level, and a bounded private CS surface now exists for shared-contract work. Real vendor render command submission and shared fence semantics still do not exist. This still blocks hardware-accelerated rendering.
The repo now also carries a bounded in-guest display checker, redbear-drm-display-check, with
shell wrappers at local/scripts/test-drm-display-runtime.sh, test-amd-gpu.sh, and
test-intel-gpu.sh. It now covers direct connector/mode enumeration and bounded direct modeset
proof over the Red Bear DRM ioctl surface, but it is still only a runtime evidence tool until it is
exercised on real Intel and AMD hardware.
6. KDE Plasma session assembly blocked on QML stack (Phase 4 gate)
Kirigami is stub-only (Qt6Quick not available on Redox). kf6-kio is heavily shimmed (QtNetwork disabled, KIOCORE_ONLY=ON). kf6-knewstuff and kf6-kwallet are stub-only. These collectively prevent plasma-workspace from building honestly, which blocks the entire KDE Plasma session.
7. QtNetwork disabled blocks KDE network integration
QtNetwork is intentionally disabled because relibc networking is too narrow. This prevents Qt-based network applications, kf6-kio network transparency, and KDE network-dependent features.
Canonical Document Roles
| Document | Role |
|---|---|
local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md |
Canonical desktop path plan (v2.0, Phase 1–5) |
| This document | Current build/runtime truth summary |
local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md |
Canonical GPU/DRM execution plan beneath the desktop path |
local/docs/QT6-PORT-STATUS.md |
Qt/KF6/KWin package-level build status |
local/docs/AMD-FIRST-INTEGRATION.md |
AMD-specific hardware/driver detail |
local/docs/WAYLAND-IMPLEMENTATION-PLAN.md |
Canonical Wayland subsystem plan |
docs/05-KDE-PLASMA-ON-REDOX.md |
Historical KDE design rationale |
local/docs/PROFILE-MATRIX.md |
Profile roles and support-language reference |
Bottom Line
The Red Bear desktop stack has crossed major build-side gates and one important bounded runtime gate:
- All Qt6 core modules, all 32 KF6 frameworks, Mesa EGL/GBM/GLES2, and D-Bus build
- Four supported compile targets exist, with desktop/graphics on
redbear-full - the Red Bear-native greeter/login path now has a bounded passing QEMU proof (
GREETER_HELLO=ok,GREETER_INVALID=ok,GREETER_VALID=ok) - relibc compatibility is materially stronger than before
- Phase 1 test coverage is comprehensive: 300+ unit tests across all Phase 1 daemons (evdevd 65, udev-shim 15, firmware-loader 24, redox-drm 68, redbear-hwutils 19, bluetooth/wifi 209)
- KWin reduced path builds with honest dependency linkage (libepoxy, lcms2, libudev, libdisplay-info) but has no compositor session proof
- Critical blockers for Phase 4: kirigami stub (needs Qt6Quick), kf6-kio shim (needs QtNetwork), kf6-knewstuff/kwallet stubs
The remaining work is broader runtime validation, compositor/session stability, and the remaining KDE session/runtime proof work. Phase 1 (Runtime Substrate Validation) has comprehensive test coverage; the remaining gate is live-environment runtime validation. The key boundary for Phase 2 is: no compositor session proof exists. The key boundary for Phase 3-4 is: kirigami, kf6-kio, and QML dependencies must become honest before KDE Plasma session assembly can proceed.