Ubuntu 24.04 安装 Howdy 面部识别登录完整指南(含国内网络环境踩坑)

前言

Howdy 是 Linux 上的 Windows Hello 替代方案,可以通过摄像头进行人脸识别来验证 sudo 权限和系统登录。但是在国内网络环境下安装会踩不少坑,本文记录在 Ubuntu 24.04 上的完整安装过程。

环境信息

项目 版本
操作系统 Ubuntu 24.04.4 LTS (noble)
内核 6.17.0-35-generic
架构 x86_64
Python 3.12.3
摄像头 SunplusIT HD Webcam(普通 RGB,非 IR)
网络 位于中国深圳,本地 VPN 代理(端口 7897)

安装步骤

第一步:添加 Howdy PPA

bash 复制代码
sudo add-apt-repository ppa:boltgolt/howdy
sudo apt update

第二步:安装 Howdy 及依赖

bash 复制代码
sudo apt install -y libopenblas-dev   # Howdy 推荐的优化库
sudo apt install -y howdy

复制专用 一行装完:

bash 复制代码
sudo apt install -y libopenblas-dev howdy

此时不要以为安装完了就直接用 --- 安装脚本里 pip install dlib 那一步在国内大概率会失败。

第三步:配置 pip 国内镜像

先给当前用户配:

bash 复制代码
mkdir -p ~/.config/pip
cat > ~/.config/pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF

复制专用 一行写入:

bash 复制代码
mkdir -p ~/.config/pip && printf '[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\ntrusted-host = pypi.tuna.tsinghua.edu.cn\n' > ~/.config/pip/pip.conf

关键坑sudo pip3 install 使用的是 root 用户的配置,必须再配一份:

bash 复制代码
sudo mkdir -p /root/.config/pip
sudo tee /root/.config/pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF

复制专用 一行写入:

bash 复制代码
sudo mkdir -p /root/.config/pip && printf '[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\ntrusted-host = pypi.tuna.tsinghua.edu.cn\n' | sudo tee /root/.config/pip/pip.conf

第四步:手动安装 dlib 和 face_recognition

dlib 是编译型包,其源码 tarball 实际下载自 files.pythonhosted.org,清华镜像也会重定向到这里。国内直连下载极大概率超时,必须走代理

bash 复制代码
# --proxy 参数一定要加,这是最大的坑
sudo pip3 install --proxy=http://127.0.0.1:7897 dlib
sudo pip3 install --proxy=http://127.0.0.1:7897 face_recognition

复制专用 一行装完:

bash 复制代码
sudo pip3 install --proxy=http://127.0.0.1:7897 dlib && sudo pip3 install --proxy=http://127.0.0.1:7897 face_recognition

如果遇到 dpkg 中断错误(比如之前 Ctrl+C 过):

bash 复制代码
sudo dpkg --configure -a

第五步:补充缺失的模型文件

Howdy 需要 3 个 dlib 预训练模型文件,存放在 /lib/security/howdy/dlib-data/。但安装脚本经常下载不全 ------ 我遇到的是前两个文件下好了,第三个 dlib_face_recognition_resnet_model_v1.dat.bz2 静默失败。

检查:

bash 复制代码
ls -la /lib/security/howdy/dlib-data/

需要看到这三个文件:

  • mmod_human_face_detector.dat (~729 KB)
  • shape_predictor_5_face_landmarks.dat (~9.1 MB)
  • dlib_face_recognition_resnet_model_v1.dat (~22.5 MB)

如果缺了,手动下载(同样需要走代理):

bash 复制代码
cd /lib/security/howdy/dlib-data
sudo wget -e use_proxy=yes -e https_proxy=http://127.0.0.1:7897 \
  https://github.com/davisking/dlib-models/raw/master/dlib_face_recognition_resnet_model_v1.dat.bz2
sudo bzip2 -d dlib_face_recognition_resnet_model_v1.dat.bz2

复制专用 一行下载并解压:

bash 复制代码
cd /lib/security/howdy/dlib-data && sudo wget -e use_proxy=yes -e https_proxy=http://127.0.0.1:7897 https://github.com/davisking/dlib-models/raw/master/dlib_face_recognition_resnet_model_v1.dat.bz2 && sudo bzip2 -d dlib_face_recognition_resnet_model_v1.dat.bz2

第六步:配置摄像头路径

编辑 /lib/security/howdy/config.ini,把 device_path = none 改成你的实际摄像头:

bash 复制代码
sudo sed -i 's/^device_path = none/device_path = \/dev\/video0/' /lib/security/howdy/config.ini

不确定用哪个设备的话:

bash 复制代码
for dev in /dev/video*; do
  echo "=== $dev ==="
  udevadm info --query=all --name="$dev" 2>/dev/null | grep "ID_MODEL"
done

复制专用 一行版:

bash 复制代码
for d in /dev/video*; do echo "=== $d ===" && udevadm info -q all -n "$d" 2>/dev/null | grep ID_MODEL; done

第七步:修复 CLI 命令入口

howdy 的 deb 包安装后并没有创建 howdy 命令的符号链接,手动创建:

bash 复制代码
sudo ln -sf /lib/security/howdy/cli.py /usr/local/bin/howdy

第八步:配置 PAM 模块

/etc/pam.d/common-auth 文件头部添加一行,让人脸识别作为 sudo 和系统登录的认证方式:

bash 复制代码
sudo sed -i '1i auth    sufficient    pam_python.so /lib/security/howdy/pam.py' /etc/pam.d/common-auth

用的是 sufficient 而不是 required,这样人脸失败后会自动回退到密码输入,不会锁死系统

第九步:添加人脸模型

bash 复制代码
sudo howdy add

面对摄像头,系统会采集你的人脸数据。

第十步:修复 GDM 登录界面的 Python 2/3 兼容问题

