I had a bunch of issues setting it up to work on my laptop, but now that I have I would like to compile all the bits and stuff together into one guide!

source: https://copr.fedorainfracloud.org/coprs/principis/howdy-beta/ and https://github.com/boltgolt/howdy/issues/1004

  1. install dependencies

downloading: SEE GITHUB ISSUE SECTION “DOWNLOAD DEPENDENCIES” (I can’t post the links!)

installing:

cd ~/Downloads

sudo dnf install \
python3-elevate-0.1.3-3.20240124git78e82a8.fc41.noarch.rpm \
python3-keyboard-0.13.5-3.fc41.noarch.rpm \
python3-pyv4l2-1.0.2-3.20240124gitf12f0b3.fc41.x86_64.rpm

installing opencv (note that I had to use pip install for opencv-python, so try that as well!)

sudo dnf install -y opencv opencv-devel opencv-python

sudo dnf install -y v4l-utils

When I tried to install howdy from “howdy-beta, an error pops up with “nothing provides python3dist(ffmpeg-python)…”

BettridgeCameron on GitHub is the holy saviour with this fix:

dnf install https://kojipkgs.fedoraproject.org/packages/python-ffmpeg-python/0.2.0/8.fc41/noarch/python3-ffmpeg-python-0.2.0-8.fc41.noarch.rpm

  1. installing howdy

remove non-beta howdy (it doesn’t seem to work for Fedora 41+)

sudo dnf remove howdy

sudo dnf copr remove principis/howdy

install beta howdy

sudo dnf copr enable principis/howdy-beta

sudo dnf —refresh install howdy
  1. use sudo howdy config

device-path: use ls /dev/video* or v4l2-ctl —list-devices to see all device paths and test each of them using sudo howdy test (for me it was /dev/video2)

settings to change “freedy237” recommends: (note that howdy-beta uses different words e.g. “abort if” rather than “ignore”, make sure you have howdy-beta! This stumped me for a while)

detection_notice = true
timeout_notice = true
no_confirmation = false
suppress_unknown = false
abort_if_ssh = true
abort_if_lid_closed = true
disabled = false
use_cnn = false
workaround = input
certainty = 4.0
timeout = 10
device_path = /dev/video0 # Replace with your detected device
warn_no_device = true
max_height = 480
frame_width = 640
frame_height = 480
dark_threshold = 80
recording_plugin = opencv
device_format = v4l2
force_mjpeg = true
exposure = -1
device_fps = 15
rotate = 1
  1. use sudo howdy add to add a face.

Name it anything you want, I go with names like “glasses” and “no-glasses” since…I wear glasses. Some random person on GitHub with a multi-monitor setup has it set to looking at different monitors. Whatever you want, doesn’t really matter.

You can use sudo howdy test to check if it works. A red outline means it’s an unrecognised face, a green outline with the name means it is a recognises face. no outline means not a face. Also check that whether it is a “dark frame” or not vs a “scan frame”. You might need to set the dark threshold higher using config. (this was an issue I faced as well, for me 80 works)

  1. howdy on login

sudo nano /etc/pam.d/gdm-password

add: auth sufficient pam_howdy.so

a similar thing can be done for gnome’s password pop ups (e.g. when installing an app) by going to “polkit-1”

  1. howdy on sudo (you might not want this!)

sudo nano /etc/pam.d/sudo

add: auth sufficient pam_howdy.so no_confirmation

  1. permissions

sudo chmod o+rw /dev/video*

sudo chmod -R o+rx /usr/share/howdy/dlib-data

sudo chmod +x /usr/bin/howdy

sudo usermod -aG video gdm

sudo chmod 666 /dev/video*

sudo chmod 755 /usr/lib64/security/pam_howdy.so

  1. fix SELinux perms for login screen

create “howdy.te” sudo nano howdy.te

add: (as seen on fedora copr repo)

module howdy 1.0;

require {
    type lib_t;
    type xdm_t;
    type v4l_device_t;
    type sysctl_vm_t;
    class chr_file map;
    class file { create getattr open read write };
    class dir add_name;
}

#============= xdm_t ==============
allow xdm_t lib_t:dir add_name;
allow xdm_t lib_t:file { create write };
allow xdm_t sysctl_vm_t:file { getattr open read };
allow xdm_t v4l_device_t:chr_file map;

compile and insert it

checkmodule -M -m -o howdy.mod howdy.te

semodule_package -o howdy.pp -m howdy.mod

semodule -i howdy.pp