在 openSUSE 下启用指纹认证

“你的爽到,别人不懂”


感谢 3v1n0, nmikhailov 的杰出工作!


近期终于脱离了 2570p 的苦海换到了 T460P,这 T460P 的指纹,可谓非常好用,Windows 用起来那个爽啊,是真爽。但是我不怎么用 windows 啊,所以这个爽,你还只能想想。但是光想那可不行啊,爽不爽还得自己经常用才能体会到。

书接 上文,开启了指纹开机验证后,windows 那边其实已经就是一步到位了(一步登录),而 Linux 这边不是太好搞。相比与 Ubuntu,oS 没有关于指纹相关的预装;相比于 GNOME,KDE 没有内置指纹管理的组件。那只能回到梦开始地方,手动搞这个玩意。

  • 首先,安装 fprintdfprintd-pam,这是基础:
    sudo zypper in fprintd fprintd-pam
  • 然后这回呢你发现,我草怎么用不了,那肯定的,没驱动怎么用。libfprint 官方没有 VFS7500(138a:0090) 的驱动,那么在哪里能找到驱动呢?看 这里:
    //把库拖下来
    Git clone https://github.com/3v1n0/libfprint
    //安装依赖
    sudo zypper in meson ninja gcc-c++ openssl libopenssl-devel\
     libusb-1_0-devel libusb-compat-devel libtool gtk3-devel\
      glib2-devel libXv-devel nss-shared-helper-devel gtk-doc\
       gobject-introspection-devel cmake libgusb-devel
    
  • so far so good, 完成上述步骤其实就可以开始下一步编译了。该项目使用了 meson&ninja 的组合,不同以往的编译,这次这样编译:
    cd libfprint  
    meson . _build && sudo ninja -C _build install
    
  • well done! 看见一长串的编译安装完成后,驱动我们就算装上了,接下来处理一下 pam 模块:
    ln -s /lib64/security/pam_fprintd.so /lib64/security/pam_fprint.so
    
  • 然后不要急,坐和放宽,请重启一下 : )
  • 验证一下看看 fprint 是否检测到了设备:
    fprintd-list <用户名>
  • 如果看到了 found 1 devices 那就说明成功一大半了!马上开始给当前用户录入指纹!录入成功是绿灯,失败或有问题是红灯/黄灯(** 注意 :请为你平时所要用的的用户都 ** 分别录入 ** 一次, 包括 root**):
    for finger in {left,right}-{thumb,{index,middle,ring,little}-finger}; do fprintd-enroll -f "$finger" "$USER"; done
    
  • 最后一步!把 pam 模块接入进系统验证,有两种选择 (** 二选一 **):
    • 手动加 pam 配置文件:
      vi /etc/pam.d/common-auth-pc
      在 auth required pam_env.so 这一行下面加入
      auth sufficient pam_fprint.so
    • 使用 pam-config
      sudo pam-config -a --fprint
  • 这样就完成了,再重启一下,就可以使用了!

再简单讲讲使用方法,现在指纹可以在如下情况使用,:

  • SDDM 登录界面
  • KDE 登录界面
  • sudo
  • su
  • KDE su
    前四种情况,屏幕/终端都会提示Place your finger on the fingerprint reader,这时指纹识别器上方绿灯会亮起,进行识别即可,正常识别后绿灯会闪一下,如果太快会闪一下黄灯,认证失败会让你输入密码。
    后一种情况下,又分两种小情况,多数情况下 KDE su 的认证提示框会出来,但是不会有字面提示,此时指纹灯亮起,直接认证即可;而有些时间 KDE SU 的对话框并不会弹出来,但是指纹指示灯会亮,此时直接完成指纹识别也可以认证。
9赞

你说的我都懂,但是我没有指纹识别模块。

2赞

你的问题我也懂,买

你说的我懂,,但是垃圾顶汇指纹模块不支持 Linux

