Windows Hello for Linux — Complete Setup Guide
---
Howdy brings Windows Hello-style facial recognition to Linux. It uses your laptop's built-in IR (Infrared) camera — the small dark oval on the webcam strip — to authenticate you at login, sudo prompts, and more. No password needed, just look at the camera.
⚠️ Disclaimer: This is not created by me — just a setup guide by a clueless kid learning how to set up Howdy on Ubuntu. Use at your own risk.
- ✔️ Works with Howdy
- ✔️ Easier to set up
- ❌ Can be fooled by a photo of your face
- ❌ Affected by lighting changes (too dark = fails)
- ❌ Less accurate overall
- ✔️ Can't be fooled by photos
- ✔️ Works in complete darkness (IR emitter lights your face invisibly)
- ✔️ More accurate and faster recognition
- ✔️ What Windows Hello uses
💡 Recommendation: Use the IR camera for best results. It's more secure and reliable.
| Item | Details |
|---|---|
| OS | Ubuntu 24.04 LTS |
| IR Camera | Any IR webcam (e.g. Integrated_Webcam_FHD) |
| Python | 3.12+ |
| Howdy | 2.6.1 |
Ubuntu 24.04 uses PEP 668 which blocks system-wide pip installs by default.
Always use --break-system-packages flag:
sudo pip install --break-system-packages \
dlib \
face_recognition \
opencv-python \
ffmpeg-python \
numpy --ignore-installed
⚠️ If numpy throws a conflict error, add--ignore-installed— it's already installed via apt and works fine.
sudo add-apt-repository ppa:boltgolt/howdy
sudo apt update
sudo apt install howdy💡 If install gets interrupted, fix with:
sudo dpkg -i --force-all /var/cache/apt/archives/howdy_2.6.1_all.deb sudo dpkg --configure -a
Howdy 2.6.1 on Ubuntu installs as a PAM module only — no binary in PATH.
Create an alias to use it like a normal command:
echo 'alias howdy="sudo python3 /usr/lib/security/howdy/cli.py"' >> ~/.bashrc
source ~/.bashrcNow howdy add, howdy config, howdy list all work.
Howdy's pam.py uses the Python 2 module name ConfigParser which doesn't exist in Python 3:
sudo sed -i 's/import ConfigParser/import configparser as ConfigParser/g' \
/usr/lib/security/howdy/pam.pyv4l2-ctl --list-devicesTest each device visually — IR camera will look grey/monochrome:
ffplay /dev/video0 # regular webcam — shows color
ffplay /dev/video2 # IR camera — shows grey/infraredYour IR camera is usually /dev/video2.
howdy configChange these settings:
[video]
device_path = /dev/video2 # your IR camera device
certainty = 4.5 # lower = stricter (1-10)
timeout = 10 # seconds before giving up
recording_plugin = opencv # more stable than ffmpeg for IR
force_mjpeg = true # fixes IR frame decoding issues
dark_threshold = 50 # handles IR lighting
[snapshots]
capture_failed = false # disable to avoid permission errors
capture_successful = falsehowdy add- Look directly at the IR camera (dark oval — not the regular webcam)
- Enter a label like
zangwhen prompted - Stay still and well-lit while frames are captured
Check if Howdy is already in PAM:
cat /etc/pam.d/common-auth | grep howdyIf empty (nothing returned), add it manually:
sudo nano /etc/pam.d/common-authAdd this as the very first line:
auth sufficient /usr/lib/security/pam_python.so /usr/lib/security/howdy/pam.py
💡 Find the correct
pam_python.sopath with:find / -name "pam_python.so" 2>/dev/null
Suppress OpenCV GStreamer warnings:
echo 'export OPENCV_LOG_LEVEL=ERROR' >> ~/.bashrc
source ~/.bashrcFix Python deprecation warning in compare.py:
sudo sed -i 's/datetime.datetime.utcnow()/datetime.datetime.now(datetime.timezone.utc)/g' \
/usr/lib/security/howdy/compare.pyFix snapshot permission error:
sudo chmod 777 /usr/lib/security/howdy/snapshotssudo -k
sudo lsLook at the IR camera. You should see:
Identified face as zang
| Problem | Cause | Fix |
|---|---|---|
Nala already running instance |
Ctrl+Z suspended a previous install | Kill PIDs + clear lock files |
howdy: command not found |
No binary installed — PAM module only | Create alias pointing to cli.py |
half-installed (iHR) |
Install was interrupted | sudo dpkg -i --force-all howdy_*.deb |
externally-managed-environment |
Ubuntu 24.04 PEP 668 | Add --break-system-packages to pip |
ConfigParser module not found |
Python 2 vs 3 naming | sed patch on pam.py |
| PAM not triggering face scan | Howdy never added to PAM | Manually add to common-auth |
pam_python.so not found |
Wrong path in PAM config | find / -name pam_python.so |
AttributeError: 'int' has no isdigit |
Bug in ffmpeg recorder | Switch to recording_plugin = opencv |
| GStreamer warnings in terminal | OpenCV verbose logging | export OPENCV_LOG_LEVEL=ERROR |
permission denied on snapshots |
Wrong folder permissions | sudo chmod 777 howdy/snapshots |
| Face not recognized | Low certainty or bad lighting | Set certainty = 4.5, re-add model |
howdy add # add a new face model
howdy list # list saved models
howdy remove # remove a model
howdy enable # enable Howdy
howdy disable # disable Howdy temporarily
howdy config # edit configurationThis entire setup — every error, every fix, every config tweak — was debugged live with Claude by Anthropic.
╔══════════════════════════════════════════╗
║ ║
║ ✦ Claude by Anthropic ✦ ║
║ ║
║ AI that guided this setup from ║
║ first error to final working ║
║ facial authentication — live. ║
║ ║
║ https://claude.ai ║
║ ║
╚══════════════════════════════════════════╝
Made with ❤️ on Ubuntu 24.04 • Debugged with Claude (Anthropic)