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

Lock screen retries fingerprint auth every 250ms forever with no backoff — ~226 PAM sessions/minute while locked

Reported by charliebarmore · filed Sep 1, 2026Closed upstream on 2026-10-04 by the bot omarchybot; the closing comment says it was fixed by PR #7158. GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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. No decision has been recorded yet.

Original report

Lock screen retries fingerprint auth every 250ms forever with no backoff — ~226 PAM sessions/minute while lockedrevision 1 · captured 2026-09-28 21:24 UTC via poll

What happens

When the lock screen is up and pam_fprintd fails, omarchy-shell re-arms a fixed 250 ms timer and retries forever. There is no backoff and no attempt cap, so a persistent fingerprint failure becomes an unbounded retry storm that lasts as long as the screen is locked.

On my machine this produced 317,059 PAM sessions since boot and a sustained 226 per minute measured over a full minute of an overnight lock.

The code

/usr/share/omarchy/shell/plugins/lock/Service.qml

onError: function(error) {
  root.fingerprintAuthenticating = false
  if (root.lockRequested && root.fingerprintConfigured) fingerprintRetryTimer.restart()
}

Timer {
  id: fingerprintRetryTimer
  interval: 250
  repeat: false
  onTriggered: root.startFingerprint()
}

Every failure re-arms the timer unconditionally. 1000 / 250 = 4 attempts per second, which matches the measured 226/min once process-spawn overhead is accounted for.

What triggers it here

fprintd rejects the claim:

fprintd[...]: Authorization denied to :1.318060 to call method 'Claim' for device 'Synaptics Sensors': Device was already claimed

fprintd-list also shows three device objects for one physical reader — Device/0, Device/1, Device/3, with Device/2 missing — suggesting fprintd leaks device objects as USB re-enumerates across suspend/resume. I can't prove the stale objects cause the failed claim rather than merely co-occurring with it, but the retry storm follows from any persistent claim failure regardless of cause.

Impact

  • ~226 process spawns per minute for the entire duration of every lock. An overnight lock is roughly 108,000 PAM subprocesses.
  • Measurable battery drain on a laptop left locked.
  • Journal growth — a large share of my 511 MB journal was this.
  • fprintd accumulated 7 min 52 s of CPU time over ~5 days of uptime.

Steps to reproduce

  1. Set up fingerprint auth (omarchy setup security fingerprint) on hardware where fprintd can end up refusing the claim.
  2. Lock the screen and leave it locked.
  3. journalctl --since "-1min" | grep -c omarchy-lock-fingerprint

Expected: a small number of attempts, then backoff or a stop.
Actual: ~226 and constant for as long as the screen stays locked.

Suggested fix

Exponential backoff on the retry timer, plus an attempt cap that stops retrying fingerprint and falls back to password-only for the remainder of the lock session. A repeated Device was already claimed in particular is not going to resolve by retrying 4×/second.

Workaround

Deleting /etc/pam.d/omarchy-lock-fingerprint disables lock-screen fingerprint while leaving sudo and polkit fingerprint working — Service.qml gates the feature on that file existing. Verified: PAM sessions during a lock cycle dropped from ~226/min to zero, and the lock then used a single omarchy-lock-password session.

System

  • Omarchy 4.0.1
  • Hyprland 0.56.2
  • Linux 7.1.9-arch1-2
  • Reader: Synaptics Prometheus (06cb:00fc), ThinkPad, Intel Iris Xe
View raw text

## What happens

When the lock screen is up and `pam_fprintd` fails, `omarchy-shell` re-arms a fixed 250 ms timer and retries forever. There is no backoff and no attempt cap, so a persistent fingerprint failure becomes an unbounded retry storm that lasts as long as the screen is locked.

On my machine this produced **317,059 PAM sessions since boot** and a sustained **226 per minute** measured over a full minute of an overnight lock.

## The code

`/usr/share/omarchy/shell/plugins/lock/Service.qml`

```qml
onError: function(error) {
  root.fingerprintAuthenticating = false
  if (root.lockRequested && root.fingerprintConfigured) fingerprintRetryTimer.restart()
}

Timer {
  id: fingerprintRetryTimer
  interval: 250
  repeat: false
  onTriggered: root.startFingerprint()
}
```

Every failure re-arms the timer unconditionally. 1000 / 250 = 4 attempts per second, which matches the measured 226/min once process-spawn overhead is accounted for.

## What triggers it here

`fprintd` rejects the claim:

```
fprintd[...]: Authorization denied to :1.318060 to call method 'Claim' for device 'Synaptics Sensors': Device was already claimed
```

`fprintd-list` also shows **three device objects for one physical reader** — `Device/0`, `Device/1`, `Device/3`, with `Device/2` missing — suggesting fprintd leaks device objects as USB re-enumerates across suspend/resume. I can't prove the stale objects *cause* the failed claim rather than merely co-occurring with it, but the retry storm follows from any persistent claim failure regardless of cause.

## Impact

- ~226 process spawns per minute for the entire duration of every lock. An overnight lock is roughly 108,000 PAM subprocesses.
- Measurable battery drain on a laptop left locked.
- Journal growth — a large share of my 511 MB journal was this.
- `fprintd` accumulated 7 min 52 s of CPU time over ~5 days of uptime.

## Steps to reproduce

1. Set up fingerprint auth (`omarchy setup security fingerprint`) on hardware where `fprintd` can end up refusing the claim.
2. Lock the screen and leave it locked.
3. `journalctl --since "-1min" | grep -c omarchy-lock-fingerprint`

Expected: a small number of attempts, then backoff or a stop.
Actual: ~226 and constant for as long as the screen stays locked.

## Suggested fix

Exponential backoff on the retry timer, plus an attempt cap that stops retrying fingerprint and falls back to password-only for the remainder of the lock session. A repeated `Device was already claimed` in particular is not going to resolve by retrying 4×/second.

## Workaround

Deleting `/etc/pam.d/omarchy-lock-fingerprint` disables lock-screen fingerprint while leaving sudo and polkit fingerprint working — `Service.qml` gates the feature on that file existing. Verified: PAM sessions during a lock cycle dropped from ~226/min to zero, and the lock then used a single `omarchy-lock-password` session.

## System

- Omarchy 4.0.1
- Hyprland 0.56.2
- Linux 7.1.9-arch1-2
- Reader: Synaptics Prometheus (06cb:00fc), ThinkPad, Intel Iris Xe

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/10653· confirmed
  • Fixed bypr/11273· confirmed
  • Fixed bypr/12461· 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.

No decision has been recorded yet.