我之前也试过。更为悲催的是我之前在 windows 系统把它 disable 了。而在 BIOS 开启又没有用。后来我弄了个 windows 虚拟机,把设备挂到虚拟机里启用才成功用上。

不过感觉识别慢,后来还是 disable 了

libfprint 里有 goodix 的东西,如果是新的就等等,或者看看 gayhub,再不行就试试 open-fprintd

还是看厂家吧,我这两个本都是 vfs 的指纹一个滑动一个电容,感觉都挺好的

感谢楼主的信息,ThinkPad + GNOME 试了下用以下两条命令直接就设置成功了,连配置文件都没改。

sudo zypper in fprintd fprintd-pam
fprintd-enroll 用户名

1赞

GNOME 设置里自带了指纹相关的设置,可以在那里进行配置,就没必要用命令了

很奇怪我的 GNOME 3.32 默认没有指纹登陆选项,手动用 printd-enroll 用户名 命令录入指纹后 User 配置页面里指纹登陆选项又神奇地出现了,可能是 GNOME 版本太老的缘故。

别了吧……TouchID 我这识别率也不高啊……右手认左手不认
我这手要是脱起皮来,啥都不认,打卡都打不上那种
不过 sinkpad 这个面积大,的确好一点

1赞

很棒!但我发现,根据我的实验,使用 sudo pam-config -a --fprintd 而不链接 pam 模块是可行的。

问题是支持 Linux 的指纹识别器不是不好买就是不好找

那确实是这样,目前以我寻找的进度来看,国内百元以内能买到的指纹识别器中,应该是只有前两年很火的那种 biocome 的可能兼容(滑动解锁),电容的一个都没找到,所以这个帖子也是对笔记本写的

suse15.3 , TP470s 源上有软件包 libfprint-2-2-1.94.2-lp153.70.2.x86_64
但安装后 fprintd-list user
找不到设备,是不支持吗

麻烦 lsusb 看一下指纹设备,可以贴一下指纹设备那一行,也可以自己在 这里 查一下自己的指纹设备是否在支持列表里

谢谢。我昨天重新看了下,设备是 ID 138a:0097 Validity Sensors, Inc. 倒没有在这个官方支持列表里。但 GitHub 里说是支持的。
但安装出了问题。
libfprint> meson . _build && sudo ninja -C _build install 后出错:
…大段的关于 gtk-doc.xsl…
Warning: multiple “IDs” for constraint linkend: FpImage.

      In gtk-doc.xsl: For acronym (element-type) no value found!
    

      In gtk-doc.xsl: For acronym (transfer container) no value found!
    

      In gtk-doc.xsl: For acronym (Private) no value found!

Warning: multiple “IDs” for constraint linkend: FpImage.

html/libfprint-2-Internal-FpImageDevice.html:391: warning: no link for: “change-state” -> (change_state()).
html/libfprint-2-Sequential-state-machine.html:761: warning: no link for: “fpi-ssm-set-ssm-data” -> (fpi_ssm_set_ssm_data()).

fprintd-list user 后:
Failed to get Fprintd manager: 为 net.reactivated.Fprint 调用 StartServiceByName 出错:Failed to activate service ‘net.reactivated.Fprint’: timed out (service_start_timeout=25000ms)

看起来是 gtk-doc 的问题,你是否安装了 gtk-doc?可以更新/安装一下 gtk-doc
或者尝试给 meson 命令加上-Dgtk_doc=false参数

gtk-doc 没有问题;
-Dgtk_doc=false 参数后错误依旧。看起来应该是其他问题。 我把输出贴到附件。log.user.txt (20.1 KB)

我在 WSL 中尝试了一下,出现了一样的错误,但是我无法判断是哪里出了问题,最后的错误说的是 gtkdoc 的 invalid argument

你可以试一下这个解决方法
进入你 clone 的 libfprint 目录下,编辑 meson.build
删除第 226-229 行,即:

if get_option('doc')
    GNOME = import('gnome')
    subdir('doc')
endif

保存后重试 meson . _build && sudo ninja -C _build install 命令