前面验证 sudo howdy test 正常、人脸也添加了,但重启后登录界面还是不扫脸,直接问密码

检查日志:

bash 复制代码
sudo journalctl -u gdm --no-pager | grep howdy

如果看到 ModuleNotFoundError: No module named 'ConfigParser',说明中招了。

根因 :howdy 2.6.1 的 /lib/security/howdy/pam.py 第 10 行写了 import ConfigParser,这是 Python 2 的写法。但 Ubuntu 24.04 上的 libpam-python 已经跑在 Python 3 环境,所以 PAM 模块加载直接崩溃,静默 fallback 到密码输入。

修复 --- 运行这段脚本:

bash 复制代码
sudo python3 -c "
import re
with open('/lib/security/howdy/pam.py', 'r') as f:
    content = f.read()

old = '''# pam-python is running python 2, so we use the old module here
import ConfigParser

# Read config from disk
config = ConfigParser.ConfigParser()'''

new = '''# pam-python might be running python 2 or 3, support both
try:
    import configparser
except ImportError:
    import ConfigParser as configparser

# Read config from disk
config = configparser.ConfigParser()'''

content = content.replace(old, new)
with open('/lib/security/howdy/pam.py', 'w') as f:
    f.write(content)
print('done')
"

复制专用 一行修复:

bash 复制代码
sudo python3 -c "f=open('/lib/security/howdy/pam.py','r');c=f.read();f.close();c=c.replace('import ConfigParser','try:\n    import configparser\nexcept ImportError:\n    import ConfigParser as configparser').replace('config = ConfigParser.ConfigParser()','config = configparser.ConfigParser()');f=open('/lib/security/howdy/pam.py','w');f.write(c);f.close();print('done')"

修复后重启,登录界面就会出现人脸识别了。

踩坑总结

序号 报错 / 现象 原因 解决方法
1 E: dpkg 被中断 安装过程被 Ctrl+C 打断 sudo dpkg --configure -a
2 No module named 'dlib' howdy 的 postinst 脚本中 pip install 静默失败 手动 sudo pip3 install --proxy=http://127.0.0.1:7897 dlib face_recognition
3 dlib pip 下载超时 Read timed out files.pythonhosted.org 国内直连极慢 --proxy 参数走 VPN
4 Unable to open dlib_face_recognition_resnet_model_v1.dat 安装脚本下载模型文件时第三个静默失败 手动 wget + proxy 下载并解压
5 sudo: howdy:找不到命令 deb 包未在 /usr/bin 创建符号链接 手动 ln -sf/usr/local/bin/howdy
6 pip3 install 时还是走 PyPI 官方源 sudo pip3 用 root 配置而非用户配置 单独给 root 配 /root/.config/pip/pip.conf
7 重启后登录界面不扫脸,仍需输密码 pam.pyimport ConfigParser 是 Python 2 语法,Ubuntu 24.04 的 libpam-python 用 Python 3 导致模块崩溃 改为 try/except 兼容写法(见第十步)

验证安装

bash 复制代码
sudo howdy test     # 打开摄像头测试人脸识别
sudo howdy list     # 列出已注册的人脸模型

复制专用 一行版:

bash 复制代码
sudo howdy test && sudo howdy list

日常命令

bash 复制代码
sudo howdy add         # 添加人脸
sudo howdy remove 0    # 删除编号为 0 的模型
sudo howdy clear       # 清空所有模型
sudo howdy disable 1   # 临时禁用 howdy
sudo howdy disable 0   # 重新启用
sudo howdy snapshot    # 拍一张照片看看摄像头效果

复制专用 纯命令版:

bash 复制代码
sudo howdy add
sudo howdy remove 0
sudo howdy clear
sudo howdy disable 1
sudo howdy disable 0
sudo howdy snapshot

注意事项

  1. 普通 RGB 摄像头不支持红外 :Howdy 针对 IR 红外摄像头优化,普通 RGB 在暗光环境下可能识别不准。可以降低 /lib/security/howdy/config.inicertainty 的值来放宽要求(默认 3.5,可调至 2.5)。

  2. 安全性:人脸识别存在被照片/视频欺骗的风险,howdy 不应用于高安全性场景。

  3. PAM 不会锁死系统 :因为我们用的是 sufficient 策略,人脸失败会自动 fallback 到密码。

参考链接


本文基于 Ubuntu 24.04 + Python 3.12 + Howdy 2.6.1 + dlib 20.0.1 + face_recognition 1.3.0 撰写。

相关推荐
火山上的企鹅1 小时前
Codex实战:APP远程升级服务搭建(二)阿里云ECS部署Node升级服务_Ubuntu_systemd_Nginx
nginx·ubuntu·阿里云·qgc
承渊政道2 小时前
【MySQL数据库学习】(MySQL内置函数)
数据库·学习·mysql·ubuntu·bash·数据库开发·数据库系统
2601_9618454216 小时前
法考真题及答案解析|历年真题|资料已整理
linux·windows·ubuntu·macos·centos·gnu
zzqssliu1 天前
Next.js图片自适应压缩:跨境站点图片加载提速代码方案
linux·javascript·ubuntu
干掉乔治的猪1 天前
【如何恢复 Ubuntu 引导分区:Windows11 + Ubuntu22.04 双系统 GRUB 修复踩坑记录】
linux·ubuntu·grub·修复·双系统
l齐天1 天前
Ubuntu 中编译 Go + PBC 程序为 Windows 11 可运行文件
windows·ubuntu·golang
biubiubiu07061 天前
Ubuntu中3种定时任务
数据库·ubuntu·postgresql
星间都市山脉2 天前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
Par@ish2 天前
【网络安全】Web安全扫描工具Nikto安装和使用详细教程
安全·web安全·ubuntu