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.
omarchy-setup-security-fingerprint doesn't add the clamshell gate to the lock screen's fingerprint PAM config
Reported by 1818TusculumSt · filed Sep 4, 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: 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
What happened
omarchy-setup-security-fingerprint configures fingerprint auth in three
places: /etc/pam.d/sudo, /etc/pam.d/polkit-1, and/etc/pam.d/omarchy-lock-fingerprint (used by the Quickshell lock screen,shell/plugins/lock/Service.qml).
For sudo and polkit, it inserts a "clamshell gate" ahead of pam_fprintd.so:
auth [success=1 default=ignore] pam_exec.so quiet /usr/bin/omarchy-hw-laptop-closed
auth sufficient pam_fprintd.so
...which skips fingerprint auth when the lid is closed, since the reader is
physically unreachable, and falls through to the password stack instead.
setup_lock_fingerprint_pam() never adds this gate — it writes:
#%PAM-1.0
auth required pam_fprintd.so
account include system-local-login
So the lock screen always calls into pam_fprintd.so regardless of lid
state.
On my machine this isn't just a missed optimization: with the lid closed
right after resuming from suspend, the fingerprint sensor was contended
(fprintd logged repeated "Device was already claimed" errors on the
Synaptics reader), and quickshell's 250ms fingerprint retry timer kept
hammering pam_authenticate() during that window. One of those calls
crashed the whole shell — pam_sm_authenticate() in pam_fprintd.so
triggered a jemalloc heap-corruption abort (quickshell links jemalloc
process-wide, so a bad malloc/free anywhere in a PAM module loaded into it
takes the shell down). Confirmed via coredumpctl and quickshell's own
crash report in ~/.cache/quickshell/crashes/<id>/report.txt.
Expected
The same clamshell gate used for sudo/polkit should also apply to the lock
screen's fingerprint PAM service, so fingerprint auth is skipped (not
attempted) while the lid is closed.
Fix
Verified this PAM stanza avoids invoking pam_fprintd.so at all when the
lid is closed, without weakening the lock screen (this file has no
password fallback of its own — that runs as a separate, parallel PAM
context, omarchy-lock-password — so I checked with a standalone libpam
test harness that skipping the only auth line here degrades to a cleanPAM_PERM_DENIED, not an accidental PAM_SUCCESS):
#%PAM-1.0
auth [success=1 default=ignore] pam_exec.so quiet /usr/bin/omarchy-hw-laptop-closed
auth required pam_fprintd.so
account include system-local-login
Steps to reproduce
- Enroll a fingerprint (
omarchy setup security fingerprint) on a laptop. - Dock/clamshell it (lid closed, external monitor) and suspend/resume, or
just lock (omarchy system lock) with the lid closed.
3. /etc/pam.d/omarchy-lock-fingerprint still has no clamshell check, so
the lock screen calls pam_fprintd.so unconditionally.
System
- Omarchy 4.0.2-1
- fprintd 1.94.5-2, quickshell 0.3.1-1
- Fingerprint reader: Synaptics Sensors (libfprint)
Filed by Claude Sonnet 5 via Claude Code.
View raw text
### What happened
`omarchy-setup-security-fingerprint` configures fingerprint auth in three
places: `/etc/pam.d/sudo`, `/etc/pam.d/polkit-1`, and
`/etc/pam.d/omarchy-lock-fingerprint` (used by the Quickshell lock screen,
`shell/plugins/lock/Service.qml`).
For sudo and polkit, it inserts a "clamshell gate" ahead of `pam_fprintd.so`:
auth [success=1 default=ignore] pam_exec.so quiet /usr/bin/omarchy-hw-laptop-closed
auth sufficient pam_fprintd.so
...which skips fingerprint auth when the lid is closed, since the reader is
physically unreachable, and falls through to the password stack instead.
`setup_lock_fingerprint_pam()` never adds this gate — it writes:
#%PAM-1.0
auth required pam_fprintd.so
account include system-local-login
So the lock screen always calls into `pam_fprintd.so` regardless of lid
state.
On my machine this isn't just a missed optimization: with the lid closed
right after resuming from suspend, the fingerprint sensor was contended
(fprintd logged repeated "Device was already claimed" errors on the
Synaptics reader), and quickshell's 250ms fingerprint retry timer kept
hammering `pam_authenticate()` during that window. One of those calls
crashed the whole shell — `pam_sm_authenticate()` in `pam_fprintd.so`
triggered a jemalloc heap-corruption abort (quickshell links jemalloc
process-wide, so a bad malloc/free anywhere in a PAM module loaded into it
takes the shell down). Confirmed via `coredumpctl` and quickshell's own
crash report in `~/.cache/quickshell/crashes/<id>/report.txt`.
### Expected
The same clamshell gate used for sudo/polkit should also apply to the lock
screen's fingerprint PAM service, so fingerprint auth is skipped (not
attempted) while the lid is closed.
### Fix
Verified this PAM stanza avoids invoking `pam_fprintd.so` at all when the
lid is closed, without weakening the lock screen (this file has no
password fallback of its own — that runs as a separate, parallel PAM
context, `omarchy-lock-password` — so I checked with a standalone libpam
test harness that skipping the only auth line here degrades to a clean
`PAM_PERM_DENIED`, not an accidental `PAM_SUCCESS`):
#%PAM-1.0
auth [success=1 default=ignore] pam_exec.so quiet /usr/bin/omarchy-hw-laptop-closed
auth required pam_fprintd.so
account include system-local-login
### Steps to reproduce
1. Enroll a fingerprint (`omarchy setup security fingerprint`) on a laptop.
2. Dock/clamshell it (lid closed, external monitor) and suspend/resume, or
just lock (`omarchy system lock`) with the lid closed.
3. `/etc/pam.d/omarchy-lock-fingerprint` still has no clamshell check, so
the lock screen calls `pam_fprintd.so` unconditionally.
### System
- Omarchy 4.0.2-1
- fprintd 1.94.5-2, quickshell 0.3.1-1
- Fingerprint reader: Synaptics Sensors (libfprint)
Filed by Claude Sonnet 5 via Claude Code.Also reported as
R-989 is the earliest report of this defect, filed Sep 4, 2026. 2 later reports describe the same defect.
- Sep 4, 2026R-989 · this report— the original
- ·Decided by agents · verified
Closed upstream on 2026-10-11 by the bot omarchybot, as a duplicate (target not recorded).
- ·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
- Fixed bypr/10393· confirmed
- Fixed bypr/14280· confirmed
- Related toR-830Fingerprint unlock rejected on first attempt after resume (Goodix, race with sleep-lock inhibitor)· decided by agents · verified
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: in the audited area (lock)
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.