One script to install Howdy facial authentication on Ubuntu 24.04 (noble) and derivatives — Zorin OS 18, Linux Mint 22, Pop!_OS 24.04 — with all the patches needed to make it actually work.
Howdy 2.6.1 was released in September 2020 and ships broken on modern Ubuntu because of PEP 668, Python 3.12 deprecations, OpenCV's GStreamer default, and same-directory imports under PAM. This script automates the install and applies the fixes.
curl -fsSL https://raw.githubusercontent.com/jatroconis/howdy-noble-setup/main/setup-howdy-noble.sh -o setup-howdy-noble.sh
less setup-howdy-noble.sh # always read scripts before piping to sudo
sudo bash setup-howdy-noble.shAfter install, enroll your face:
sudo howdy -U "$USER" add
sudo -k && sudo whoami # test itThe script runs idempotently through these steps:
- Pre-flight — checks root, distro codename, identifies your IR camera (the
/dev/video*that supports only theGREYformat). - Install — adds the official
boltgolt/howdyPPA, bypasses the broken interactivepreinst(HOWDY_NO_PROMPT=1) and the PEP 668-incompatiblepostinst(stub +dpkg --configure). - Dependencies — installs
python3-numpy,python3-opencvfrom apt, thendlibviapip3 --break-system-packages(the only one with no current apt package). - Model data — runs Howdy's
dlib-data/install.shto download face landmark and recognition models fromdavisking/dlib-models. - Source patches — applies four fixes to the installed code:
pam.py:import ConfigParser→import configparser as ConfigParserpam.py:subprocess.calltocompare.pynow passescwdandPYTHONPATHso the same-directory imports work, and silencesstdout/stderrto keepsudooutput clean.compare.py: prependssys.path.insertso it can find its sibling modules under PAM.recorders/video_capture.py: forcescv2.CAP_V4L2backend (OpenCV defaults to GStreamer on noble, which mishandles many UVC IR cameras).
- Permissions — directories
755(so PAM subprocess can traverse them — the postinst'schmod 744 -Rblocks this), files644, executables755. - Wiring — creates
/usr/local/bin/howdysymlink, setsdevice_pathto your IR device inconfig.ini, disables snapshot captures (cosmetic warnings), and activates the PAM module viapam-auth-update --package.
| Distribution | Codename | Tested |
|---|---|---|
| Zorin OS 18 | noble | ✅ |
| Ubuntu 24.04 | noble | ✅ |
| Linux Mint 22 | noble | reported working by community |
| Pop!_OS 24.04 | noble | reported working by community |
Should also work on oracular (24.10), plucky (25.04), questing (25.10) but not formally validated.
On ASUS Vivobook / ProArt / Zenbook models with the Sonix 3277:0018
chipset, the IR emitter is motion-reactive — it pulses briefly when
the camera is opened, then sleeps. You do not need to run
linux-enable-ir-emitter, which can hang the USB bus on some Sonix
chips during its brute-force configure step.
The proximity sensor activates the LED when a person sits in front of the
laptop, so face auth works naturally. Confirmed empirically on the
ASUS X1607C: static IR captures show mean brightness 0 after frame 4,
but capturing while the user moves their hand produces frames with mean
brightness 58 and peaks at 253 — the LED is firing, but only on
motion.
If your bezel has two visible holes for the camera, the IR LED emitter is usually in the same hole as the RGB camera, not in the IR-camera hole. Covering "the regular camera" can dim the IR feed even though Howdy never opens that camera. Verify with a phone camera: the IR LED is visible as a faint violet/white blink through the phone screen.
This is a community patch on top of an unmaintained 2020 package. Things to know:
apt upgradeonhowdywill overwrite the source patches. Re-run this script if that happens. Or pin the package:sudo apt-mark hold howdy.dliblives outside apt because of--break-system-packages. A Python minor version bump (3.12 → 3.13) will requiresudo pip3 install --break-system-packages dlibagain.- Howdy 3.0 is in beta as of 2026-05 and aims to fix all of this upstream. When it ships stable, this script should be retired.
- boltgolt/howdy — the original project (Howdy 2.6.1 PPA)
- blamairia/howdy-patcher — provided the
ConfigParserand V4L2 fixes; this script extends them with thepam.py/compare.pyimport-path fixes and a full installer - davisking/dlib-models — the pre-trained models used for recognition
- #774 — externally-managed-environment (PEP 668)
- #890 — Ubuntu 24.04 LTS install
- #912 —
ConfigParserPython 3 import - #954 — postinst PEP 668 failure
- #960 — pip upgrade failure
- #1027 — Python 2 commands
MIT — see LICENSE.