Description
Hello all. As a recent Linux convert I was seeking out a way to use my Windows Hello for authentication because I had gotten very used to it on my laptop. I discovered this project but like many of you there were pains in getting it to properly install. There was a lot of scattered troubleshooting information out there and I found the existing documentation a bit lacking. I really want to keep this project alive and I know @boltgolt can't work on it as often as they used to so one day I sat down and wrote this very wordy but descriptive guide in an effort to consolidate a lot of these sources. This was written partially for my own documentation, but I'm also sharing it for others to use if they are also struggling. The main thing I intended to properly fix was installing dlib without breaking system packages and instead using a venv which I believe I succeeded in doing. I used it for my install on Mint 22.1 but it should work on Ubuntu/Debian just as well, lthough I have done no additional testing for either case. Keep in mind I have very, very little actual programing or Linux knowledge so a lot of this may be very janky. If there is any glaring issues with any of it please let me know. I am hoping if this is good enough it could potentially be merged into the official README but we will see I guess.
Installing boltgolt/Howdy 3.0.0 beta with Python 3.12 on Mint 22.1:
Specifically using:
Howdy Beta 3.0.0 (commit c4521c1 - Feb 2, 2025)
ZenBook UX425UG Q408UG
Kernel: 6.8.0-55-generic
Link to original inspiration for instructions (heavily modified)
Preparation:
-
Clone the project with version 3.0.0 beta (beta branch). Clone this to an easily accessible folder somewhere where it won't be accidentally messed with. I don't think there is anything wrong with putting this somewhere in
/home/
but it caused some slight issues for me so maybe don't do that. For me, I choose to put the parenthowdy/
folder in/opt/
. This location (/opt/howdy/
) will be referred to as/path/to/project/
. -
Edit
meson.options
in the downloaded folder and findoption('install_pam_config')
Changevalue: false
tovalue: true
- This will make sure the howdy Pam config is compiled properly and will be picked up by your system as an authentication method for all auth types in
/etc/pam.d/
. If you only want to use Howdy for specific auth types that can be found in the Howdy wiki.
- This will make sure the howdy Pam config is compiled properly and will be picked up by your system as an authentication method for all auth types in
-
(Optional) Install python-is-python3:
sudo apt install python-is-python3
Because we will be changing the path of the python binary during this build, Howdy will not require this package to function correctly. Thus, this is not essential however on distros that have separate Python and Python 3 binaries it is a nice feature to have. Very easy to uninstall if it causes problems which it shouldn't unless you also use python 2 dependent programs. -
dlib Installation:
- Ever since Debian 12/Ubuntu 23ish (and now any distro using Python 3.12 or higher I think), the OS, by default prevents you from installing pip packages into the global environment (PEP 668). The proper way to go about using pip packages then is with a python virtual environment (
venv
). The build portion of this guide will go through the process of setting this up so hold off on installing dlib until then. - If this does not end up working later on during the Howdy Install, you can override this prevention with
pip3 install dlib --break-system-packages
but it is not recommended as it may cause issues with essential system packages for your distro. (don't use sudo)
- Ever since Debian 12/Ubuntu 23ish (and now any distro using Python 3.12 or higher I think), the OS, by default prevents you from installing pip packages into the global environment (PEP 668). The proper way to go about using pip packages then is with a python virtual environment (
Setup and Building:
Build and install as partially mentioned in README. (modified)
If you want to build Howdy from source, a few dependencies are required.
Dependencies
- Python 3.6 or higher
- pip
- setuptools
- wheel
- opencv
- dev
- venv
- cmake
- make
- build-essential
- meson version 0.64 or higher
- ninja-build
- INIReader (can be pulled from git automatically if not found)
- libpam0g-dev
- libinih-dev
- llibevdev-dev
- libopencv-dev
- libevdev
To install them on Debian/Ubuntu for example:
sudo apt-get update && sudo apt-get install -y \
python3 python3-pip python3-setuptools python3-wheel \
python3-opencv python3-dev python3-venv cmake make \
build-essential meson ninja-build libpam0g-dev \
libinih-dev libevdev-dev libopencv-dev
(The backslashes are only there for formatting, can be removed if they cause issues, this is all a single command)
Now we need to configure our Python virtual environment like mentioned in step 4:
# cd to project foler
cd /path/to/project/
# Create venv under folder named .venv/ inside project
# directory that can access system-managed python packages
python3 -m venv .venv/ --system-site-packages
Note: --system-site-packages
is used to prevent the user from having to install every minute pip dependency again in the venv although you could do that to isolate howdy's python install even more if you wanted by removing the flag and installing everything like mentioned.
The .venv/
folder can be named whatever you like so long as you change your python path in the next step accordingly, .venv/
is simply a convention.
Now go back to meson.options
and change '/usr/bin/python'
in option('python_path')
to '/path/to/project/.venv/bin/python3'
. This is a crucial step for ensuring that Howdy is pointing to the correct Python binary inside of the venv and by extension the correct pip packages.
Meson Setup:
Next you need to activate the venv you just created and setup your meson build for compilation with the proper configuration.
source .venv/bin/activate
# (.venv) should now appear before your username in bash
meson setup build --python.install-env venv
# If everything appears to finish without error then you are
# good to move on
While still in the venv, it is a good time to install the pip package dependencies (mainly dlib) as well as meson (Meson was already installed earlier but for this to work properly you should use the pip version installed separately in the venv. You may even get away with not installing it through apt although I have not tested that).
You can run pip like normal for installation (don't use sudo):
pip3 install dlib meson elevate keyboard
# elevate and keyboard are other dependencies for howdy-gtk
# (GUI) and rubberstamps respectively, they are not needed if
# you don't plan on using either feature
Build:
meson compile -C build
(All of this will create and compile your Howdy build into a folder build
inside of /path/to/project
)
You can then install Howdy to your system with:
meson install -C build
Howdy should now be installed with the main directory of note at /usr/local/lib/x86_64-linux-gnu/howdy/
and configs at /usr/local/etc/howdy
.
You can leave the venv by simply running:
deactivate
Post-Install Setup:
-
First we need to designate our IR camera: This can be done easily with
v4l-utils
. If you do not already have it it can be installed withsudo apt install v4l-utils
and run with the commandv4l2-ctl
. You will then want to runv4l2-ctl --list-devices
, this will list the video devices that appear in/dev
(ex./dev/video0
,/dev/video1
, etc...). In determining which video device is the correct one,qv4l2
is another helpful tool you can use, installed it with:sudo apt install qv4l2
, run the commandqv4l2
and a GUI should pop up showing information about the selected camera. UnderFile > Open Device
you should have the option to pick from the aforementioned video devices under/dev
, here you can select them one at a time until you find the one designated for IR. ifqv4l2
does not show you readable names for each device under "General Information", testing of each device can be done by hitting the green, "Start Capturing" button in the top left until you find the device which both captures IR and activates the IR emitter (blinking red light). If the devices captures IR but does not activate the emitter, see the note aboutlinux-enable-ir-emitter
- It is also good practice to use the device name under
/dev/v4l/by-path
instead of just/dev
as these device IDs will never change whereas the/dev
names (video0, video1, etc.) may occasionally change at startup. These can be looked through withv4l2-ctl -d /dev/v4l/by-path/[fileName] -D
for each file in the directory until the correct one is found. Mine was/dev/v4l/by-path/pci-0000:05:00.3-usb-0:3:1.2-video-index0
.
- It is also good practice to use the device name under
-
Now that we have found the IR camera, it's time to designate it in the Howdy config file. Typing
sudo Howdy config
should allow you to edit it but the file is also located at/usr/local/etc/howdy/config.ini
if you wanted to edit it manually.- Find:
device_path = none
and replacenone
with your IR camera directory, in my case, this was/dev/video2
- You will likely also have to change
dark_threshold
to something larger, I set mine to 90 because my IR emitter isn't all that great.
- Find:
-
One more fix we need to do before Howdy face model setup is symlink the pam-config for howdy to the proper pam-configs folder which is not in the right place by default for some reason having to do with the default meson install location for Howdy (the meson prefix is by default
/usr/local/
of whichshare/pam-configs/howdy
is added onto it for the final install path):
`sudo ln -s /usr/local/share/pam-configs/howdy /usr/share/pam-configs/howdy- This fix can be verified by running
sudo pam-auth-update
and ensuring Howdy is present and enabled in the available options. - Note: If you want to configure Howdy to only work with specific auth types as seen in step 2, you should disable Howdy in
pam-auth-update
and follow the wiki for editing specific config files.
- This fix can be verified by running
Real Setup
To begin with creating a stored face run: sudo howdy add
. If you are given any errors involving missing packages, ensure dlib and the other dependencies were all installed properly and try again. It will likely ask you to run a script to download models on first attempt, this is normal procedure for dlib and it means things are working properly. Follow the rest of the instructions and let Howdy scan your face. If it says the scan was too dark, try increasing the dark_threshold
value in the config mentioned earlier.
- Other troubleshooting tips can be found here here
Now, you can add and test the face (sudo Howdy test
). Authentication for sudo and login should work now.
Uninstallation
Navigate to /path/to/project/build
, open a terminal and run:
sudo ninja uninstall
I think this technically just runs:
/path/to/project/.venv/bin/meson --internal uninstall
due to this excerpt from path/to/project/build/build.ninja
# Suffix
build uninstall: phony meson-internal__uninstall
build meson-internal__uninstall: CUSTOM_COMMAND PHONY
COMMAND = /opt/howdy/.venv/bin/meson --internal uninstall
pool = console
but I'm not really sure.
Notes
-
If face recognition login is still having problems. You may need to manually modify
/usr/local/lib/x86_64-linux-gnu/howdy/compare.py
. Addsys.path.append('/usr/local/lib/python3.12/dist-packages')
after theimport sys
line. You should only have to do this if you installed the pip dependencies usingpip3 install dlib --break-system-packages
instead of making a venv. -
The new version of Howdy has a GUI utility
howdy-gtk
. Python moduleelevate
is needed which I talked about installing earlier. You can activate this feature withsudo howdy-gtk
. -
linux-enable-ir-emitter provides support for infrared cameras that are not directly supported (at the very least, the kernel must recognize your infrared camera). It can almost automatically, configure any infrared camera. Use this if your IR emitter does not function when using Howdy normally.
-
Rubberstamps - (Not really ready yet) By default Howdy will authenticate you the moment you have been successfully recognized. However, a lot of users want to have more control over the authentication flow. This is where rubber stamps can help. Rubber stamps are available in Howdy 3.0.0 and up.
Stamps are activated just after your face has been successfully recognized and can approve or deny the authentication. They have to be manually enabled or disabled in the config. -
There is an issue with the GNOME keyring being locked on login as mentioned in Ubuntu 24.04 howdy 3.0.0 beta installation #976 (comment)
- The instructions may not work, but this comment could.
Sources and Helpful Links:
-
GitHub - boltgolt/howdy: 🛡️ Windows Hello™ style facial authentication for Linux
-
What is Linux PAM Module and How to configure it? - GeeksforGeeks
-
linux-enable-ir-emitter/docs/uninstallation.md at master · EmixamPP/linux-enable-ir-emitter · GitHub
-
Any experience enabling Windows Hello capabilities in Linux/Debian using Howdy : r/debian
-
IR Emitters not turning on on Lenovo S740 · Issue #269 · boltgolt/howdy · GitHub
-
Ubuntu 24.04 howdy 3.0.0 beta installation · Issue #976 · boltgolt/howdy