Linux Login with your face using Howdy
Aug 2, 2021
2 minute read

I’ve been using fingerprint authentication ever since I started using my X1 Carbon 6 laptop as my daily driver. However, when I’m hooked up to my external monitor/hub, reaching across my desk to login is annoying! Fortunately, there’s a great project called Howdy that providess “Windows Hello™ style facial authentication for Linux”.

This is how I setup Howdy on my X1 Carbon Gen 6 running Mint Linux Uma with multiple cameras.

Install Howdy and Setup a facial model

This was the easiest part, just follow the instructions on the Howdy project page.

sudo add-apt-repository ppa:boltgolt/howdy
sudo apt update
sudo apt install howdy

Once installed, you need to add a model to be used for facial comparison.

sudo howdy add

Test it out!

sudo -i

Multiple Cameras Support with udev

If I’m hooked up to my external monitor and camera, I want to be able to use that in the case my laptop is closed or off to the side. Fortunately, tdaniely has the solution using udev rules.

Create the file /lib/udev/rules.d/99-howdy-camera-select.rules with the following contents:

KERNEL=="video2", SYMLINK+="videohowdy"
KERNEL=="video0", SYMLINK+="videohowdy"

Trigger udev

sudo udevadm trigger

Update the howdy config file sudo howdy config to use the dynamic symlink we created with the udev rule.

device_path = /dev/videohowdy
# this is also handy, since we could have the 
# lid closed but still use the external camera
ignore_closed_lid = false

Add a new facial model using the new camera. Make sure the light comes on for your external camera and not the builtin on your laptop.

sudo howdy add

Tweaks

Disable Confirmation Messaging

By default, when a successful login occurs, you’ll get some output like the following.

$ sudo -i
Identified face as bwigginton

Let’s disable that. This may also help situations where some software will interpret any output as a failure. Set no_confirmation = true

sudo howdy config
# Howdy config file
# Do not print anything when a face verification succeeds
no_confirmation = true
...

Pretty awesome!