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.
[Quattro] Numlock ignored by Quickshell lock screen and polkit dialog despite correct compositor state
Reported by AharonG298 · filed Aug 16, 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?
- 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?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: partly in the audited area (lock) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.
Original report
Summary
Numpad keys do not produce digits in the Quickshell lock screen or the Quickshell polkit authentication dialog, even though numlock is on. Pressing NumLock twice (off, then on) fixes it for that prompt.
The important part: the compositor's numlock state is already correct when this happens. This is not numlock_by_default failing to apply, so it is not fixable from input.lua.
Affected surfaces
Both are Quickshell, and only these:
/usr/share/omarchy/shell/plugins/lock/— the lock screen (omarchy-shell lock)/usr/share/omarchy/shell/plugins/polkit/— the escalation dialog
Ordinary application windows are unaffected. Since resuming from suspend raises the lock screen, "numlock broken after waking from sleep" and "numlock broken at the password popup" are the same bug.
Evidence
Sampled hyprctl devices -j at 4 Hz across a failing polkit prompt, correlated with the journal:
20:19:33 leds=111 main=pixart-hp-wireless-keyboard-and-mouse:true OFF=[]
20:19:34 leds=000 main=pixart-hp-wireless-keyboard-and-mouse:false OFF=[pixart-hp-wireless-keyboard-and-mouse]
20:19:34 leds=111 main=pixart-hp-wireless-keyboard-and-mouse:true OFF=[]
20:19:36 pkexec[131911]: pam_unix(polkit-1:session): session opened for user root(uid=0)leds = the three /sys/class/leds/input*::numlock/brightness values. OFF=[] = keyboards reporting numLock: false.
At 20:19:33, before touching anything: Hyprland reported numLock: true on all 11 keyboards, and all three hardware numlock LEDs were lit — yet numpad keys did not register in the dialog. At 20:19:34 I pressed NumLock twice (visible as the LEDs dropping to 000 and returning to 111). The numpad then worked and the password was accepted at 20:19:36.
So the seat's numlock state is correct throughout the failure. The Quickshell surface does not honour it until a modifier-change event forces a re-read, which suggests the client is not seeding modifier state from the seat when the surface is created.
Steps to reproduce
No suspend cycle needed — the polkit path reproduces on demand:
# in one shell, watch for keyboards reporting numlock off
while :; do
hyprctl devices -j | jq -r '[.keyboards[]|select(.numLock==false)|.name]|join(",")'
sleep 0.25
done &
# trigger the dialog with numlock ON and its LED lit
pkexec /bin/trueType a digit from the numpad into the password field. It does not register, while the watcher shows no keyboard reporting numLock: false. Press NumLock twice and the numpad starts working.
Expected
The numpad produces digits in Quickshell surfaces whenever the seat's numlock state is active, without requiring a manual toggle.
Possibly related (separate observation)
While sampling, the main: true keyboard designation moved between devices as fcitx5 (started by omarchy-fcitx5.service) created and destroyed its Wayland virtual keyboard. Keyboard count oscillates 10↔11 and main lands on a different device each time:
main=hl-virtual-keyboard-fcitx5
main=jabra-elite-10-(avrcp) <- a Bluetooth headset's AVRCP control interface
main=pixart-hp-wireless-keyboard-and-mouseA headset control interface becoming the main keyboard looks wrong independently of this bug. I have not established a causal link, so I'm listing it as an observation rather than a cause.
Related
- #3224 — older report of the same user-visible symptom, filed in Nov 2025 against the pre-Quattro hyprlock lock screen. The login-screen half discussed there (adding an
inputblock to/usr/share/sddm/hyprland.conf, which still ships without one) is a genuine and separate fix; this issue is specifically the Quickshell half, which that thread flags as an unresolved separate code path.
System
Omarchy 4.0.0-1
Hyprland 0.56.2
Kernel 7.1.8-arch1-3
Hardware ASUS Vivobook 16 (V3607VJ), Intel Core 7 240H
GPU Intel Raptor Lake-P iGPU + NVIDIA RTX 3050 Laptop
DM SDDM (Wayland greeter), autologin enabled
Input fcitx5 via omarchy-fcitx5.service; kb_layout us,ilView raw text
## Summary
Numpad keys do not produce digits in the Quickshell **lock screen** or the Quickshell **polkit authentication dialog**, even though numlock is on. Pressing NumLock twice (off, then on) fixes it for that prompt.
The important part: **the compositor's numlock state is already correct when this happens.** This is not `numlock_by_default` failing to apply, so it is not fixable from `input.lua`.
## Affected surfaces
Both are Quickshell, and only these:
- `/usr/share/omarchy/shell/plugins/lock/` — the lock screen (`omarchy-shell lock`)
- `/usr/share/omarchy/shell/plugins/polkit/` — the escalation dialog
Ordinary application windows are unaffected. Since resuming from suspend raises the lock screen, "numlock broken after waking from sleep" and "numlock broken at the password popup" are the same bug.
## Evidence
Sampled `hyprctl devices -j` at 4 Hz across a failing polkit prompt, correlated with the journal:
```
20:19:33 leds=111 main=pixart-hp-wireless-keyboard-and-mouse:true OFF=[]
20:19:34 leds=000 main=pixart-hp-wireless-keyboard-and-mouse:false OFF=[pixart-hp-wireless-keyboard-and-mouse]
20:19:34 leds=111 main=pixart-hp-wireless-keyboard-and-mouse:true OFF=[]
20:19:36 pkexec[131911]: pam_unix(polkit-1:session): session opened for user root(uid=0)
```
`leds` = the three `/sys/class/leds/input*::numlock/brightness` values. `OFF=[]` = keyboards reporting `numLock: false`.
At **20:19:33**, before touching anything: Hyprland reported `numLock: true` on all 11 keyboards, and all three hardware numlock LEDs were lit — yet numpad keys did not register in the dialog. At 20:19:34 I pressed NumLock twice (visible as the LEDs dropping to `000` and returning to `111`). The numpad then worked and the password was accepted at 20:19:36.
So the seat's numlock state is correct throughout the failure. The Quickshell surface does not honour it until a modifier-change event forces a re-read, which suggests the client is not seeding modifier state from the seat when the surface is created.
## Steps to reproduce
No suspend cycle needed — the polkit path reproduces on demand:
```bash
# in one shell, watch for keyboards reporting numlock off
while :; do
hyprctl devices -j | jq -r '[.keyboards[]|select(.numLock==false)|.name]|join(",")'
sleep 0.25
done &
# trigger the dialog with numlock ON and its LED lit
pkexec /bin/true
```
Type a digit from the numpad into the password field. It does not register, while the watcher shows no keyboard reporting `numLock: false`. Press NumLock twice and the numpad starts working.
## Expected
The numpad produces digits in Quickshell surfaces whenever the seat's numlock state is active, without requiring a manual toggle.
## Possibly related (separate observation)
While sampling, the `main: true` keyboard designation moved between devices as fcitx5 (started by `omarchy-fcitx5.service`) created and destroyed its Wayland virtual keyboard. Keyboard count oscillates 10↔11 and `main` lands on a different device each time:
```
main=hl-virtual-keyboard-fcitx5
main=jabra-elite-10-(avrcp) <- a Bluetooth headset's AVRCP control interface
main=pixart-hp-wireless-keyboard-and-mouse
```
A headset control interface becoming the main keyboard looks wrong independently of this bug. I have not established a causal link, so I'm listing it as an observation rather than a cause.
## Related
- #3224 — older report of the same user-visible symptom, filed in Nov 2025 against the pre-Quattro hyprlock lock screen. The login-screen half discussed there (adding an `input` block to `/usr/share/sddm/hyprland.conf`, which still ships without one) is a genuine and separate fix; this issue is specifically the Quickshell half, which that thread flags as an unresolved separate code path.
## System
```
Omarchy 4.0.0-1
Hyprland 0.56.2
Kernel 7.1.8-arch1-3
Hardware ASUS Vivobook 16 (V3607VJ), Intel Core 7 240H
GPU Intel Raptor Lake-P iGPU + NVIDIA RTX 3050 Laptop
DM SDDM (Wayland greeter), autologin enabled
Input fcitx5 via omarchy-fcitx5.service; kb_layout us,il
```
Also reported as
R-1755 is the earliest report of this defect, filed Aug 16, 2026. 2 later reports describe the same defect.
- Aug 16, 2026R-1755 · this report— the original
- ·Decided by agents · verified
Open upstream.
- ·Decided by agents · verified
Open upstream.
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
- Related PRpr/12667· confirmed
- Related PRpr/10530· 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.
- Decided by agents · verified: partly in the audited area (lock)
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.