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)


