在Manjro上配置人脸识别的缘由
我的系统登录密码设置得太长了,而且各种字母数字特殊符号,输入起来很麻烦
想到Windows系统下有Windows Hello™,由此,我决定用人脸识别来解决这个问题
就是找Linux下Windows Hello™的替代品(
过程
我的设备是联想小新Pro 16 集显版,系统环境是Manjaro KDE
由于硬件太新,主线内核中没有我的无线网卡(RTL8852AE)的驱动,这台电脑又没有网线接口,我只能临时将手机通过USB连接的方式共享网络给电脑,安装好对应版本的linux-header后,在AUR中下载编译对应的网卡驱动,解决了网卡驱动问题
不知道主线内核什么时候跟进,现在这个驱动稳定性实在是太菜了……
- 2022.01.25更新:现在在Linux Kernel 5.16已经集成了RTW8852AE的驱动,不需要折腾了~
能够顺利联网以后,再来考虑人脸识别的问题
事实上,Linux下的确有一个与Windows Hello™类似的人脸识别系统——Howdy
这个项目在GitHub上已经拥有2800+颗星(截至2021.08.17)
下载、编译、安装
该软件在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
然后再在各个软件的AUR页面中分别找到主要的源文件的地址(编译时能够直接下载成功的就不用找了,无须每个都找),用GitHub文件下载神器——Free Download Manager下载(FDM的AUR在这里)
下载完成后,把各个软件包所需的文件分别移动到各个已经从AUR上clone下来的文件夹中(注意:有些文件在FDM中下载的名称与pkgbuild中的不同,需要重命名)
在各个文件夹中执行:
makepkg -si
注意:
- 要按照pam-python、python-dlib、python-face_recognition_models、python-face_recognition、howdy的顺序进行安装,否则将会提示无法满足依赖
- 当Python版本更新后,需要重新构建这几个软件包(由于Python目录在更新之后会发生改变,如果没有重新构建,则howdy在调用库时会由于新路径下没有所需要的库而无法运行)
配置
在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
通过逐一测试筛选出列表中的红外相机(红外相机一般呈现出来的是光影看起来特别奇怪的黑白照片)
Howdy配置
得知了红外相机的文件位置后在终端中执行:
sudo howdy config
找到device_path = none
一行,将device_path =
后面的参数改为相机的文件位置,例如:
编辑完成后,同时按下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钱包管理器
- 点击“更改密码”
- 将两行均留空,点击确认即可
当然,将密码留空用有一定的风险,因此,建议开启KDE钱包的“访问控制”功能保障安全 开启访问控制后,应用访问KDE钱包时将会弹出提醒;对于KDE本身(用于WiFi密码存储和其他用途)、Chromium系浏览器等可信软件,可以直接授予永久访问权限,不必每次都在弹出窗口中确认
免责声明
本博客仅为方法分享,不承担任何责任,按照本博客内容操作所产生的各种风险均由操作者自行承担
欢迎大家在评论区留言!
转载授权声明
本文采用署名-非商业性使用-相同方式共享 4.0协议发布,未经本人许可,禁止用于商业用途,非商业转载时请对本文原作者进行署名,基于本文的衍生作品需要按照相同方式共享