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

Display flickers off/on repeatedly after idle lock on AMD APU + HDMI/DP (DPMS flap loop)

Reported by pablo-io · filed Aug 29, 2026 · open at source

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

This defect is tracked under R-2112. This report describes the same defect, so it is folded under it in the inbox.

Earliest report of this defect: R-1285 (filed Aug 29, 2026).

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

Display flickers off/on repeatedly after idle lock on AMD APU + HDMI/DP (DPMS flap loop)revision 1 · captured 2026-09-28 21:24 UTC via poll

Environment

  • Omarchy 4.0.1-1 (Arch)
  • GPU: AMD HawkPoint1 [Radeon] (PCI 66:00.0)
  • HDMI audio: AMD Radeon High Definition Audio Controller (PCI 66:00.1)
  • Terminal: foot (screensaver launches fine)
  • Display connected via HDMI/DP

Expected behavior

When idle, the system should lock and the display should turn off (or stay locked) cleanly — the same way Suspend from the menu does.

Actual behavior

After the lock engages, the display turns off and on repeatedly (~5–8 s) while locked. The lock state itself is stable (secure=true); only the display DPMS toggles.

Root cause

The lock plugin (shell/plugins/lock/Service.qml) arms idleBlankTimer (5 s) after locking; its trigger runs blankProcess → omarchy-brightness-display off → hl.dsp.dpms disable (DPMS off) while the session is live.

On this AMD + HDMI combo, DPMS-off drops the HDMI link, and the Radeon HDMI audio codec emits SW_VIDEOOUT_INSERT / SW_LINEOUT_INSERT switch events (evdev event18 — "HD-Audio Generic HDMI/DP"). These are treated as activity, which wakes the lock (runWake → omarchy-system-wake → DPMS on), re-arms the 5 s blank, and the cycle repeats.

Evidence

Traced hyprctl monitors dpmsStatus with omarchy-shell idle/lock status and raw /dev/input events. Every DPMS toggle coincides exactly with a switch event from the HDMI audio device; no keyboard/mouse input occurs during the flicker:

19:05:40  EVENT event18 [HD-Audio Generic HDMI/DP,pcm=7] SW c=6  → dpms=[False]
19:05:48  EVENT event18 [HD-Audio Generic HDMI/DP,pcm=7] SW c=8  → dpms=[True]
19:05:53  EVENT event18 [...]                                → dpms=[False]
19:06:01  EVENT event18 [...]                                → dpms=[True]
... (continues; locked=true secure=true throughout)

Why Suspend works but idle doesn't

Suspend powers the display down at the kernel PM level (clean, like Windows). The lock-during-suspend path uses OMARCHY_LOCK_ONLY=true omarchy-system-lock ("lock before suspend without scheduling display off"), so it never schedules the live DPMS-off blank that triggers the loop. Windows (dual-boot, same cable/monitor) also sleeps the display cleanly, confirming it is not a hardware/cable fault.

Workaround

Commenting out the blank in shell/plugins/lock/Service.qml stops the flicker (display stays on while locked):

function runBlank() {
    // if (!blankProcess.running) blankProcess.running = true
}

(Note: editing a /usr/share/omarchy file; it can be overwritten on update.)

Suggested fix

  • Don't treat unrelated switch/jack events (e.g. HDMI audio SW_VIDEOOUT_INSERT) as wake activity, or
  • Stabilize/guard the display before issuing DPMS-off (e.g. delay the blank, or detect the link-flap and avoid re-arming), or
  • On lock, prefer a suspend-like display power-down instead of a live hl.dsp.dpms disable that flaps on certain GPUs.

Steps to reproduce

  1. Omarchy on AMD APU with HDMI/DP display + Radeon HDMI audio.
  2. Leave idle until the lock engages (default lock = 300, repro used 100/200).
  3. ~5 s after lock, the display flickers off/on.
  4. Confirm with watch -n1 'hyprctl monitors -j | jq .[].dpmsStatus' and sudo libinput debug-events (or raw /dev/input monitoring) showing HDMI audio switch events coinciding with each toggle.
