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-1220GitHub issuePublicDecided· Out of scope

Keyboard input dead on the focused window after a long idle lock, workspace switch restores it

Reported by alexvcasillas · filed Aug 30, 2026 · open at source

Decided: Out of scope — decided by agents · verified 30 h ago.

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

Keyboard input dead on the focused window after a long idle lock, workspace switch restores itrevision 1 · captured 2026-09-28 21:24 UTC via poll

What's wrong?

After a long idle, I unlock and no window on the workspace takes keyboard input.

The window still looks focused. It keeps its focus border, the bar still names it, and hyprctl activewindow still reports it. But nothing I type reaches any client. Compositor keybinds still work, so the keyboard is fine.

Any workspace or window switch brings input back. SUPER+2 then SUPER+1 fixes it instantly. So does SUPER+left/right.

It doesn't happen on a short lock.

Steps to reproduce

  1. Focus a terminal on workspace 1 and leave the machine alone.
  2. Let the screensaver (150s) and then the lock (300s) kick in.
  3. Leave it locked at least 10 minutes.
  4. Wake the display and unlock.
  5. Try to type. Nothing lands.
  6. Press SUPER+2, then SUPER+1. Typing works again.

What I'd expect

After unlocking, the window Hyprland reports as active should hold keyboard focus. No manual workspace switch needed.

System details

  • Omarchy 4.0.1-1, Hyprland 0.56.2-1, quickshell 0.3.1-1, kernel 7.1.8-arch1-3
  • Intel i9-9900K, NVIDIA RTX 4070, nvidia-open-dkms and nvidia-utils 610.57.04-1
  • Single monitor, LG UltraGear on HDMI-A-1, [email protected], scale 2
  • Terminal is foot. Stock idle config: { "screensaver": 150, "lock": 300 }
  • No suspend involved. Machine was up 3 days straight across all of this.

What the socket shows

I caught one with a capture running. Lock at 12:43:10, unlock at 12:56:23, so 13m13s. From .socket2.sock:

12:56:14 monitorremoved>>HDMI-A-1
12:56:14 focusedmon>>FALLBACK,4
12:56:14 monitoradded>>FALLBACK
12:56:14 activewindow>>,                <-- focus cleared
12:56:17 monitoradded>>HDMI-A-1
12:56:17 focusedmon>>HDMI-A-1,1
12:56:17 monitorremoved>>FALLBACK
                                        <-- no activewindow event, focus never comes back
12:56:23 (unlocked)
12:56:30 activewindow>>foot,...         <-- only after I switched windows by hand

The monitor drops out. Everything migrates to FALLBACK and Hyprland clears focus. The real monitor is back 3 seconds later. Focus is never restored. There's no activewindow event between 12:56:17 and my manual switch at 12:56:30.

This hyprctl dump is from 12:56:24, one second after the unlock, before I touched anything:

--- activewindow ---
{ "address": "0x5570ff79c070", "class": "foot", "workspace": { "id": 1, "name": "1" },
  "mapped": true, "visible": true, "acceptsInput": true, "focusHistoryID": 0, ... }
--- activeworkspace ---
{"id":1,"name":"1","lastwindow":"0x5570ff79c070"}
--- layers (overlay) ---
[{"mon":"HDMI-A-1","overlay":[]}]

So hyprctl names a window with focusHistoryID: 0 and acceptsInput: true. The event stream says focus was cleared and never restored. That mismatch is the visible bug: the window keeps its border, the bar keeps its name, and no client gets a key. The overlay level is empty, so no stray layer is holding input.

The workspace disagrees too. The stream emits workspace>>6 at 12:56:17, the dump at 12:56:24 reports workspace 1.

How often

On wake from a long lock, omarchy-shell logs a full loss of outputs while still locked:

2026-08-30T12:56:14 kernel: nvidia-modeset: WARNING: GPU:0: HDMI FRL link training failed.
2026-08-30T12:56:14 omarchy-shell:  INFO qt.qpa.wayland: There are no outputs - creating placeholder screen
2026-08-30T12:56:18 omarchy-shell:  WARN quickshell.hyprland.ipc: Got removal for monitor "FALLBACK" which was not previously tracked.
2026-08-30T12:56:23 omarchy-shell: DEBUG qml: omarchy lock ... unlocked

