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.
Lock screen blanking crashes the shell on single-monitor setups, causing a lock/relaunch loop
Reported by ContentAid · filed Sep 16, 2026 · open at source
R-1659 is the earliest report of this defect — filed Aug 19, 2026, open upstream. This report (filed Sep 16, 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
Summary
On a single-monitor setup, omarchy-brightness-display off DPMS-disables the only output. Quickshell cannot survive the output count reaching zero while an ext-session-lock is held, so the shell crashes and relaunches. The relaunched shell recovers a lock it does not own, re-locks, and blanks again five seconds later. This loops for as long as the session stays locked, and each relaunch repaints the bar and panels — which looks like the display flashing.
Environment
- Omarchy 4.0.0.alpha
- Hyprland 0.56.2
- Single DisplayPort monitor (Samsung LS24AG32x), NVIDIA RTX 5060 Ti, driver 610.57.04
- Lock plugin:
omarchy.lock(the third-partylock-explorerfork is affected identically — it is a clone ofomarchy.lockand inherits the same call)
The loop
plugins/lock/Service.qml:411 runs:
command: ["bash", "-c", "omarchy-brightness-keyboard off; omarchy-brightness-display off"]omarchy-brightness-display off dispatches hl.dsp.dpms({ action = "disable" }), which takes the only output down. Journal from one cycle:
13:24:44 qt.qpa.wayland: There are no outputs - creating placeholder screen
13:24:46 quickshell.hyprland.ipc: Got removal for monitor "FALLBACK" which was not previously tracked.
13:24:46 WARN: The Wayland connection experienced a fatal error: Invalid argument
13:24:46 Omarchy shell exited with status 255; relaunching.
13:24:48 omarchy lock ... lock-stranded: recovering
13:24:48 omarchy lock ... lock-requested
13:24:48 omarchy lock ... secure=trueFive seconds after secure=true the blank timer fires again and the cycle repeats, roughly every 67 seconds.
Measured impact
One locked session, 13:16 to 13:34 (18 minutes):
- 13 shell relaunches (
exited with status 255) - 12
lock-stranded: recoveringevents - 49
drm: Connector DP-1 disconnectedin the Hyprland log - 52 modesets
The lock is the variable, not the blank
Running the same omarchy-brightness-display off, waiting, then on, with the session unlocked:
- 3-second blank: shell PID unchanged, no fatal error
- 12-second blank: shell PID unchanged, no fatal error
The crash only reproduces while a session lock is held.
Steps to reproduce
- Single monitor, no second output.
- Lock the session (
omarchy-system-lock). - Wait past the blank timer and leave it locked for two minutes.
journalctl --user -b | grep -cE 'lock-stranded|exited with status 255'— non-zero.
Suggested fix
Do not cut the output while the session is locked. On a DDC-capable external monitor, dimming the backlight to its minimum gives a dark panel while keeping the output alive, so the shell survives. omarchy-hyprland-session-locked and omarchy-brightness-display-ddc already exist and are enough to build this inside omarchy-brightness-display's off/on branches, saving and restoring the user's brightness level around the blank.
Locally this took the same four-minute locked session from 3-4 crashes to zero crashes, zero stranded recoveries, and zero new connector disconnects.
I am happy to open a PR if that approach looks right, or if you would rather keep DPMS and guard elsewhere, I can adapt.
View raw text
## Summary
On a single-monitor setup, `omarchy-brightness-display off` DPMS-disables the only output. Quickshell cannot survive the output count reaching zero while an `ext-session-lock` is held, so the shell crashes and relaunches. The relaunched shell recovers a lock it does not own, re-locks, and blanks again five seconds later. This loops for as long as the session stays locked, and each relaunch repaints the bar and panels — which looks like the display flashing.
## Environment
- Omarchy 4.0.0.alpha
- Hyprland 0.56.2
- Single DisplayPort monitor (Samsung LS24AG32x), NVIDIA RTX 5060 Ti, driver 610.57.04
- Lock plugin: `omarchy.lock` (the third-party `lock-explorer` fork is affected identically — it is a clone of `omarchy.lock` and inherits the same call)
## The loop
`plugins/lock/Service.qml:411` runs:
```qml
command: ["bash", "-c", "omarchy-brightness-keyboard off; omarchy-brightness-display off"]
```
`omarchy-brightness-display off` dispatches `hl.dsp.dpms({ action = "disable" })`, which takes the only output down. Journal from one cycle:
```
13:24:44 qt.qpa.wayland: There are no outputs - creating placeholder screen
13:24:46 quickshell.hyprland.ipc: Got removal for monitor "FALLBACK" which was not previously tracked.
13:24:46 WARN: The Wayland connection experienced a fatal error: Invalid argument
13:24:46 Omarchy shell exited with status 255; relaunching.
13:24:48 omarchy lock ... lock-stranded: recovering
13:24:48 omarchy lock ... lock-requested
13:24:48 omarchy lock ... secure=true
```
Five seconds after `secure=true` the blank timer fires again and the cycle repeats, roughly every 67 seconds.
## Measured impact
One locked session, 13:16 to 13:34 (18 minutes):
- 13 shell relaunches (`exited with status 255`)
- 12 `lock-stranded: recovering` events
- 49 `drm: Connector DP-1 disconnected` in the Hyprland log
- 52 modesets
## The lock is the variable, not the blank
Running the same `omarchy-brightness-display off`, waiting, then `on`, with the session **unlocked**:
- 3-second blank: shell PID unchanged, no fatal error
- 12-second blank: shell PID unchanged, no fatal error
The crash only reproduces while a session lock is held.
## Steps to reproduce
1. Single monitor, no second output.
2. Lock the session (`omarchy-system-lock`).
3. Wait past the blank timer and leave it locked for two minutes.
4. `journalctl --user -b | grep -cE 'lock-stranded|exited with status 255'` — non-zero.
## Suggested fix
Do not cut the output while the session is locked. On a DDC-capable external monitor, dimming the backlight to its minimum gives a dark panel while keeping the output alive, so the shell survives. `omarchy-hyprland-session-locked` and `omarchy-brightness-display-ddc` already exist and are enough to build this inside `omarchy-brightness-display`'s `off`/`on` branches, saving and restoring the user's brightness level around the blank.
Locally this took the same four-minute locked session from 3-4 crashes to zero crashes, zero stranded recoveries, and zero new connector disconnects.
I am happy to open a PR if that approach looks right, or if you would rather keep DPMS and guard elsewhere, I can adapt.
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-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.