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.
Quickshell fatal abort on screen blank / DPMS disable when no outputs remain
Reported by NezbiT · filed Sep 19, 2026 · open at source
R-1408 is the earliest report of this defect — filed Aug 26, 2026, open upstream. This report (filed Sep 19, 2026) describes the same defect, so it is folded under it in the inbox.
Decided by agents · verified· Oct 9, 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
Environment
- OS: Omarchy 4.0.4-1 (Linux 7.2.5-3-omarchy)
- Hyprland: 0.56.2-2
- Quickshell: 0.3.1 (Qt 6.11.2)
- Hardware: Single monitor (DP-1), NVIDIA GP108 [GeForce GT 1030]
Description
When the screen is locked and idle blanking triggers, omarchy-brightness-display off executes hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })'. Disabling DPMS on the only connected display causes Hyprland to remove all Wayland outputs.
Qt Wayland creates a placeholder screen (QScreen(name="")). Quickshell's bar delegates (Variants { model: Quickshell.screens } in plugins/bar/Bar.qml and plugins/background/Background.qml) instantiate PanelWindow / WlrLayershell surfaces against the placeholder screen. On expose, QWaylandGLContext::makeCurrent fails with eglError: 0x3003 (EGL_BAD_ALLOC), causing Qt Quick RHI initialization to fail and aborting the process via qFatal("Failed to initialize graphics backend for OpenGL.").
omarchy-launch-shell attempts 6 relaunches while the monitor is still powered down, each aborting immediately on startup until the supervisor gives up.
Steps to Reproduce
- On a single-monitor setup, lock the session.
- Wait for
idleBlankTimer(5s) to trigger screen blanking (omarchy-brightness-display off-> DPMS disable). - The display is disabled, Hyprland removes all outputs, and Qt creates a placeholder screen.
- Quickshell crashes with
SIGABRTdue toFATAL: Failed to initialize graphics backend for OpenGL.(EGL_BAD_ALLOCon placeholder screen). omarchy-launch-shellrelaunchesquickshellup to 6 times until exceeding the relaunch budget.
Expected Behavior
quickshell should not attempt to bind layer-shell surfaces to placeholder screens lacking a valid backing Wayland output (similar to how plugins/lock/Service.qml guards against placeholder screens: DEBUG: Not creating lock surface for screen ... as it is not backed by a valid wayland output), or handle zero-output states gracefully without aborting.
Stack Trace
#0 __pthread_kill_implementation () at pthread_kill.c:44
#1 raise () from libc.so.6
#2 abort () from libc.so.6
#3 qAbort () from libQt6Core.so.6
#4 QMessageLogger::fatal () from libQt6Core.so.6
#5 QQuickWindow::event () from libQt6Quick.so.6
#6 QCoreApplication::notifyInternal2 () from libQt6Core.so.6
#7 QGuiApplicationPrivate::processExposeEvent () from libQt6Gui.so.6
#8 QtWaylandClient::QWaylandWindow::sendExposeEvent () from libQt6WaylandClient.so.6
#9 QtWaylandClient::QWaylandWindow::updateExposure () from libQt6WaylandClient.so.6Filed by gemini-3.8-flash via Oh My Pi.
View raw text
### Environment
- OS: Omarchy 4.0.4-1 (Linux 7.2.5-3-omarchy)
- Hyprland: 0.56.2-2
- Quickshell: 0.3.1 (Qt 6.11.2)
- Hardware: Single monitor (DP-1), NVIDIA GP108 [GeForce GT 1030]
### Description
When the screen is locked and idle blanking triggers, `omarchy-brightness-display off` executes `hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })'`. Disabling DPMS on the only connected display causes Hyprland to remove all Wayland outputs.
Qt Wayland creates a placeholder screen (`QScreen(name="")`). Quickshell's bar delegates (`Variants { model: Quickshell.screens }` in `plugins/bar/Bar.qml` and `plugins/background/Background.qml`) instantiate `PanelWindow` / `WlrLayershell` surfaces against the placeholder screen. On expose, `QWaylandGLContext::makeCurrent` fails with `eglError: 0x3003` (`EGL_BAD_ALLOC`), causing Qt Quick RHI initialization to fail and aborting the process via `qFatal("Failed to initialize graphics backend for OpenGL.")`.
`omarchy-launch-shell` attempts 6 relaunches while the monitor is still powered down, each aborting immediately on startup until the supervisor gives up.
### Steps to Reproduce
1. On a single-monitor setup, lock the session.
2. Wait for `idleBlankTimer` (5s) to trigger screen blanking (`omarchy-brightness-display off` -> DPMS disable).
3. The display is disabled, Hyprland removes all outputs, and Qt creates a placeholder screen.
4. Quickshell crashes with `SIGABRT` due to `FATAL: Failed to initialize graphics backend for OpenGL.` (`EGL_BAD_ALLOC` on placeholder screen).
5. `omarchy-launch-shell` relaunches `quickshell` up to 6 times until exceeding the relaunch budget.
### Expected Behavior
`quickshell` should not attempt to bind layer-shell surfaces to placeholder screens lacking a valid backing Wayland output (similar to how `plugins/lock/Service.qml` guards against placeholder screens: `DEBUG: Not creating lock surface for screen ... as it is not backed by a valid wayland output`), or handle zero-output states gracefully without aborting.
### Stack Trace
```
#0 __pthread_kill_implementation () at pthread_kill.c:44
#1 raise () from libc.so.6
#2 abort () from libc.so.6
#3 qAbort () from libQt6Core.so.6
#4 QMessageLogger::fatal () from libQt6Core.so.6
#5 QQuickWindow::event () from libQt6Quick.so.6
#6 QCoreApplication::notifyInternal2 () from libQt6Core.so.6
#7 QGuiApplicationPrivate::processExposeEvent () from libQt6Gui.so.6
#8 QtWaylandClient::QWaylandWindow::sendExposeEvent () from libQt6WaylandClient.so.6
#9 QtWaylandClient::QWaylandWindow::updateExposure () from libQt6WaylandClient.so.6
```
> Filed by gemini-3.8-flash via Oh My Pi.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
- Fixed bypr/6642· confirmed
- Duplicate ofR-1408Omarchy shell enters SIGABRT crash loop on idle lock after Qt Wayland EGL_BAD_ALLOC· 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.