diff --git a/config/redbear-desktop.toml b/config/redbear-desktop.toml index 6faa723f..f3319e20 100644 --- a/config/redbear-desktop.toml +++ b/config/redbear-desktop.toml @@ -76,7 +76,7 @@ data = """ [unit] description = "Console terminals" requires_weak = [ - "20_display.service", + "29_activate_console.service", ] [service] @@ -97,7 +97,7 @@ requires_weak = [ [service] cmd = "inputd" args = ["-A", "3"] -type = "oneshot" +type = "oneshot_async" """ [[files]] @@ -106,7 +106,7 @@ data = """ [unit] description = "Debug console" requires_weak = [ - "20_display.service", + "29_activate_console.service", ] [service] diff --git a/config/redbear-greeter-services.toml b/config/redbear-greeter-services.toml index 4acbbb3b..afcae581 100644 --- a/config/redbear-greeter-services.toml +++ b/config/redbear-greeter-services.toml @@ -75,8 +75,9 @@ path = "/usr/lib/init.d/30_console.service" data = """ [unit] description = "Console terminals" +boot_essential = true requires_weak = [ - "20_greeter.service", + "29_activate_console.service", ] [service] @@ -89,15 +90,16 @@ type = "oneshot_async" path = "/usr/lib/init.d/29_activate_console.service" data = """ [unit] -description = "Activate display VT" +description = "Activate fallback console VT" +boot_essential = true requires_weak = [ - "20_greeter.service", + "05_boot-essential.target", ] [service] cmd = "inputd" -args = ["-A", "3"] -type = "oneshot" +args = ["-A", "2"] +type = "oneshot_async" """ [[files]] @@ -105,8 +107,9 @@ path = "/usr/lib/init.d/31_debug_console.service" data = """ [unit] description = "Debug console" +boot_essential = true requires_weak = [ - "20_greeter.service", + "29_activate_console.service", ] [service] diff --git a/config/redbear-kde.toml b/config/redbear-kde.toml index 2dd70805..b8695d1b 100644 --- a/config/redbear-kde.toml +++ b/config/redbear-kde.toml @@ -264,7 +264,7 @@ data = """ [unit] description = "Console terminals" requires_weak = [ - "20_display.service", + "29_activate_console.service", ] [service] @@ -285,7 +285,7 @@ requires_weak = [ [service] cmd = "inputd" args = ["-A", "3"] -type = "oneshot" +type = "oneshot_async" """ [[files]] @@ -294,7 +294,7 @@ data = """ [unit] description = "Debug console" requires_weak = [ - "20_display.service", + "29_activate_console.service", ] [service] diff --git a/config/wayland.toml b/config/wayland.toml index e85903f6..03a0edfe 100644 --- a/config/wayland.toml +++ b/config/wayland.toml @@ -122,7 +122,7 @@ data = """ [unit] description = "Console terminals" requires_weak = [ - "20_display.service", + "29_activate_console.service", ] [service] @@ -143,7 +143,7 @@ requires_weak = [ [service] cmd = "inputd" args = ["-A", "3"] -type = "oneshot" +type = "oneshot_async" """ [[files]] @@ -152,7 +152,7 @@ data = """ [unit] description = "Debug console" requires_weak = [ - "20_display.service", + "29_activate_console.service", ] [service] diff --git a/local/docs/DESKTOP-STACK-CURRENT-STATUS.md b/local/docs/DESKTOP-STACK-CURRENT-STATUS.md index ef7bb0e1..2a7337fb 100644 --- a/local/docs/DESKTOP-STACK-CURRENT-STATUS.md +++ b/local/docs/DESKTOP-STACK-CURRENT-STATUS.md @@ -57,6 +57,7 @@ greeter/auth/session-launch stack on the `redbear-full` desktop path. | 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 | @@ -81,7 +82,7 @@ greeter/auth/session-launch stack on the `redbear-full` desktop path. ### `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-session` remains staged only as a bounded helper, not the active `20_display.service` owner on this target. +- **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-session` remains staged only as a bounded helper, not the active `20_display.service` owner on this target. TUI fallback (`30_console.service`/`31_debug_console.service`) is now triggered through `29_activate_console.service` and 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. @@ -94,7 +95,7 @@ greeter/auth/session-launch stack on the `redbear-full` desktop path. ### `redbear-mini` - **Role:** Minimal non-desktop target -- **Current truth:** No desktop/graphics path; recovery and non-desktop integration surface only +- **Current truth:** No desktop/graphics path; recovery and non-desktop integration surface only. TUI recovery is bound to VT activation through `29_activate_console.service` followed by `30_console.service`/`31_debug_console.service`. - **Use for:** Minimal runtime bring-up, subsystem validation, and non-desktop packaging checks ### `redbear-live-mini` diff --git a/local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md b/local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md index 15b647ff..9d7014cd 100644 --- a/local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md +++ b/local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md @@ -119,7 +119,7 @@ Rules: | authentication daemon | `local/recipes/system/redbear-authd/` | ✅ builds, experimental | Local-user auth boundary with `/etc/passwd` / `/etc/shadow` / `/etc/group` parsing plus SHA-crypt and Argon2 verification | | session launcher boundary | `local/recipes/system/redbear-session-launch/` | ✅ builds, experimental | User-session bootstrap with bounded environment/runtime-dir setup | | greeter daemon scaffold | `local/recipes/system/redbear-greeter/` | ✅ builds, experimental | Root-owned greeter orchestrator, socket protocol, bounded restart policy | -| greeter config fragment | `config/redbear-greeter-services.toml` | ✅ builds, experimental | Adds `19_redbear-authd.service`, `20_greeter.service`, compatibility `20_display.service`, and fallback console dependencies | +| greeter config fragment | `config/redbear-greeter-services.toml` | ✅ builds, experimental | Adds `19_redbear-authd.service`, `20_greeter.service`, compatibility `20_display.service`, and fallback console services that are no longer tied to greeter success | | bounded validation launcher | `/usr/bin/redbear-validation-session` | ✅ retained helper | Still available for older bounded validation flows, but no longer the primary `redbear-full` display-service path | | branding assets | `local/Assets/images/` | ✅ present | `Red Bear OS loading background.png`, `Red Bear OS icon.png` | @@ -148,6 +148,20 @@ greeter slice**: the old `kwin_wayland` crash path has been eliminated, and curr clean `No suitable DRM devices have been found` exits instead. That means the follow-on work has shifted to the parent desktop/Wayland/runtime plans rather than to missing core greeter/auth/session-boundary pieces here. +### 4.5 TUI Prompt Reliability Correction + +The non-appearance of TUI fallback prompts in some boot paths was traced to startup graph coupling: + +- `29_activate_console.service` was configured as `oneshot` in desktop/graphics variants, which adds unnecessary synchronization pressure on startup. +- `30_console.service` and `31_debug_console.service` depended on `20_greeter.service`, so greeter/auth startup risk could suppress fallback consoles. +- `minimal` variants had `30_console` and `31_debug_console` as separate graph roots, which could start before VT activation and race console ownership. + +Mitigations now in place: + +- `29_activate_console.service` in the affected graphics variants was moved to `oneshot_async` (it executes quickly and returns after VT switch). +- `30_console.service` and `31_debug_console.service` now depend on `29_activate_console.service` where they are explicit console units (instead of being tied to greeter/auth flow). +- The VT3 activation path is now the graph root: `20_display.service` → `29_activate_console.service` (TUI fallback units). Greeter startup remains independent of fallback text console availability. + Future work beyond this plan should continue **without** replacing the current seat/session substrate and without removing existing console recovery paths. @@ -298,10 +312,11 @@ boot → 12_dbus.service (system D-Bus) → 13_redbear-sessiond.service (login1 subset) → 13_seatd.service (seat backend) - → 20_greeter.service (start redbear-greeterd on VT3) + → 20_display.service (VT3 session compatibility layer) → 29_activate_console.service (inputd -A 3) - → 30_console.service (fallback getty 2 on VT2) - → 31_debug_console.service (debug getty) + → 30_console.service (fallback getty on VT2) + → 31_debug_console.service (fallback debug getty) + → 20_greeter.service (start redbear-greeterd on VT3) → redbear-greeter-ui shows login surface on VT3 → successful login → redbear-session-launch