Lock screen
Open the lid, look, done
A key, a click or opening the lid starts a scan, while the password field stays live the whole time. Three tries per wake, and none with the lid shut.
Face unlock for Omarchy · open source · GPL-3.0
Look at your laptop and you're in. PenguID recognizes you with the infrared camera on the lock screen, at sudo and in polkit prompts, while your password stays the real key.
Everywhere you're asked
Face unlock is only useful if it is there when a prompt appears. PenguID covers the three places Omarchy asks who you are, and it shows you what it is doing each time.
Lock screen
A key, a click or opening the lid starts a scan, while the password field stays live the whole time. Three tries per wake, and none with the lid shut.
sudo and polkit
Press Enter and look at the camera, or type your password as always. Polkit prompts get their own PenguID dialog.
Face HUD
Whenever face runs outside the lock screen, a small card with the penguin appears near the top of the screen, above every window and fullscreen app, like Face ID on an iPhone. It never takes a click.
It shows its work
Secure by design
PenguID treats your face as a fast second way in, never a replacement for your password. Every part that touches authentication is small, local and open to read.
irlume stores numbers derived from your face, never photos, encrypted with AES-256-GCM under a key sealed by the TPM. Nothing goes to a cloud, and nothing needs one.
The IR camera lights your face with its own emitter, and a trained anti-spoofing model checks for a live face. Photos held up on a phone screen were refused in testing.
As on an iPhone, the first login after boot takes your password, which also opens your keyring. Face pauses after 48 hours without the password or after 5 refused faces, and a typed password works at every prompt, straight away.
At sudo and polkit prompts the camera only starts when you press Enter. A stray sudo that nobody answers never turns it on, and with the lid shut it stays off.
If PenguID's rules check can't run, face is skipped and you simply get the password prompt. If it can't tell when you last typed your password, face waits for it. Unknown never means allowed.
The PAM module behind the Enter prompt only checks whether your answer was empty, and never keeps or logs a password. The rules helper switches to your account before it touches a file, and polkit's sandbox stays on.
How it works
irlume does the recognition. PenguID decides when face may run, asks for your intent, and shows every step on screen.
#%PAM-1.0
# face-unlock: face via irlume (press Enter); the password still works. Undo: tools/privileged-pam.sh disable
auth [success=4 default=ignore] pam_exec.so quiet /usr/bin/omarchy-hw-laptop-closed
auth [success=ignore ignore=ignore default=3] pam_exec.so quiet stdout /usr/local/lib/penguid/pam-gate check
auth [success=ignore default=2] pam_penguid.so
auth sufficient pam_irlume.so
auth optional pam_penguid.so refused
auth include system-auth
auth optional pam_exec.so quiet /usr/local/lib/penguid/pam-gate record
account optional pam_penguid.so
account include system-auth
session include system-auth
session optional pam_systemd.so class=none
/etc/pam.d/sudo, highlighted. The password stack below it is untouched, and one command takes it all out again.Get PenguID
PenguID uses irlume for recognition. Install it, then enroll:
irlume enroll
This installs the lock screen, the bar penguin and the face HUD.
omarchy plugin add https://github.com/ReidenXerx/omarchy-penguid.git --enable
Create /etc/pam.d/omarchy-lock-face with:
#%PAM-1.0
auth sufficient pam_irlume.so
auth required pam_deny.so
account include system-local-login
Optional. Builds the Enter prompt, adds the password rules and wires both prompts:
sudo ~/.config/omarchy/plugins/reidenxerx.penguid/tools/privileged-pam.sh enable
Optional. It replaces Omarchy's polkit dialog with one that knows about face:
cp -r ~/.config/omarchy/plugins/reidenxerx.penguid/polkit ~/.config/omarchy/plugins/reidenxerx.penguid-polkit
omarchy-shell shell rescanPlugins
omarchy plugin enable reidenxerx.penguid-polkit
Only one polkit agent can run per session, so stop any other one, such as hyprpolkitagent, first.
Changed your mind? omarchy plugin disable reidenxerx.penguid brings Omarchy's own lock screen back, and privileged-pam.sh disable takes face out of sudo and polkit.