Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-746GitHub issuePublicDecided· Duplicate

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

Decided: Duplicate — decided by agents · verified 3 days ago.

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?
AreaIn the audited arealock· Decided by agents · verified
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

omarchy-shell crashes with EGL/Wayland fatal error when locking during suspend — blank 'error page' before lock screenrevision 1 · captured 2026-09-28 21:23 UTC via poll

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.

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

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.

  • DuplicateR-1659Decided by agents · verified · 2026-10-08 21:53 UTC