Skip to content

fix(gui): default to Slint software renderer so launch survives RDP / no-GL2.0#88

Merged
Kyle-Falconer merged 1 commit into
mainfrom
fix/gui-rdp-software-renderer
Jun 25, 2026
Merged

fix(gui): default to Slint software renderer so launch survives RDP / no-GL2.0#88
Kyle-Falconer merged 1 commit into
mainfrom
fix/gui-rdp-software-renderer

Conversation

@Kyle-Falconer

Copy link
Copy Markdown
Member

Problem

The shipped 0.1.1 GUI crashes immediately on launch under Remote Desktop (reproduced on this machine), and the same path will fail on VMs / headless / bad-GPU hosts.

Root cause: Slint's default femtovg renderer requires OpenGL 2.0, but RDP sessions expose only legacy software OpenGL 1.1. So MainWindow::new() returns Err("Failed to initialize OpenGL driver: Could not locate glCreateShader symbol"), main returns Err, and the GUI-subsystem process dies before any window shows — no visible error, reads as an instant crash.

Confirmed by forcing SLINT_BACKEND=winit-software on the installed 0.1.1 binary → it launches fine. origin/main's janitor-gui/src/main.rs is unchanged since the v0.1.1 tag and has no backend handling, so the bug is live on main HEAD.

Fix

  • Default SLINT_BACKEND=winit-software when the user hasn't set it (top of main(), before MainWindow::new()). GPU escape hatch preserved: SLINT_BACKEND=winit-femtovg.
  • Keep renderer-software an explicit slint feature so a future default-features trim can't silently reintroduce the crash.

Chose software-default over RDP-detection deliberately: it also covers VMs/headless/bad-driver machines with less logic, and this masked-matrix table UI gains nothing from GPU rendering.

Verification

Built and smoke-launched on this branch under an active RDP session with SLINT_BACKEND unset (JANITOR_MOCK=1): the window stays up. The failing condition no longer crashes.

Notes

  • No tests touched — janitor-gui is the thin, untested-by-design view (ADR 0003); the change is in main() which tests don't exercise.
  • Hotfix-shaped: suggest cutting 0.1.2 off main after merge so RDP/VM users get an unbroken installer. A startup error message box (so future GUI-subsystem init failures are visible) is worth a follow-up but is out of scope here.

🤖 Generated with Claude Code

… no-GL2.0

The shipped 0.1.1 GUI crashes immediately under Remote Desktop (and on VMs /
headless / bad-GPU machines): Slint's default femtovg renderer needs OpenGL
2.0, but those environments expose only legacy software GL 1.1, so
`MainWindow::new()` fails with "Could not locate glCreateShader symbol",
`main` returns Err, and the GUI-subsystem process dies before any window
shows — no visible error, just an instant crash.

Default `SLINT_BACKEND=winit-software` when unset (escape hatch:
`SLINT_BACKEND=winit-femtovg`). This masked-matrix table UI gains nothing
from GPU rendering, and a software default covers RDP/VM/driver cases with
less logic than RDP-detection. Keep `renderer-software` an explicit slint
feature so a future default-features trim can't silently reintroduce the crash.

Verified under an RDP session: the window launches with no SLINT_BACKEND set.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Kyle-Falconer Kyle-Falconer merged commit ba8d856 into main Jun 25, 2026
1 check passed
@Kyle-Falconer Kyle-Falconer deleted the fix/gui-rdp-software-renderer branch June 25, 2026 20:19
Kyle-Falconer added a commit that referenced this pull request Jun 25, 2026
Cuts 0.1.2 to ship the RDP / no-GL2.0 launch fix (#88, 18be430): the GUI now
defaults to Slint's software renderer, so the installer no longer crashes on
launch under Remote Desktop / VMs / headless GPU. A pushed v0.1.2 tag drives
the draft release (verify-version requires tag == janitor-gui crate version).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant