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.
Closed-lid session stays unlocked and accepts invisible input after its last external monitor disconnects
Reported by SmithLabsLLC · filed Aug 31, 2026 · open at source
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?
- AreaOutside the audited area· 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
System details
Intel Core i5-1235U / Intel Iris Xe, Omarchy 4.0.1-1, Hyprland 0.56.2-1, Quickshell 0.3.1-1, kernel 7.1.9-arch1-2
What's wrong?
When a laptop is used in clamshell mode with its lid closed and one active external monitor, powering off or disconnecting that final monitor leaves the session unlocked and able to accept keyboard input while no display is visible.
This was reproduced twice with a scratch editor. It is an input-safety and secure-state bug: the user cannot see where input is going, but the previously focused client remains active and receives keys until a usable display returns.
Steps to reproduce
- Connect exactly one external monitor to a laptop.
- Open a scratch editor containing no sensitive information and leave it focused.
- Close the laptop lid. Confirm the external monitor remains active and the internal panel is disabled for clamshell operation.
- Physically power off or disconnect the final external monitor.
- While no display is visible, briefly hold a harmless letter key.
- Power on or reconnect the external monitor.
Actual behavior
- Hyprland removes the external output.
- Omarchy's clamshell reconciliation enables/modesets the internal panel even though the lid remains physically closed.
- No visible output is available to the user.
- The session does not lock; the previously focused application continues receiving keyboard input.
- When the external display returns, the session is still unlocked and the unseen input is present in the scratch editor.
Expected behavior
When a closed-lid session loses its final active external monitor, Omarchy should immediately enter a secure state before further keyboard input reaches the focused client. When a usable display returns, the user should see the lock screen and authenticate before returning to the application.
Open-lid unplugging, removing one of several external monitors, and already-locked sessions should retain their current behavior.
Sanitized display evidence
The relevant sequence was the same on both reproductions:
drm: Connector DP-1 disconnected
drm: Disabling output DP-1
drm: DP-1 is not connected, clearing stale crtc
drm: Modesetting eDP-1
drm: Connector eDP-1 enabledState changed false -> trueThere was no accompanying USB/HID device removal or re-enumeration during either reproduction.
Source-level path and possible fix direction
bin/omarchy-hyprland-monitor-watch handles monitor-removal events and invokes clamshell reconciliation. bin/omarchy-hyprland-monitor-clamshell disables the internal panel only while clamshell mode is true and an external output remains active. After the final external output disappears, that condition becomes false and the helper enables the physically hidden internal panel. Neither path checks for the combination of closed lid plus no remaining external display before returning input to the live session.
One fix direction is for the existing monitor watcher to serialize the removal event, verify that the lid is closed and no external display remains, check that no lock is already active or pending, and request omarchy-system-lock. Existing display recovery should still run so the lock screen becomes visible when a usable output returns.
I generated omarchy-debug --no-sudo --print locally, but the full output contains unrelated host, network, storage, and application identifiers, so I am not attaching it. The relevant versions and sanitized event sequence are included above.
View raw text
### System details Intel Core i5-1235U / Intel Iris Xe, Omarchy 4.0.1-1, Hyprland 0.56.2-1, Quickshell 0.3.1-1, kernel 7.1.9-arch1-2 ### What's wrong? When a laptop is used in clamshell mode with its lid closed and one active external monitor, powering off or disconnecting that final monitor leaves the session unlocked and able to accept keyboard input while no display is visible. This was reproduced twice with a scratch editor. It is an input-safety and secure-state bug: the user cannot see where input is going, but the previously focused client remains active and receives keys until a usable display returns. #### Steps to reproduce 1. Connect exactly one external monitor to a laptop. 2. Open a scratch editor containing no sensitive information and leave it focused. 3. Close the laptop lid. Confirm the external monitor remains active and the internal panel is disabled for clamshell operation. 4. Physically power off or disconnect the final external monitor. 5. While no display is visible, briefly hold a harmless letter key. 6. Power on or reconnect the external monitor. #### Actual behavior - Hyprland removes the external output. - Omarchy's clamshell reconciliation enables/modesets the internal panel even though the lid remains physically closed. - No visible output is available to the user. - The session does not lock; the previously focused application continues receiving keyboard input. - When the external display returns, the session is still unlocked and the unseen input is present in the scratch editor. #### Expected behavior When a closed-lid session loses its final active external monitor, Omarchy should immediately enter a secure state before further keyboard input reaches the focused client. When a usable display returns, the user should see the lock screen and authenticate before returning to the application. Open-lid unplugging, removing one of several external monitors, and already-locked sessions should retain their current behavior. #### Sanitized display evidence The relevant sequence was the same on both reproductions: ```text drm: Connector DP-1 disconnected drm: Disabling output DP-1 drm: DP-1 is not connected, clearing stale crtc drm: Modesetting eDP-1 drm: Connector eDP-1 enabledState changed false -> true ``` There was no accompanying USB/HID device removal or re-enumeration during either reproduction. #### Source-level path and possible fix direction `bin/omarchy-hyprland-monitor-watch` handles monitor-removal events and invokes clamshell reconciliation. `bin/omarchy-hyprland-monitor-clamshell` disables the internal panel only while clamshell mode is true and an external output remains active. After the final external output disappears, that condition becomes false and the helper enables the physically hidden internal panel. Neither path checks for the combination of closed lid plus no remaining external display before returning input to the live session. One fix direction is for the existing monitor watcher to serialize the removal event, verify that the lid is closed and no external display remains, check that no lock is already active or pending, and request `omarchy-system-lock`. Existing display recovery should still run so the lock screen becomes visible when a usable output returns. I generated `omarchy-debug --no-sudo --print` locally, but the full output contains unrelated host, network, storage, and application identifiers, so I am not attaching it. The relevant versions and sanitized event sequence are included above.
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/14711· confirmed
- Related PRpr/14780· confirmed
- Related PRpr/14959· 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.
- Out of scopeDecided by agents · verified · 2026-10-09 02:28 UTC