Howdy

出自 ArchWiki

Howdy 是一个在 Linux 上模仿 Windows Hello 的程序。它使用电脑的红外传感器和摄像头来验证用户的面部。

安装

安装 howdyAUR 软件包。

配置

设置 Howdy 在需要时启动

为了让 Howdy 验证用户身份,必须对任何可能使用 Howdy 的 PAM 配置文件进行少量更改。必须将以下行添加到任何配置文件中

auth sufficient pam_python.so /lib/security/howdy/pam.py

注意:当使用 Howdy 3.0.0 BETA 及以上版本 (howdy-beta-gitAUR) 时,该行应为

auth sufficient /lib/security/pam_howdy.so

howdy/pam.py (或 pam_howdy.so) 作为 sufficient 添加到 /etc/pam.d/ 中的任何配置文件将仅提示进行面部验证。如果您无法 Ctrl+c 面部验证(由于缺少 shell),这将阻止使用密码。为了在图形界面中使用密码或面部,请将以下行添加到任何所需文件的顶部

auth sufficient pam_unix.so try_first_pass likeauth nullok

添加正确的红外传感器

确定连接到红外传感器的正确 /dev/videoX 文件。这可以通过各种程序完成,例如 cheesefswebcamAURv4l-utils

以下是使用 v4l-utils 软件包中包含的工具执行此操作的示例

$ v4l2-ctl --list-devices
Integrated_Webcam_HD: Integrate (usb-0000:00:14.0-11):
        /dev/video0
        /dev/video1

EyeChip: Tobii Video (usb-0000:00:14.0-3.4.3):
        /dev/video4
        /dev/video5

HD Webcam C525 (usb-0000:00:14.0-3.4.4):
        /dev/video2
        /dev/video3

如上面的示例所示,该命令可能会显示多个网络摄像头设备,并且对于每个设备,它可能会显示多个 /dev/videoX 路径。通常,选择两个路径中的第一个路径就可以正常工作。

如果您有多个网络摄像头和/或红外传感器,使用 /dev/videoX 可能会随着时间的推移变得不稳定,因为它在某些设备拔出并重新插入后可能会更改路径。在这种情况下,可以考虑使用 Video4Linux/dev/v4l/by-id/ 路径中提供的更一致的路径名。

$ ls -l /dev/v4l/by-id
total 0
lrwxrwxrwx 1 root root 12 Dec  3 15:01 usb-046d_HD_Webcam_C525_BE4703F0-video-index0 -> ../../video2
lrwxrwxrwx 1 root root 12 Dec  3 15:01 usb-046d_HD_Webcam_C525_BE4703F0-video-index1 -> ../../video3
lrwxrwxrwx 1 root root 12 Dec  3 14:47 usb-CNFGH19N306021000582_Integrated_Webcam_HD-video-index0 -> ../../video0
lrwxrwxrwx 1 root root 12 Dec  3 14:47 usb-CNFGH19N306021000582_Integrated_Webcam_HD-video-index1 -> ../../video1
lrwxrwxrwx 1 root root 12 Dec  3 14:47 usb-Tobii_Technology_AB_EyeChip_IS404-100109244721-video-index0 -> ../../video4
lrwxrwxrwx 1 root root 12 Dec  3 14:47 usb-Tobii_Technology_AB_EyeChip_IS404-100109244721-video-index1 -> ../../video5

您可以通过拔出并重新插入设备,然后重新列出目录来验证这些 v4l 路径是否不会更改。

找到正确的文件名后,使用您喜欢的编辑器或 howdy config(以 root 用户身份运行)编辑 /lib/security/howdy/config.ini。将 device_path = null 更改为 device_path = path_to_device

/lib/security/howdy/config.ini
# The path of the device to capture frames from
# Should be set automatically by an installer if your distro has one
device_path = path_to_device

要自定义 howdy config 使用的编辑器,请设置 EDITOR 变量

# EDITOR=editor howdy config

向 Howdy 添加面容

为了向 Howdy 添加面部模型,以 root 用户身份运行 howdy add

保护安装安全

某些版本的 Howdy 在验证用户身份时会拍摄网络摄像头快照,并将其保存在 /lib/security/howdy/snapshots 中。这可能被认为是一个安全漏洞。有权访问的攻击者可以很容易地找到与目标用户成功登录对应的快照,将其打印出来,并使用打印的照片来冒充目标用户,该用户可能拥有更多权限。当然,攻击者也可以使用目标用户的任何其他照片,但 Howdy 将这个过程过于简化了。

为了避免这种攻击以及关于磁盘空间的意外情况,请在 /lib/security/howdy/config.ini 中禁用拍摄快照

[snapshots]
capture_failed = false
capture_successful = false

故障排除

红外发射器不工作

如果红外摄像头已打开但红外发射器不工作,一种可能的情况是您选择了错误的文件。例如,/dev/video0/dev/video2 都可以很好地识别您的面部,但只有 /dev/video2 会打开红外发射器。因此,请确保您已检查了所有 /dev/videoX

否则,您应该按照 linux-enable-ir-emitter 中的说明启用红外发射器。安装 linux-enable-ir-emitterAUR 软件包。

注意: 由于上游代码的原因,最新版本的 linux-enable-ir-emitterAUR 软件包通过在软件包安装运行其自己的脚本来生成 systemd 服务文件。这种行为可能不是您想要的,因为它通过自定义脚本修改了文件系统根目录。众所周知,直到 3.2.0-2 版本为止,该软件包都带有 systemd 服务,因此您可能需要选择适合您的版本。

测试红外摄像头

首先验证您的红外摄像头是否正常工作可能很有用。可以使用 gstreamer 软件包通过以下命令拍摄一组 10 张 jpg 照片来测试您的设备

gst-launch-1.0 v4l2src device=path_to_device num-buffers=10 ! image/jpeg ! multifilesink location="frame-%02d.jpg"

Howdy 似乎不工作

通过以 root 身份运行 howdy test 来验证 Howdy 是否正常工作。如果看起来工作正常,请检查任何 PAM 配置文件并验证它们是否正在工作。某些程序(例如 SDDM [1])与 PAM 不能正常工作,这可能会导致意外结果。

识别输入设备时出错

某些红外传感器(例如 Thinkpad T480 的红外传感器)需要在配置文件中定义帧宽度和高度

frame_width = 400
frame_height = 400

您的传感器输出的宽度和高度:v4l2-ctl --list-devices --all