This guide sets up facial recognition (using IR camera) and fingerprint authentication on Ubuntu, similar to Windows Hello.
- Ubuntu 24.04 with GNOME
- Windows Hello compatible IR camera
- Fingerprint sensor (optional)
sudo add-apt-repository -y ppa:boltgolt/howdy
sudo apt update
printf 'y\nb\n' | sudo apt install -y howdysudo apt install -y python3-numpy python3-opencv
sudo pip3 install dlib --break-system-packagesecho '#!/bin/bash
exec python3 /lib/security/howdy/cli.py "$@"' | sudo tee /usr/local/bin/howdy > /dev/null
sudo chmod +x /usr/local/bin/howdysudo sed -i 's/import ConfigParser/import configparser as ConfigParser/' /lib/security/howdy/pam.pyList your video devices:
v4l2-ctl --list-devicesCheck which device is the IR camera (usually labeled "Integrated I" vs "Integrated C" for color):
v4l2-ctl -d /dev/video0 --info
v4l2-ctl -d /dev/video2 --infoThe IR camera typically outputs grayscale (GREY format).
sudo sed -i 's|^device_path = .*|device_path = /dev/video2|' /lib/security/howdy/config.iniReplace /dev/video2 with your actual IR camera device.
sudo sed -i 's|^dark_threshold = .*|dark_threshold = 100|' /lib/security/howdy/config.inisudo sed -i 's/^capture_failed = true/capture_failed = false/' /lib/security/howdy/config.ini
sudo sed -i 's/^capture_successful = true/capture_successful = false/' /lib/security/howdy/config.iniThe IR emitters need to be enabled for the camera to see your face.
cd /tmp
curl -sL "https://github.com/EmixamPP/linux-enable-ir-emitter/releases/download/6.1.2/linux-enable-ir-emitter-6.1.2-release.systemd.x86-64.tar.gz" -o ir-emitter.tar.gz
sudo tar -C / --no-same-owner -m -xzf ir-emitter.tar.gzRun the interactive configuration tool:
linux-enable-ir-emitter configureFollow the prompts to detect which camera control enables the IR emitters.
sudo systemctl enable linux-enable-ir-emitter.service
sudo systemctl start linux-enable-ir-emitter.servicesudo howdy addLook straight at the camera when the IR light turns on. Enter a label when prompted (e.g., "main").
sudo howdy testfprintd-enrollSwipe your finger multiple times when prompted.
fprintd-list $USERsudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.backupsudo sed -i '/# here are the per-package modules/a # Biometric auth (face recognition with password fallback)\nauth\tsufficient\t\t\tpam_python.so /lib/security/howdy/pam.py' /etc/pam.d/common-authecho 'OPENCV_LOG_LEVEL=ERROR' | sudo tee -a /etc/environment > /dev/null| Method | Terminal/sudo | Lock Screen | GDM Login |
|---|---|---|---|
| Face Recognition | Yes | Yes | Yes |
| Fingerprint | No* | Yes | Yes |
| Password | Yes (fallback) | Yes (fallback) | Yes (fallback) |
*Fingerprint in terminal requires additional setup and doesn't work reliably.
# Face recognition
howdy list # List enrolled face models
howdy add # Add another face model
howdy remove <id> # Remove a face model
howdy test # Test face recognition
howdy disable 1 # Temporarily disable howdy
howdy disable 0 # Re-enable howdy
# Fingerprint
fprintd-list $USER # List enrolled fingerprints
fprintd-enroll # Enroll another finger
fprintd-delete $USER # Delete all fingerprints
# IR Emitter
linux-enable-ir-emitter run # Manually enable IR
linux-enable-ir-emitter configure # ReconfigureIncrease the dark_threshold in /lib/security/howdy/config.ini
Reconfigure with linux-enable-ir-emitter configure
Kill processes using the camera: sudo fuser -k /dev/video2
Boot into recovery mode and restore the backup:
cp /etc/pam.d/common-auth.backup /etc/pam.d/common-authAlways keep a backup of your PAM config. If you get locked out:
- Boot into recovery mode (hold Shift during boot)
- Select "root shell"
- Remount filesystem:
mount -o remount,rw / - Restore backup:
cp /etc/pam.d/common-auth.backup /etc/pam.d/common-auth - Reboot:
reboot