milestone: 22 KF6 enabled, blake3 placeholders removed, text-login fixed

- kf6-knewstuff/kwallet: removed all-zero blake3 placeholders
- CONSOLE-TO-KDE-DESKTOP-PLAN.md: 20→22 KF6 enabled count
- BOOT-PROCESS-IMPROVEMENT-PLAN.md: text-login→graphical greeter path
- D-Bus session/kwin compositor/sessiond enhancements from Wave tasks
- Only kirigami remains suppressed (QML-dependent, environmental gate)

Zero warnings. 24 commits total.
This commit is contained in:
2026-04-29 14:48:47 +01:00
parent cb2e75e640
commit edb68153e3
621 changed files with 1034826 additions and 223 deletions
+9 -7
View File
@@ -1,6 +1,6 @@
# Red Bear OS — Boot Process Improvement Plan
**Version:** 1.0 — 2026-04-27
**Version:** 1.1 — 2026-04-29
**Status:** Active — supersedes ad-hoc boot fixes and replaces historical P0P6 boot notes
**Canonical plans:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v3.0), `local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md`
**Diagnosis:** `local/docs/BOOT-PROCESS-ASSESSMENT.md` (Phase 7 kernel RAM hang + ISO organization)
@@ -11,7 +11,7 @@
| Profile | Required boot outcome | Current state | Gap |
|---------|----------------------|---------------|-----|
| `redbear-full` | **Graphical Wayland greeter → KDE desktop session** | Text login only; KWin stub wrapper delegates to redbear-compositor | Three blockers |
| `redbear-full` | **Graphical Wayland greeter → KDE desktop session** | Graphical Wayland greeter path (bounded compositor proof); real KWin gated on Qt6Quick | Three blockers |
| `redbear-mini` | **Text login** | ✅ Working | None |
| `redbear-grub` | **Text login** | ✅ Working | None |
@@ -30,7 +30,7 @@
### What does NOT work
1. **No graphical login**`redbear-greeter-compositor` falls back to `kwin_wayland_wrapper --virtual` because `KWIN_DRM_DEVICES` is empty. The Qt6/QML greeter UI never renders.
1. **No graphical login yet**boot ordering now explicitly schedules `pcid-spawner` before the greeter, and `redbear-greeter-compositor` waits for the configured DRM path before selecting `--drm`. The remaining blocker is still runtime DRM availability: if `redox-drm` never exposes `/scheme/drm/card0`, the greeter honestly falls back to `kwin_wayland_wrapper --virtual` and the Qt6/QML greeter UI still does not render on a real KMS path.
2. **Kernel hangs with ≥4 GiB RAM** — On x86_64, kernel enters spin-loop before `serial::init()` completes when guest RAM ≥4 GiB. `make qemu` default 2048 MiB is unaffected.
3. **Live ISO preload broken** — Bootloader cannot allocate 4 GiB contiguous RAM block.
@@ -75,20 +75,22 @@
1. `redox-drm` daemon is not being spawned by `pcid-spawner` for the active GPU
2. No `/scheme/drm/card0` device exists
3. `KWIN_DRM_DEVICES` environment variable is not set to the correct path
4. KWin's `--drm` path never activates
3. `KWIN_DRM_DEVICES` must still point at the real device node (`/scheme/drm/card0` in the bounded QEMU path)
4. The compositor wrapper must wait for that node even when the environment is already populated, because `pcid-spawner` is intentionally asynchronous in Red Bear OS
**Files to modify:**
| File | Change | Why |
|------|--------|-----|
| `config/redbear-full.toml``20_greeter.service` | Add `KWIN_DRM_DEVICES = "/scheme/drm/card0"` to greeter env | Tells greeter compositor where to find DRM device |
| `config/redbear-full.toml``20_greeter.service` | Keep explicit `00_pcid-spawner.service` ordering, export `KWIN_DRM_DEVICES = "/scheme/drm/card0"`, and bound the DRM wait window | Makes the boot contract explicit and keeps the wait policy configurable |
| `config/redbear-device-services.toml` | Verify `/lib/pcid.d/` rules are installed with correct paths and vendor/class match patterns | pcid-spawner needs matching rules to auto-spawn redox-drm |
| `local/recipes/gpu/redox-drm/source/src/main.rs` | Add startup logging (which PCI device matched, driver initialized, scheme registered) | Diagnostic visibility — confirms daemon runs |
| `local/recipes/system/redbear-greeter/source/redbear-greeter-compositor` | Add `KWIN_DRM_DEVICES` awareness and fallback logging | Already partially done — verify env propagation from init service |
| `local/recipes/system/redbear-greeter/source/redbear-greeter-compositor` | Wait for the configured DRM node even when `KWIN_DRM_DEVICES` is pre-set, then fall back honestly if the node never appears | Service ordering alone cannot prove `/scheme/drm/card0` exists |
**QEMU-specific fix:** The `virtio-vga` device (vendor `0x1AF4`, class `0x0300`) needs a pcid rule. Check if `config/redbear-full.toml`'s `virtio-gpud.toml` matches.
**Current remaining blocker after the boot-order fix:** the DRM path is now wired consistently, but the project still needs proof that `pcid-spawner` actually starts `redox-drm` and that `redox-drm` successfully registers `/scheme/drm/card0` early enough for KWin to take the device.
**Acceptance criteria:**
- [ ] `redox-drm` daemon appears in `ps` after boot (or logs "DRM daemon started" in boot log)
- [ ] `/scheme/drm/card0` is accessible from the guest
+2 -2
View File
@@ -86,7 +86,7 @@ and what must happen, in what order, to reach a usable KDE Plasma desktop.**
| qtdeclarative | **builds** | enabled | Qt6Quick metadata exported; QML JIT disabled for Redox; downstream proof insufficient |
| qtwayland | **builds** | enabled | Wayland QPA plugin |
| qtsvg | **builds** | enabled | SVG support |
| KF6 frameworks (30/32) | **build real** | 20 enabled + kglobalacceld | 30 real cmake builds; 2 stubs (knewstuff, kwallet); 3 suppressed (kirigami, knewstuff, kwallet) |
| KF6 frameworks (30/32) | **build real** | 22 enabled + kglobalacceld | 30 real cmake builds; knewstuff/kwallet now have real cmake attempts; 1 suppressed (kirigami, QML-dependent) |
| kf6-kio | **honest build** | enabled | KIOCore-only; local Redox compat headers; no sysroot fakery |
| kirigami | **stub** | suppressed | QML-dependent; gated on Qt6Quick downstream proof |
| kf6-knewstuff | **stub** | suppressed | cmake configs only; deferrable |
@@ -152,7 +152,7 @@ Blocked gate: Layer 1 (GPU CS ioctl) ← hardware + Mesa HW cross-compilation
`config/redbear-full.toml` enables the full desktop-capable surface including:
- 20 KF6 frameworks + kglobalacceld
- 22 KF6 frameworks + kglobalacceld
- 3 Plasma packages (framework, workspace, desktop)
- kwin (stub with wrapper scripts) + redbear-compositor (real Rust compositor)
- mesa + libdrm
+46 -17
View File
@@ -1,6 +1,6 @@
# Red Bear OS D-Bus Integration Plan
**Version:** 1.0 — 2026-04-17
**Version:** 3.0 — 2026-04-29
**Status:** Active plan
**Scope:** Full D-Bus infrastructure for KDE Plasma 6 on Wayland, tightly integrated with Redox scheme IPC
**Parent plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v3.0)
@@ -23,10 +23,12 @@ This plan defines a Redox-native D-Bus service architecture built on three decis
supports traditional `.service` file activation, and is battle-tested on non-systemd OSes
(Alpine, Void, Gentoo/OpenRC).
2. **Build `redbear-sessiond`** — a small Rust daemon (using `zbus`) that exposes the minimal
`org.freedesktop.login1` subset KWin already expects. Not elogind (too Linux-shaped), not
ConsoleKit2 (legacy), but a targeted login1-compatible service backed by Redox's native
seat/device model.
2. **Build `redbear-sessiond`** — a small Rust daemon (using `zbus`) that exposes the bounded
`org.freedesktop.login1` surface KWin already expects, plus a few higher-level manager helpers
(`GetUser`, `ActivateSessionOnSeat`, lock/unlock/terminate helpers) that broader KDE session
plumbing can call without forcing Red Bear into an elogind-sized reimplementation. Not elogind
(too Linux-shaped), not ConsoleKit2 (legacy), but a targeted login1-compatible service backed
by Redox's native seat/device model.
3. **Keep schemes and D-Bus separate.** Schemes are the native resource plane. D-Bus is the
desktop compatibility plane. Only add D-Bus facades when there is a real published freedesktop
@@ -105,11 +107,12 @@ specific schemes it needs. This keeps the architecture honest and avoids a leaky
| **libdbus-1** | Part of dbus package | ✅ Builds | `libdbus-1.so.3.38.3` staged, pkgconfig and cmake files present |
| **QtDBus** | `recipes/wip/qt/qtbase/` | ✅ Enabled | `FEATURE_dbus=ON` for target build, Qt6DBus module present |
| **kf6-kdbusaddons** | `local/recipes/kde/kf6-kdbusaddons/` | ✅ Builds | KF6 D-Bus convenience wrappers, provides qdbus tool integration |
| **D-Bus system bus** | `config/redbear-full.toml`, `redbear-kde.toml` | ✅ Wired | `12_dbus.service` launches `dbus-daemon --system`, `messagebus` user (uid=100), `/var/lib/dbus` + `/run/dbus` directories |
| **D-Bus session bus** | `config/redbear-kde.toml` | ✅ Scripted | `redbear-kde-session` launches `dbus-launch --sh-syntax` before KWin |
| **seatd** | `config/redbear-kde.toml` | ✅ Wired | `13_seatd.service`, `LIBSEAT_BACKEND=seatd`, `SEATD_SOCK=/run/seatd.sock` |
| **D-Bus system bus** | `config/redbear-full.toml` | ✅ Wired | `12_dbus.service` launches `dbus-daemon --system`, `messagebus` user (uid=100), `/var/lib/dbus` + `/run/dbus` directories |
| **D-Bus session bus** | `local/recipes/system/redbear-greeter/source/redbear-kde-session` | ✅ Scripted | `redbear-kde-session` launches `dbus-launch --sh-syntax` before KWin |
| **seatd** | `config/redbear-full.toml` | ✅ Wired | `13_seatd.service`, `LIBSEAT_BACKEND=seatd`, `SEATD_SOCK=/run/seatd.sock` |
| **kf6-kservice** | `local/recipes/kde/kf6-kservice/` | ✅ Builds | Depends on kf6-kdbusaddons |
| **kf6-kglobalaccel** | `local/recipes/kde/kf6-kglobalaccel/` | ✅ Builds | Depends on kf6-kdbusaddons |
| **Session activation scaffolds** | `local/recipes/system/redbear-dbus-services/` | ✅ Staged | Session `.service` files now cover kded6, kglobalaccel, ActivityManager, JobViewServer, ksmserver, notifications, and StatusNotifierWatcher |
| **KWin (D-Bus)** | `local/recipes/kde/kwin/` | ✅ USE_DBUS=ON | Registers `org.kde.KWin` on session bus |
### 3.2 What Exists But Is Incomplete
@@ -132,7 +135,7 @@ specific schemes it needs. This keeps the architecture honest and avoids a leaky
| **Polkit** | `org.freedesktop.PolicyKit1` | Authorization scaffold (always-permit) | KAuth |
| **UPower** | `org.freedesktop.UPower` | Provisional ACPI-backed power service; current backing power surface is still incomplete | kf6-solid, PowerDevil |
| **UDisks2** | `org.freedesktop.UDisks2` | Bounded real `disk.*` / partition enumeration | kf6-solid |
| **D-Bus service files** | `/usr/share/dbus-1/` | Activation is staged and shipped, but only for the current scaffold services | All D-Bus services |
| **D-Bus service files** | `/usr/share/dbus-1/` | Activation is staged and shipped for the current scaffold services plus bounded KDE session daemons (`kded6`, `kglobalaccel`, ActivityManager, JobViewServer, ksmserver) | All D-Bus services |
| **D-Bus policy files** | `/etc/dbus-1/` | Policy is staged and shipped for the current scaffold services | All D-Bus services |
| **zbus crate marker** | `local/recipes/libs/zbus/` | Build-ordering marker; actual zbus crate is fetched by downstream Cargo builds | Future Rust D-Bus services |
@@ -166,8 +169,8 @@ from `openRestricted()` — meaning it can start but cannot manage real devices.
```
plasma-workspace needs:
org.kde.KWin ✅ KWin provides
org.kde.kglobalaccel ❌ NEEDS SERVICE — kf6-kglobalaccel daemon
org.kde.kded6 ❌ NEEDS SERVICE — KDE daemon
org.kde.kglobalaccel ⚠️ activation file staged — daemon/runtime proof still needed
org.kde.kded6 ⚠️ activation file staged — daemon/runtime proof still needed
org.kde.plasmashell ✅ plasmashell provides (self-register)
org.kde.osdService ✅ plasmashell provides
org.freedesktop.Notifications ✅ scaffold exists — current daemon logs to stderr only
@@ -181,10 +184,10 @@ Complete Plasma needs (after re-enabling disabled components):
org.freedesktop.UDisks2 ✅ bounded real enumeration exists — still needs runtime validation for kf6-solid
org.freedesktop.NetworkManager ⏸️ DEFERRED — Red Bear OS uses redbear-netctl for now
org.freedesktop.PolicyKit1 ⚠️ scaffold exists — KAuth still blocked on missing PolkitQt6-1 packaging
org.freedesktop.StatusNotifierWatcher ❌ NEEDS SERVICE — system tray
org.kde.JobViewServer ❌ NEEDS SERVICE — job progress tracking
org.kde.ksmserver ❌ NEEDS SERVICE — session management
org.kde.ActivityManager ❌ NEEDS SERVICE — KDE activities
org.freedesktop.StatusNotifierWatcher ✅ activation file staged — runtime watcher still needs broader desktop proof
org.kde.JobViewServer ⚠️ activation file staged — kuiserver binary/runtime still open
org.kde.ksmserver ⚠️ activation file staged — session manager binary/runtime still open
org.kde.ActivityManager ⚠️ activation file staged — activity manager binary/runtime still open
org.freedesktop.ScreenSaver ❌ NEEDS SERVICE — screen locking
```
@@ -195,7 +198,7 @@ Complete Plasma needs (after re-enabling disabled components):
| `zbus` recipe is only a marker | Build-ordering marker exists; actual Rust crate comes from downstream Cargo resolution |
| D-Bus service activation is scaffolded | `/usr/share/dbus-1/system-services/` and `session-services/` are staged for current services |
| D-Bus policy configuration is scaffolded | `/etc/dbus-1/system.d/` XML policy files are staged for current services |
| Activation coverage is still partial | Only current scaffold services have `.service` files and policies |
| Activation coverage is still partial | Core system services and several KDE session daemons now have `.service` files, but screen-lock/session-polish services are still missing |
| kf6-knotifications now D-Bus enabled | Enabled against a minimal notification daemon scaffold |
| kf6-solid D-Bus disabled | Must re-enable after UPower/udisks2 backends exist |
| kf6-kio D-Bus disabled | Must re-enable for full KIO functionality |
@@ -218,8 +221,11 @@ Complete Plasma needs (after re-enabling disabled components):
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ org.kde.KWin (KWin self-registers) │ │
│ │ org.kde.plasmashell (plasmashell self-registers) │ │
│ │ org.kde.kglobalaccel (kglobalaccel daemon) │ │
│ │ org.kde.kglobalaccel (kglobalaccel daemon) │ │
│ │ org.kde.kded6 (KDE daemon) │ │
│ │ org.kde.ActivityManager (kactivitymanagerd scaffold) │ │
│ │ org.kde.JobViewServer (kuiserver scaffold) │ │
│ │ org.kde.ksmserver (ksmserver scaffold) │ │
│ │ org.freedesktop.Notifications (redbear-notifications) │ │
│ │ org.freedesktop.StatusNotifierWatcher (redbear-statusnotifier)│ │
│ └──────────────────────────────────────────────────────────────────┘ │
@@ -301,8 +307,13 @@ device access control, session management, and power signaling.
| Interface | Method/Signal | Signature | Description |
|-----------|--------------|-----------|-------------|
| `org.freedesktop.login1.Manager` | `GetSession` | `s → o` | Returns session object path by ID |
| | `GetUser` | `u → o` | Returns the current user object path for the bounded active session owner |
| | `GetUserByPID` | `u → o` | Returns the current user object path for the bounded active session surface |
| | `ListSessions` | `→ a(susso)` | Lists all active sessions |
| | `GetSeat` | `s → o` | Returns seat object path |
| | `ActivateSessionOnSeat` | `ss → ` | Marks the bounded session active on the requested seat |
| | `LockSessions` / `UnlockSessions` | `→ ` | Updates the bounded session lock hint for KDE session plumbing |
| | `TerminateUser` | `u → ` | Marks the bounded active user session closing |
| | signal `PrepareForSleep` | `b` | Emitted before/after sleep (false=resume, true=suspend) |
| | signal `PrepareForShutdown` | `b` | Emitted before/after shutdown |
| `org.freedesktop.DBus.Properties` | `Get` | `ss → v` | Property access |
@@ -408,6 +419,21 @@ org.kde.kded6.service:
Name=org.kde.kded6
Exec=/usr/bin/kded6
org.kde.ActivityManager.service:
[D-BUS Service]
Name=org.kde.ActivityManager
Exec=/usr/bin/kactivitymanagerd
org.kde.JobViewServer.service:
[D-BUS Service]
Name=org.kde.JobViewServer
Exec=/usr/bin/kuiserver
org.kde.ksmserver.service:
[D-BUS Service]
Name=org.kde.ksmserver
Exec=/usr/bin/ksmserver
org.freedesktop.Notifications.service:
[D-BUS Service]
Name=org.freedesktop.Notifications
@@ -427,6 +453,9 @@ local/recipes/system/redbear-dbus-services/
├── session-services/
│ ├── org.kde.kglobalaccel.service
│ ├── org.kde.kded6.service
│ ├── org.kde.ActivityManager.service
│ ├── org.kde.JobViewServer.service
│ ├── org.kde.ksmserver.service
│ └── org.freedesktop.Notifications.service
├── system.d/
│ ├── org.freedesktop.login1.conf