There are 15 of these clusters this boot. 14 land seconds before an unlock. The odd one out is a wake I didn't unlock.

Lock durationOutput dropped before unlock?
5s, 8s, 14s, 19s, 1m48sNo (5/5)
9m06s, 9m51s, 11m, 13m13s, 14m30s, 19m16s, 19m50s, 1h01m, 1h38m, 2h14m, 2h38m, 4h32m, 16h49m, 39h20mYes (14/14)

Every lock over 9 minutes dropped the output. None of the five under 2 minutes did. I've got nothing between 2 and 9 minutes, so I don't know where the line sits.

One caveat on that table. It tracks output loss, read from the journal afterwards. It isn't a record of input dying. I only saw dead input on the times I came back and tried to type. The 13m13s row is the one with the trace above.

13 of the 15 clusters land on the same second as the FRL link training failed warning. Two don't, so that warning travels with these wakes but isn't required.

I couldn't force it on a short timescale. 80 seconds of hl.dsp.dpms({ action = "disable" }) never dropped the output, and focus was fine after. I haven't tried a longer forced one.

Upstream

Hyprland discussion #15554 is the same thing on a sole monitor. Same FALLBACK round trip, same activewindow>>,, same workspace switch to recover. It was closed with a Lua workaround after this reply:

I don't think we enforce focus on monitor addition to not disrupt current state. With lua I think the workaround is totally reasonable

Reading that, I don't expect a fix upstream. Omarchy's idle lock is what puts the display into the state that leads to the round trip, so this felt like the right place to raise it.

One thing worth flagging: focus is already gone at 12:56:14, before I authenticate. The unlock isn't losing it. It hands back a session that already has nothing focused. Whether the lock matters at all, I haven't tested.

Possibly related, same FALLBACK and output loss pattern: #7811 (similar dead keyboard input after lid-open resume), #7380 (shell crashes on FALLBACK removal at wake, mine survives), #8580 and #8946 (monitors dropping HPD after DPMS off).

Happy to help

Could I put a PR together for this? I was thinking a monitor.added handler that re-asserts focus when a FALLBACK migration just happened, along the lines of the Lua workaround above. Happy to go another way if you'd rather 🤔

View raw text
### What's wrong?

After a long idle, I unlock and no window on the workspace takes keyboard input.

The window still looks focused. It keeps its focus border, the bar still names it, and `hyprctl activewindow` still reports it. But nothing I type reaches any client. Compositor keybinds still work, so the keyboard is fine.

Any workspace or window switch brings input back. `SUPER+2` then `SUPER+1` fixes it instantly. So does `SUPER+left/right`.

It doesn't happen on a short lock.

### Steps to reproduce

1. Focus a terminal on workspace 1 and leave the machine alone.
2. Let the screensaver (150s) and then the lock (300s) kick in.
3. Leave it locked at least 10 minutes.
4. Wake the display and unlock.
5. Try to type. Nothing lands.
6. Press `SUPER+2`, then `SUPER+1`. Typing works again.

### What I'd expect

After unlocking, the window Hyprland reports as active should hold keyboard focus. No manual workspace switch needed.

### System details

- Omarchy `4.0.1-1`, Hyprland `0.56.2-1`, quickshell `0.3.1-1`, kernel `7.1.8-arch1-3`
- Intel i9-9900K, NVIDIA RTX 4070, `nvidia-open-dkms` and `nvidia-utils` `610.57.04-1`
- Single monitor, LG UltraGear on `HDMI-A-1`, [email protected], scale 2
- Terminal is `foot`. Stock idle config: `{ "screensaver": 150, "lock": 300 }`
- No suspend involved. Machine was up 3 days straight across all of this.

### What the socket shows

I caught one with a capture running. Lock at 12:43:10, unlock at 12:56:23, so 13m13s. From `.socket2.sock`:

```
12:56:14 monitorremoved>>HDMI-A-1
12:56:14 focusedmon>>FALLBACK,4
12:56:14 monitoradded>>FALLBACK
12:56:14 activewindow>>,                <-- focus cleared
12:56:17 monitoradded>>HDMI-A-1
12:56:17 focusedmon>>HDMI-A-1,1
12:56:17 monitorremoved>>FALLBACK
                                        <-- no activewindow event, focus never comes back
12:56:23 (unlocked)
12:56:30 activewindow>>foot,...         <-- only after I switched windows by hand
```

