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-310GitHub issuePublicFixed

Quickshell fatal abort on screen blank / DPMS disable when no outputs remain

Reported by NezbiT · filed Sep 19, 2026 · open at source

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

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?
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

Quickshell fatal abort on screen blank / DPMS disable when no outputs remainrevision 1 · captured 2026-09-28 21:23 UTC via poll

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

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-1408Decided by agents · verified · 2026-10-09 16:19 UTC