1. 前言
1.1 背景
- 破笔记本一天不如一天,总想着让它在退休前再发光发热,毕竟我们是自带各种智能卡、指纹识别模块的商务本...
于是,就从指纹识别开始吧。
1.2 环境介绍
- 操作系统:debian9 (stretch) x64
- 指纹模块生产商:Validity Sensors
- 指纹模块 ID :138a:003d
- 需要的驱动:VFS 491
- 附:本文所使用的驱动支持的设备列表
123456789101112#define VALIDITY_VENDOR_ID 0x138A#define VALIDITY_PRODUCT_ID_301 0x0005#define VALIDITY_PRODUCT_ID_451 0x0007#define VALIDITY_PRODUCT_ID_5111 0x0010#define VALIDITY_PRODUCT_ID_5011 0x0011#define VALIDITY_PRODUCT_ID_471 0x003c#define VALIDITY_PRODUCT_ID_5131 0x0018#define VALIDITY_PRODUCT_ID_491 0x003d#define VALIDITY_PRODUCT_ID_495 0x003f#define VALIDITY_DRIVER_FULLNAME "Validity Sensors"#define VALIDITY_FP_COMPONENT "Validity"
2. 系统仓库里的 fprint 相关组件介绍
- libfprint0: 指纹模块的驱动代码
- fprintd: 守护进程,封装指纹识别的各项功能,通过 dbus 统一对外服务,解决多进程同时竞争硬件资源的问题
- libpam-fprintd:指纹识别的 PAM 模块,调用 fprintd 的接口实现身份认证
- fprint-demo:图形化的指纹识别测试程序,用于录入指纹以及其他一些配置
Notice: 这是主流发行版的软件包,但是下面编译的驱动由于并未开源,所以无法与 fprintd 协作。
不过,我们在这里将使用 HP 为 SUSE Linux 提供的二进制包(vcsFPService)来完成守护进程的功能。
3. 编译 libfprint && 安装守护进程
3.1 编译安装 libfprint
- 环境准备,下载文件: Validity_Sensors_Files.tar.gz
12sudo apt install libusb-dev libcrypto++-dev libssl-dev libglib2.0-dev libmagickcore-dev checkinstall
- 编译代码
123456tar xvf Validity_Sensors_Files.tar.gzcd Validity_Sensors_Files/libfprint-0.0.6patch -p1 < ../libfprint-validity.patch./configure --prefix=/usrmake -j N # N,并行的编译线程数,请根据自己的CPU核心数选取合适的数值
- 制作安装 deb 包
123sudo checkinstall -install=no make installsudo dpkg -i libfprint_0.0.6-1_amd64.deb
3.2 安装 validity-sensor-setup
- 环境准备
12sudo apt install alien libssl-dev
- 转换 RPM 包
123sudo alien Validity-Sensor-Setup-4.5-118.00.x86_64.rpmsudo dpkg -i validity-sensor-setup_4.5-119_amd64.deb
- 配置依赖库(这是hack手段,强行伪装旧版openssl库)
1234sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/libssl.so.0.9.8sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so /usr/lib/libcrypto.so.0.9.8ldd /usr/bin/vcsFPService # 再次确认依赖的库全都存在
Notice:关于这个,参考资料中两篇文章貌似错误地将libcrypto.so.0.9.8 指向了 libcryptopp.so;
libssl.so 和 libcrypto.so 均是包 libssl 的组件, 即 openssl 的两个主要功能;
而 libcryptopp.so 是包 libcrypto++ 的一部分,这是给一套给 C++ 使用的加密算法库。 - 配置守护进程
123456cd Validity_Sensors_Filescd service_filesudo cp -iv ./vcsFPServiceDaemon /etc/init.d/ # 覆盖之前 rpm 包里的守护进程文件sudo update-rc.d vcsFPServiceDaemon defaults # 设置开机启动sudo service vcsFPServiceDaemon start # 手动启动服务,可以看 syslog 日志检查是否成功创建新的 USB 设备
4. 编译 fprint_demo && 测试指纹录入
4.1 编译安装 fprint_demo
- 环境准备
12sudo apt install libgtk2.0-dev
- 编译代码
1234cd Validity_Sensors_Files/fprint_demo-0.4./configure --prefix=/usrmake
- 制作安装 deb 包
123sudo checkinstall -install=no make installsudo dpkg -i fprint-demo_0.4-1_amd64.deb
4.2 测试功能
由于该指纹模块会将用户指纹保存在 ~/.fprint 目录下,所以对于不同用户设置指纹,只需要以那个用户身份启动 fprint_demo 即可
- 为当前用户配置指纹
12fprint_demo
- 为 root 用户配置指纹
12sudo fprint_demo
5. 编译 pam_fprint && 配置 PAM 模块
5.1 编译安装 pam_fprint
- 环境准备
12sudo apt install libpam-dev
- 编译代码
1234cd Validity_Sensors_Files/pam_fprint-0.2./configure --prefix=/usrmake
- 制作安装 deb 包
123sudo checkinstall -install=no make installsudo dpkg -i pam-fprint_0.2-1_amd64.deb
5.2 配置 PAM 认证
- 修改 /etc/pam.d/common-auth 配置
将默认第一行 auth 的参数修改为 sufficient(建议注释该行,写入新行,如下:1234567# here are the per-package modules (the "Primary" block)# auth [success=1 default=ignore] pam_unix.so nullok_secure# fingerprint authentication trough fprintdauth sufficient pam_unix.so nullok_secureauth sufficient pam_fprint.so max_tries=2 timeout=3 debugNotice:上面的配置意味密码或者指纹任何一项均可以通过认证,默认密码认证,密码认证失败则进行指纹认证。
随后即可在 sudo、su、login 或者图形登录界面“直接回车”或者“输入错误密码”即可进行指纹认证。
6. 睡眠唤醒服务脚本
在机器进入睡眠状态(suspend)时,需要向该驱动发送信号 SIGUSR1 使设备进入相应的休眠状态。
随后在机器唤醒时(resume),需要发送信号 SIGUSR2 使设备恢复工作。
- for Systemd
123456cd Validity_Sensors_Files/service_filecp -iv resume@root.service suspend@root.service /etc/systemd/system/systemctl enable resume@root.servicesystemctl enable suspend@root.servicesystemctl daemon-reload
- for Sysvinit
123cd Validity_Sensors_Files/service_filecp -iv ValidityServiceSuspend.sh /etc/pm/sleep.d/
Notice:笔者在服务脚本 [email protected] 和 [email protected] 里向 /tmp/mylog 写入了一些记录信息,便于调试 :)
7. 锁定包版本
- 上述我们编译的数个deb包,其中 fprint_demo 在 apt 源中有更新的版本,但是如果安装的话,会顺带着安装依赖的fprintd 和 libfprint0, 这样会破坏我们的工作。所以需要设置包状态为 hold,防止自动升级 fprint_demo
12sudo apt-mark hold fprint-demo
8. 资料下载
9. 参考资料
https://bugs.launchpad.net/ubuntu/+source/libfprint/+bug/1101647/comments/20