The monitor drops out. Everything migrates to `FALLBACK` and Hyprland clears focus. The real monitor is back 3 seconds later. Focus is never restored. There's no `activewindow` event between `12:56:17` and my manual switch at `12:56:30`.

This `hyprctl` dump is from `12:56:24`, one second after the unlock, before I touched anything:

```
--- activewindow ---
{ "address": "0x5570ff79c070", "class": "foot", "workspace": { "id": 1, "name": "1" },
  "mapped": true, "visible": true, "acceptsInput": true, "focusHistoryID": 0, ... }
--- activeworkspace ---
{"id":1,"name":"1","lastwindow":"0x5570ff79c070"}
--- layers (overlay) ---
[{"mon":"HDMI-A-1","overlay":[]}]
```

So `hyprctl` names a window with `focusHistoryID: 0` and `acceptsInput: true`. The event stream says focus was cleared and never restored. That mismatch is the visible bug: the window keeps its border, the bar keeps its name, and no client gets a key. The overlay level is empty, so no stray layer is holding input.

The workspace disagrees too. The stream emits `workspace>>6` at `12:56:17`, the dump at `12:56:24` reports workspace `1`.

### How often

On wake from a long lock, `omarchy-shell` logs a full loss of outputs while still locked:

```
2026-08-30T12:56:14 kernel: nvidia-modeset: WARNING: GPU:0: HDMI FRL link training failed.
2026-08-30T12:56:14 omarchy-shell:  INFO qt.qpa.wayland: There are no outputs - creating placeholder screen
2026-08-30T12:56:18 omarchy-shell:  WARN quickshell.hyprland.ipc: Got removal for monitor "FALLBACK" which was not previously tracked.
2026-08-30T12:56:23 omarchy-shell: DEBUG qml: omarchy lock ... unlocked
```

There are 15 of these clusters this boot. 14 land seconds before an unlock. The odd one out is a wake I didn't unlock.

| Lock duration | Output dropped before unlock? |
| --- | --- |
| 5s, 8s, 14s, 19s, 1m48s | No (5/5) |
| 9m06s, 9m51s, 11m, 13m13s, 14m30s, 19m16s, 19m50s, 1h01m, 1h38m, 2h14m, 2h38m, 4h32m, 16h49m, 39h20m | Yes (14/14) |

Every lock over 9 minutes dropped the output. None of the five under 2 minutes did. I've got nothing between 2 and 9 minutes, so I don't know where the line sits.

One caveat on that table. It tracks output loss, read from the journal afterwards. It isn't a record of input dying. I only saw dead input on the times I came back and tried to type. The 13m13s row is the one with the trace above.

13 of the 15 clusters land on the same second as the `FRL link training failed` warning. Two don't, so that warning travels with these wakes but isn't required.

I couldn't force it on a short timescale. 80 seconds of `hl.dsp.dpms({ action = "disable" })` never dropped the output, and focus was fine after. I haven't tried a longer forced one.

### Upstream

Hyprland [discussion #15554](https://github.com/hyprwm/Hyprland/discussions/15554) is the same thing on a sole monitor. Same `FALLBACK` round trip, same `activewindow>>,`, same workspace switch to recover. It was closed with a Lua workaround after this reply:

> I don't think we enforce focus on monitor addition to not disrupt current state. With lua I think the workaround is totally reasonable

Reading that, I don't expect a fix upstream. Omarchy's idle lock is what puts the display into the state that leads to the round trip, so this felt like the right place to raise it.

One thing worth flagging: focus is already gone at `12:56:14`, before I authenticate. The unlock isn't losing it. It hands back a session that already has nothing focused. Whether the lock matters at all, I haven't tested.

Possibly related, same `FALLBACK` and output loss pattern: #7811 (similar dead keyboard input after lid-open resume), #7380 (shell crashes on `FALLBACK` removal at wake, mine survives), #8580 and #8946 (monitors dropping HPD after DPMS off).

### Happy to help

Could I put a PR together for this? I was thinking a `monitor.added` handler that re-asserts focus when a `FALLBACK` migration just happened, along the lines of the Lua workaround above. Happy to go another way if you'd rather 🤔

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

Not linked to any known issue, other report or change yet.

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-11 17:23 UTC