View raw text
## Environment
- Omarchy 4.0.1-1 (Arch)
- GPU: AMD HawkPoint1 [Radeon] (PCI 66:00.0)
- HDMI audio: AMD Radeon High Definition Audio Controller (PCI 66:00.1)
- Terminal: foot (screensaver launches fine)
- Display connected via HDMI/DP

## Expected behavior
When idle, the system should lock and the display should turn off (or stay locked) cleanly — the same way Suspend from the menu does.

## Actual behavior
After the lock engages, the display turns off and on repeatedly (~5–8 s) while locked. The lock state itself is stable (`secure=true`); only the display DPMS toggles.

## Root cause
The lock plugin (`shell/plugins/lock/Service.qml`) arms `idleBlankTimer` (5 s) after locking; its trigger runs `blankProcess` → `omarchy-brightness-display off` → `hl.dsp.dpms disable` (DPMS off) **while the session is live**.

On this AMD + HDMI combo, DPMS-off drops the HDMI link, and the Radeon HDMI audio codec emits `SW_VIDEOOUT_INSERT` / `SW_LINEOUT_INSERT` switch events (evdev `event18` — "HD-Audio Generic HDMI/DP"). These are treated as activity, which wakes the lock (`runWake` → `omarchy-system-wake` → DPMS on), re-arms the 5 s blank, and the cycle repeats.

## Evidence
Traced `hyprctl monitors` `dpmsStatus` with `omarchy-shell idle/lock status` and raw `/dev/input` events. Every DPMS toggle coincides exactly with a switch event from the HDMI audio device; no keyboard/mouse input occurs during the flicker:

```
19:05:40  EVENT event18 [HD-Audio Generic HDMI/DP,pcm=7] SW c=6  → dpms=[False]
19:05:48  EVENT event18 [HD-Audio Generic HDMI/DP,pcm=7] SW c=8  → dpms=[True]
19:05:53  EVENT event18 [...]                                → dpms=[False]
19:06:01  EVENT event18 [...]                                → dpms=[True]
... (continues; locked=true secure=true throughout)
```

## Why Suspend works but idle doesn't
Suspend powers the display down at the kernel PM level (clean, like Windows). The lock-during-suspend path uses `OMARCHY_LOCK_ONLY=true omarchy-system-lock` ("lock before suspend without scheduling display off"), so it never schedules the live DPMS-off blank that triggers the loop. Windows (dual-boot, same cable/monitor) also sleeps the display cleanly, confirming it is not a hardware/cable fault.

## Workaround
Commenting out the blank in `shell/plugins/lock/Service.qml` stops the flicker (display stays on while locked):

```qml
function runBlank() {
    // if (!blankProcess.running) blankProcess.running = true
}
```

(Note: editing a `/usr/share/omarchy` file; it can be overwritten on update.)

## Suggested fix
- Don't treat unrelated switch/jack events (e.g. HDMI audio `SW_VIDEOOUT_INSERT`) as wake activity, or
- Stabilize/guard the display before issuing DPMS-off (e.g. delay the blank, or detect the link-flap and avoid re-arming), or
- On lock, prefer a suspend-like display power-down instead of a live `hl.dsp.dpms disable` that flaps on certain GPUs.

## Steps to reproduce
1. Omarchy on AMD APU with HDMI/DP display + Radeon HDMI audio.
2. Leave idle until the lock engages (default `lock = 300`, repro used `100`/`200`).
3. ~5 s after lock, the display flickers off/on.
4. Confirm with `watch -n1 'hyprctl monitors -j | jq .[].dpmsStatus'` and `sudo libinput debug-events` (or raw `/dev/input` monitoring) showing HDMI audio switch events coinciding with each toggle.

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-2112Decided by agents · verified · 2026-10-09 03:15 UTC