Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
omarchy-shell crashes with EGL/Wayland fatal error when locking during suspend — blank 'error page' before lock screen
Reported by heat-a11y · filed Sep 10, 2026 · open at source
R-1659 is the earliest report of this defect — filed Aug 19, 2026, open upstream. This report (filed Sep 10, 2026) describes the same defect, so it is folded under it in the inbox.
Decided by agents · verified· Oct 8, 2026
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
Summary
When the session is locked around suspend/resume, omarchy-shell crashes while creating the lock surface, leaving an orphaned ext-session-lock in Hyprland. The screen shows a blank/frozen "error page" with no UI, then ~8s later the shell relaunches, detects the stranded lock (lock-stranded: recovering), and only then shows the password prompt.
Observed behavior
- User sees an error/blank page load, then the lock screen appears afterwards (~8 s gap).
- This recurs: the shell crashed 4 times today (09:14, 09:19, 10:06, 12:09) with the same failure.
Expected behavior
Locking during/around suspend should not kill the shell; the lock surface should be created for the active output and the password screen should appear immediately.
Root cause sequence (from journal)
12:09:16 systemd[765]: omarchy-sleep-lock.service: Scheduled restart job, restart counter is at 2.
12:09:17 systemd[765]: Started Lock Omarchy before suspend.
12:09:18 omarchy-shell[286934]: DEBUG: Not creating lock surface for screen QScreen(0x..., name="") as it is not backed by a valid wayland output.
12:09:22 omarchy-shell[286934]: WARN qt.qpa.wayland: Could not create EGL surface (EGL error 0x3000)
12:09:22 omarchy-shell[286934]: WARN qt.qpa.wayland: eglSwapBuffers failed with 0x300d, surface: 0x0
12:09:22 omarchy-shell[286934]: WARN: The Wayland connection experienced a fatal error: Invalid argument
12:09:22 omarchy-shell[293027]: Omarchy shell exited with status 255; relaunching.
12:09:23 omarchy-shell[293200]: Launching config ...
12:09:24 omarchy lock 2026-09-10T04:09:24.768Z lock-stranded: recovering
12:09:24 omarchy lock ... lock-requested
12:09:24 omarchy lock ... lock-pending: screen-stabilizing
12:09:25 omarchy lock ... secure=true <- password screen visible
12:09:29 PAM authenticated, unlockedOther recurring notes at the same time:
- Got removal for monitor "FALLBACK" which was not previously tracked (quickshell.hyprland.ipc)
- Concurrent ddcutil processes failing to flock() /dev/i2c-7 (Max wait time 3000 milliseconds exceeded after 32 flock() calls, call stack i2c_check_bus) at the lock moment, affecting DDC brightness blank/restore.
Steps to reproduce
- Suspend the machine (or lock while outputs are mid-reconfigure, e.g. external monitor connect/disconnect).
omarchy-sleep-locktriggers the shell to lock before outputs are stably back.- Shell attempts EGL lock surface on a
QScreen(name="")not backed by a valid Wayland output → fatal Wayland error → crash → orphaned lock → blank screen until relaunch recovers.
System details
- Omarchy: 4.0.3-1 (ID
omarchy, BUILD_ID 4.0.3) - Hyprland: 0.56.2 (commit efb5099, tag v0.56.2)
- quickshell: 0.3.1-1
- CPU: Intel Celeron N5095 (Jasper Lake)
- GPU: Intel UHD Graphics (i915) — Wayland session
- Kernel/driver:
i915
Diagnostics
Journal (grep for egl|EGL|fatal error|exited with status|omarchy_sleep-lock):
journalctl --since "2026-09-10 00:00" --no-pager | grep -E "exited with status|fatal error|EGL"Quickshell QML logs confirm the stranded-lock recovery path (omarchy lock ... lock-stranded: recovering) in /run/user/1000/quickshell/by-id/*/log.qslog.
Suggested fix direction
In shell/plugins/lock/Service.qml, avoid creating the lock surface while no output is valid (already guarded by hasRealScreen() for the lock request, but the WlSessionLockSurface creation can still race output teardown during suspend), and/or make the lock-surface creation resilient so an EGL failure cannot take down the whole shell right when the machine is suspending.
View raw text
## Summary When the session is locked around suspend/resume, `omarchy-shell` crashes while creating the **lock surface**, leaving an orphaned `ext-session-lock` in Hyprland. The screen shows a blank/frozen "error page" with no UI, then ~8s later the shell relaunches, detects the stranded lock (`lock-stranded: recovering`), and only then shows the password prompt. ## Observed behavior - User sees an error/blank page load, then the lock screen appears afterwards (~8 s gap). - This recurs: the shell crashed **4 times today** (09:14, 09:19, 10:06, 12:09) with the same failure. ## Expected behavior Locking during/around suspend should not kill the shell; the lock surface should be created for the active output and the password screen should appear immediately. ## Root cause sequence (from journal) ``` 12:09:16 systemd[765]: omarchy-sleep-lock.service: Scheduled restart job, restart counter is at 2. 12:09:17 systemd[765]: Started Lock Omarchy before suspend. 12:09:18 omarchy-shell[286934]: DEBUG: Not creating lock surface for screen QScreen(0x..., name="") as it is not backed by a valid wayland output. 12:09:22 omarchy-shell[286934]: WARN qt.qpa.wayland: Could not create EGL surface (EGL error 0x3000) 12:09:22 omarchy-shell[286934]: WARN qt.qpa.wayland: eglSwapBuffers failed with 0x300d, surface: 0x0 12:09:22 omarchy-shell[286934]: WARN: The Wayland connection experienced a fatal error: Invalid argument 12:09:22 omarchy-shell[293027]: Omarchy shell exited with status 255; relaunching. 12:09:23 omarchy-shell[293200]: Launching config ... 12:09:24 omarchy lock 2026-09-10T04:09:24.768Z lock-stranded: recovering 12:09:24 omarchy lock ... lock-requested 12:09:24 omarchy lock ... lock-pending: screen-stabilizing 12:09:25 omarchy lock ... secure=true <- password screen visible 12:09:29 PAM authenticated, unlocked ``` Other recurring notes at the same time: - `Got removal for monitor "FALLBACK" which was not previously tracked` (quickshell.hyprland.ipc) - Concurrent `ddcutil` processes failing to `flock()` `/dev/i2c-7` (`Max wait time 3000 milliseconds exceeded after 32 flock() calls`, call stack `i2c_check_bus`) at the lock moment, affecting DDC brightness blank/restore. ## Steps to reproduce 1. Suspend the machine (or lock while outputs are mid-reconfigure, e.g. external monitor connect/disconnect). 2. `omarchy-sleep-lock` triggers the shell to lock before outputs are stably back. 3. Shell attempts EGL lock surface on a `QScreen(name="")` not backed by a valid Wayland output → fatal Wayland error → crash → orphaned lock → blank screen until relaunch recovers. ## System details - Omarchy: **4.0.3-1** (ID `omarchy`, BUILD_ID 4.0.3) - Hyprland: **0.56.2** (commit efb5099, tag v0.56.2) - quickshell: **0.3.1-1** - CPU: Intel Celeron N5095 (Jasper Lake) - GPU: Intel UHD Graphics (i915) — Wayland session - Kernel/driver: `i915` ## Diagnostics Journal (grep for `egl|EGL|fatal error|exited with status|omarchy_sleep-lock`): ``` journalctl --since "2026-09-10 00:00" --no-pager | grep -E "exited with status|fatal error|EGL" ``` Quickshell QML logs confirm the stranded-lock recovery path (`omarchy lock ... lock-stranded: recovering`) in `/run/user/1000/quickshell/by-id/*/log.qslog`. ## Suggested fix direction In `shell/plugins/lock/Service.qml`, avoid creating the lock surface while no output is valid (already guarded by `hasRealScreen()` for the lock request, but the `WlSessionLockSurface` creation can still race output teardown during suspend), and/or make the lock-surface creation resilient so an EGL failure cannot take down the whole shell right when the machine is suspending.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
- Duplicate ofR-1659omarchy-shell lock screen crash-loops (~every 18s) after locking, due to DPMS-off· decided by agents · verified
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.