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.
Locked session re-arms a hardcoded 5s display-blank timer, so slow displays can never finish waking
Reported by hayarza · filed Aug 29, 2026Closed upstream on 2026-10-09 by the bot omarchybot, as a duplicate (target not recorded).
R-1584 is the earliest report of this defect — filed Aug 22, 2026, open upstream. This report (filed Aug 29, 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
What happened
While the session is locked, waking the display re-arms a hardcoded 5-second
timer that blanks it again. On a display that takes longer than 5 seconds to
re-sync after DPMS off, the wake can never complete: the monitor is blanked
again before it has finished showing the lock screen. Moving the mouse
restarts the same race indefinitely.
From shell/plugins/lock/Service.qml:
Timer {
id: idleBlankTimer
interval: 5000
...
onTriggered: {
...
if (root.lockRequested && !root.authenticatingPassword) root.runBlank()
}
}
function armBlankTimer() {
idleBlankTimer.armedAt = Date.now()
idleBlankTimer.restart()
}
function runWake() {
if (!wakeProcess.running) wakeProcess.running = true
if (lockRequested) armBlankTimer() // every wake restarts the 5s countdown
}
function runBlank() {
if (!blankProcess.running) blankProcess.running = true
}blankProcess runs omarchy-brightness-keyboard off; omarchy-brightness-display off,
and omarchy-brightness-display off issues hyprctl dispatch dpms disable.
DPMS off drops the link entirely, so the monitor enters its own standby and
must renegotiate on wake — commonly several seconds over DisplayPort, longer
than the 5s budget.
The only escape is authenticatingPassword, which suppresses blanking once
the user has started typing. In practice that means the workaround is to type
the password blind, into a lock screen you cannot see.
Expected
Waking a locked session should give the display enough time to actually
become visible. Any of:
- Don't re-arm the blank timer inside
runWake()— let it blank once on
lock and stay awake after a deliberate wake until idle re-triggers.
2. Make the interval configurable (e.g. lock.blank-delay in shell.json)
so slow displays can raise it.
3. Raise the hardcoded default well above typical DP re-sync time.
Steps to reproduce
Requires a display that takes more than ~5s to wake from DPMS off; a
DisplayPort-connected desktop monitor is the usual case.
- Lock the session (
omarchy system lock, or wait foridle.lock). - After ~5s the display blanks and the monitor enters standby.
- Move the mouse. The compositor re-enables DPMS
(misc:mouse_move_enables_dpms is true), and the monitor begins
re-syncing.
4. Before the monitor finishes and shows an image, the 5s timer fires and
blanks it again.
5. Repeat indefinitely. The lock screen is never visible.
6. Type the password blind — it succeeds, confirming the session was
responsive the whole time and only the display was unreachable.
System
- Omarchy 4.0.1-1 (upgraded from 3.x via omarchy-upgrade-to-quattro)
- Kernel 7.1.9-arch1-2
- AMD Ryzen 5 5600X, NVIDIA RTX 2060 (TU106), nvidia-open-dkms
- MSI MP271 on DP-1, 1920x1080@144, scale 1
misc:mouse_move_enables_dpmsandmisc:key_press_enables_dpmsboth true
View raw text
### What happened
While the session is locked, waking the display re-arms a hardcoded 5-second
timer that blanks it again. On a display that takes longer than 5 seconds to
re-sync after DPMS off, the wake can never complete: the monitor is blanked
again before it has finished showing the lock screen. Moving the mouse
restarts the same race indefinitely.
From `shell/plugins/lock/Service.qml`:
```qml
Timer {
id: idleBlankTimer
interval: 5000
...
onTriggered: {
...
if (root.lockRequested && !root.authenticatingPassword) root.runBlank()
}
}
function armBlankTimer() {
idleBlankTimer.armedAt = Date.now()
idleBlankTimer.restart()
}
function runWake() {
if (!wakeProcess.running) wakeProcess.running = true
if (lockRequested) armBlankTimer() // every wake restarts the 5s countdown
}
function runBlank() {
if (!blankProcess.running) blankProcess.running = true
}
```
`blankProcess` runs `omarchy-brightness-keyboard off; omarchy-brightness-display off`,
and `omarchy-brightness-display off` issues `hyprctl dispatch dpms disable`.
DPMS off drops the link entirely, so the monitor enters its own standby and
must renegotiate on wake — commonly several seconds over DisplayPort, longer
than the 5s budget.
The only escape is `authenticatingPassword`, which suppresses blanking once
the user has started typing. In practice that means the workaround is to type
the password blind, into a lock screen you cannot see.
### Expected
Waking a locked session should give the display enough time to actually
become visible. Any of:
1. Don't re-arm the blank timer inside `runWake()` — let it blank once on
lock and stay awake after a deliberate wake until idle re-triggers.
2. Make the interval configurable (e.g. `lock.blank-delay` in shell.json)
so slow displays can raise it.
3. Raise the hardcoded default well above typical DP re-sync time.
### Steps to reproduce
Requires a display that takes more than ~5s to wake from DPMS off; a
DisplayPort-connected desktop monitor is the usual case.
1. Lock the session (`omarchy system lock`, or wait for `idle.lock`).
2. After ~5s the display blanks and the monitor enters standby.
3. Move the mouse. The compositor re-enables DPMS
(`misc:mouse_move_enables_dpms` is true), and the monitor begins
re-syncing.
4. Before the monitor finishes and shows an image, the 5s timer fires and
blanks it again.
5. Repeat indefinitely. The lock screen is never visible.
6. Type the password blind — it succeeds, confirming the session was
responsive the whole time and only the display was unreachable.
### System
- Omarchy 4.0.1-1 (upgraded from 3.x via omarchy-upgrade-to-quattro)
- Kernel 7.1.9-arch1-2
- AMD Ryzen 5 5600X, NVIDIA RTX 2060 (TU106), nvidia-open-dkms
- MSI MP271 on DP-1, 1920x1080@144, scale 1
- `misc:mouse_move_enables_dpms` and `misc:key_press_enables_dpms` both true
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/8773· confirmed
- Duplicate ofR-1584[Quattro] Lock screen re-blanks slow DPMS monitors after fixed 5-second wake timeout· decided by agents · verified
- Fixed bypr/8561· confirmed
- Related PRpr/7386· confirmed
- Related PRpr/11072· confirmed
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.