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.
Feature request: generic biometric (face) unlock hook in the lock screen, similar to fingerprint support
Reported by Wakko13 · filed Sep 10, 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; not a duplicate of another report — 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
Feature request: generic biometric (face) unlock hook in the lock screen, similar to the existing fingerprint support
Right now Service.qml (/usr/share/omarchy/shell/plugins/lock/Service.qml) wires a dedicated fingerprintPam PamContext (config: "omarchy-lock-fingerprint") that starts automatically as soon as the session lock goes secure, gated on a shell check that an fprintd-enrolled fingerprint exists (fprintd-list "$USER" | grep -qi finger).
There's no equivalent passive hook for face/camera-based auth. The only other PAM path, omarchy-lock-password, is only invoked once the user has typed a non-empty string into the password field and submitted it (submitPassword() requires password.length === 0 to be false before calling passwordPam.start()), so it can't be used to drive an automatic, look-at-the-camera-and-unlock flow — a PAM module placed there only fires after a keystroke, defeating passive biometric unlock.
Motivation
Several actively-maintained Linux face-auth stacks now exist (e.g. chowdy — https://github.com/q-artem/chowdy, IR-camera-only, PAM sufficient by design) that behave essentially like Windows Hello: look at the camera, get unlocked, no typing required, and they fail safe to password since the PAM rule is always sufficient. On hardware with an IR camera (fairly common on modern webcams, including many that also expose a plain RGB path under a different /dev/videoN node), this is a genuinely useful, secure local-only convenience — no cloud involved, same trust model as the existing fingerprint support.
Request
A second, generic PamContext (e.g. omarchy-lock-face, or a rename of the fingerprint one to something like omarchy-lock-biometric if you'd rather not maintain two) that:
- starts automatically on secure (same trigger as startFingerprint() today), independent of whether a fingerprint is enrolled
- is gated on the presence of /etc/pam.d/omarchy-lock-face (or similar) existing, the same pattern used for omarchy-lock-fingerprint, so it's opt-in and does nothing on hardware/setups that haven't configured it
- retries/aborts the same way the fingerprint path does today (fingerprintRetryTimer, abort() on failure)
Happy to test against a PR if useful — currently running Omarchy on a laptop with a UVC webcam exposing both RGB and IR sensors, chowdy enrolled and working for sudo, just can't hook it into the lock screen without this.
View raw text
## Feature request: generic biometric (face) unlock hook in the lock screen, similar to the existing fingerprint support Right now `Service.qml` (`/usr/share/omarchy/shell/plugins/lock/Service.qml`) wires a dedicated `fingerprintPam` `PamContext` (`config: "omarchy-lock-fingerprint"`) that starts automatically as soon as the session lock goes `secure`, gated on a shell check that an `fprintd`-enrolled fingerprint exists (`fprintd-list "$USER" | grep -qi finger`). There's no equivalent passive hook for face/camera-based auth. The only other PAM path, `omarchy-lock-password`, is only invoked once the user has typed a non-empty string into the password field and submitted it (`submitPassword()` requires `password.length === 0` to be false before calling `passwordPam.start()`), so it can't be used to drive an automatic, look-at-the-camera-and-unlock flow — a PAM module placed there only fires after a keystroke, defeating passive biometric unlock. ### Motivation Several actively-maintained Linux face-auth stacks now exist (e.g. `chowdy` — https://github.com/q-artem/chowdy, IR-camera-only, PAM `sufficient` by design) that behave essentially like Windows Hello: look at the camera, get unlocked, no typing required, and they fail safe to password since the PAM rule is always `sufficient`. On hardware with an IR camera (fairly common on modern webcams, including many that also expose a plain RGB path under a different `/dev/videoN` node), this is a genuinely useful, secure local-only convenience — no cloud involved, same trust model as the existing fingerprint support. ### Request A second, generic `PamContext` (e.g. `omarchy-lock-face`, or a rename of the fingerprint one to something like `omarchy-lock-biometric` if you'd rather not maintain two) that: - starts automatically on `secure` (same trigger as `startFingerprint()` today), independent of whether a fingerprint is enrolled - is gated on the presence of `/etc/pam.d/omarchy-lock-face` (or similar) existing, the same pattern used for `omarchy-lock-fingerprint`, so it's opt-in and does nothing on hardware/setups that haven't configured it - retries/aborts the same way the fingerprint path does today (`fingerprintRetryTimer`, `abort()` on failure) Happy to test against a PR if useful — currently running Omarchy on a laptop with a UVC webcam exposing both RGB and IR sensors, `chowdy` enrolled and working for `sudo`, just can't hook it into the lock screen without this.
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/14110· confirmed
- Related PRpr/8336· confirmed
- Related PRpr/7040· confirmed
- Fixed bypr/12817· confirmed
- Related PRpr/11612· 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: in the audited area (lock)
- Decided by agents · verified: not a duplicate of another report
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.