在Manjaro下配置人脸识别

Howdy安装及配置过程

Posted by 星外之神 on August 17, 2021
本文字数:3779

在Manjro上配置人脸识别的缘由

我的系统登录密码设置得太长了,而且各种字母数字特殊符号,输入起来很麻烦
想到Windows系统下有Windows Hello™,由此,我决定用人脸识别来解决这个问题
就是找Linux下Windows Hello™的替代品(

过程

我的设备是联想小新Pro 16 集显版,系统环境是Manjaro KDE
#~/img/manjaro-screenfetch.webp 由于硬件太新,主线内核中没有我的无线网卡(RTL8852AE)的驱动,这台电脑又没有网线接口,我只能临时将手机通过USB连接的方式共享网络给电脑,安装好对应版本的linux-header后,在AUR中下载编译对应的网卡驱动,解决了网卡驱动问题
#~/img/RTW8852AE-driver.webp 不知道主线内核什么时候跟进,现在这个驱动稳定性实在是太菜了……

  • 2022.01.25更新:现在在Linux Kernel 5.16已经集成了RTW8852AE的驱动,不需要折腾了~

能够顺利联网以后,再来考虑人脸识别的问题

事实上,Linux下的确有一个与Windows Hello™类似的人脸识别系统——Howdy
这个项目在GitHub上已经拥有2800+颗星(截至2021.08.17)
#~/img/howdy.webp

下载、编译、安装

该软件在GitHub上的页面已经对其安装过程有所介绍

Manjaro是基于Arch开发的衍生发行版,所以可以参考Arch Wiki上的相关内容

理论上可以直接在Manjaro自带的软件管理器Pamac上直接搜索并安装howdy,然而由于howdy的源代码存储在GitHub上,在大陆访问网络并不通畅,很可能会出现下载失败的情况,所以这里我建议中国大陆的Linuxer采用另外的方法:

先在工作目录打开终端,执行:

git clone https://aur.archlinux.org/pam-python.git
git clone https://aur.archlinux.org/python-dlib.git
git clone https://aur.archlinux.org/python-face_recognition_models.git
git clone https://aur.archlinux.org/python-face_recognition.git
git clone https://aur.archlinux.org/howdy.git

#~/img/aur-git-clone.webp

然后再在各个软件的AUR页面中分别找到主要的源文件的地址(编译时能够直接下载成功的就不用找了,无须每个都找),用GitHub文件下载神器——Free Download Manager下载(FDM的AUR在这里#~/img/FDM-download.webp

下载完成后,把各个软件包所需的文件分别移动到各个已经从AUR上clone下来的文件夹中(注意:有些文件在FDM中下载的名称与pkgbuild中的不同,需要重命名)

在各个文件夹中执行:

makepkg -si

注意:

  • 要按照pam-python、python-dlib、python-face_recognition_models、python-face_recognition、howdy的顺序进行安装,否则将会提示无法满足依赖
  • 当Python版本更新后,需要重新构建这几个软件包(由于Python目录在更新之后会发生改变,如果没有重新构建,则howdy在调用库时会由于新路径下没有所需要的库而无法运行)

#~/img/makepkg.webp 安装过程到此结束

配置

在Arch Wiki上已有howdy的配置教程,但是按照其方法进行配置后在KDE上仍然不能使用人脸识别登录,在此,我给出一个更完善的方法:

红外发射装置的启用(如果不需要或设备不支持红外发射可跳过此过程)

首先,对于支持红外发射的电脑,墙裂建议开启红外发射功能提高识别的准确度与安全性(而且红外发射式还支持全黑暗状态下的人脸识别)

若需启用红外发射,需要安装linux-enable-ir-emitter

git clone https://aur.archlinux.org/linux-enable-ir-emitter.git
cd linux-enable-ir-emitter
makepkg -si

如果出现下载失败的情况,按照上一章的方法下载即可

安装完成后,执行如下命令:

sudo linux-enable-ir-emitter configure
sudo linux-enable-ir-emitter boot enable

按照终端中的提示完成该过程即可,配置过程中程序会尝试以不同方式启动电脑的红外发射装置,若成功启动则输入yes,未成功启动则输入no,逐项尝试直到成功即完成了配置过程。如果部分电脑的红外发射装置所发出的光肉眼完全不可见,也可以使用手机的相机来检测;有时候可能能观察到红外发射但是仍然无法使用,这时也可以重新运行sudo linux-enable-ir-emitter configure进行切换。此外,配置时应尽量选择与Windows Hello™效果相同的发射模式在再输入yes。(如Windows Hello™下红外发射器为闪烁状态,则应尽量选择使红外发射器闪烁的配置而不选择使其常亮的配置)

PAM配置

要启用人脸验证功能,需要在/etc/pam.d/目录下的部分文件插入:

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

将以上代码插入到所需要改动的文件的第二行切勿插入至第一行,切勿删除或改动文件的其他内容

一般而言,需要插入的文件如下,可自行按具体需要进行调整

文件 功能
login、system-local-login、sddm(如果使用的是lightdm或者gdm则是其对应的文件) 在用户登录时启用人脸识别
kde(如果使用的是其他桌面环境则是其对应文件) 在桌面环境所提供的锁屏界面中启用人脸识别
sudo、polkit-1 在授权验证中启用人脸识别

插入后的示例:/etc/pam.d/sudo

#%PAM-1.0
auth    sufficient pam_python.so /lib/security/howdy/pam.py
auth		include		system-auth
account		include		system-auth
session		include		system-auth

找出相机在系统中的文件地址

对一般的笔记本,有红外相机的是在/dev/video2,无红外的是在/dev/video0

如果不确定红外相机的位置,可以安装Skanlite这款软件:sudo pacman -Su skanlite #~/img/skanlite.webp 通过逐一测试筛选出列表中的红外相机(红外相机一般呈现出来的是光影看起来特别奇怪的黑白照片)

Howdy配置

得知了红外相机的文件位置后在终端中执行:

sudo howdy config

找到device_path = none一行,将device_path =后面的参数改为相机的文件位置,例如: #~/img/howdy-config.webp

编辑完成后,同时按下Ctrl + X键保存并退出

由于大多数桌面环境内置的锁屏界面(不是指DM的登录界面)并未以root身份运行,而howdy的文件在默认状态下对非root用户不可读,故此时锁屏界面无法启用人脸识别,这一问题可以通过更改权限解决:

chmod -R 755 /lib/security/howdy

注意:

  • 无论是SDDM(或其他DM)中还是桌面环境自带的锁屏界面中,人脸识别都并非是像Windows Hello™中那样自动启动,若需要使用人脸识别登录,需要敲击Ether键或点击登录按钮(无需输入密码)
  • 在添加了pam的各场景中,默认优先使用人脸识别进行验证,若验证失败,也可输入密码进行验证
  • polkit-1这样的GUI授权验证工具会在使用人脸识别时同步弹出密码框,此时人脸识别已经启用,不需要任何输入即可完成验证,也无需点击确认密码的按钮,若人脸识别失败,同样可以使用密码验证

添加人脸信息

打开终端,执行:

sudo howdy add

按照提示,为所设置的人脸信息输入一个不超过24字的标识,然后盯着相机即可

如果要清除所有已保存的人脸信息,执行:

sudo howdy clear

完成后的其他配置

KDE钱包(软件名字非常奇怪,这个与钱无关,是个密码管理软件,不如叫KDE钥匙包QwQ)的自动打开功能在使用人脸识别登录时会失效,这将会导致WiFi密码、Chromium系浏览器存储的密码在未进行KDE钱包验证时无法使用

  • 在22.04.3版本以后,KDE钱包的翻译已经变成了KDE密码库,更加贴切

为了避免输密码的麻烦又引入了新的输密码的步骤当然是不合理的……

但还好可以取消KDE钱包的密码验证,方法如下:

  • 打开KDE钱包管理器
  • 点击“更改密码”
  • 将两行均留空,点击确认即可

#~/img/kdewalletmanager.webp 当然,将密码留空用有一定的风险,因此,建议开启KDE钱包的“访问控制”功能保障安全 #~/img/kdewallet.webp 开启访问控制后,应用访问KDE钱包时将会弹出提醒;对于KDE本身(用于WiFi密码存储和其他用途)、Chromium系浏览器等可信软件,可以直接授予永久访问权限,不必每次都在弹出窗口中确认

免责声明

本博客仅为方法分享,不承担任何责任,按照本博客内容操作所产生的各种风险均由操作者自行承担

欢迎大家在评论区留言!

转载授权声明

本文采用署名-非商业性使用-相同方式共享 4.0协议发布,未经本人许可,禁止用于商业用途,非商业转载时请对本文原作者进行署名,基于本文的衍生作品需要按照相同方式共享