Validity / Synaptics VFS0090 (USB 138a:0090, 138a:0097)
Status: Working via the established out-of-tree vfs0090 driver.
Validity Sensors (now Synaptics) fingerprint reader, found in 2016-era ThinkPad
laptops. This entry covers 138a:0090 and 138a:0097.
What was broken
Upstream libfprint has no native driver for these Validity readers; the protocol had to be reverse engineered. They are unrecognised by stock libfprint.
What the fix does
Adds a vfs0090 driver that does match-on-host: it captures images from the
sensor and matches them using libfprint's image comparison algorithm. Most of
the device interaction and crypto comes from the Validity90 reverse-engineering
prototype.
Note: for 138a:0097, match-on-chip is the only supported path on some
firmware; behaviour can vary by unit.
There is also an unmerged upstream effort for this sensor family: libfprint MR !579 ("validity: Add new driver for Validity/Synaptics VCSFW sensors", Draft; covers 138a:0090/0097/009d and 06cb:009a).
Build and install
The driver lives on the vfs0090 branch of 3v1n0's libfprint fork (see
CREDITS). Packaged builds exist:
- Ubuntu: PPA
ppa:3v1n0/libfprint-vfs0090 - Arch: AUR package
- NixOS: in nixpkgs
From source:
git clone https://github.com/3v1n0/libfprint
cd libfprint
git checkout vfs0090
meson setup builddir --prefix=/usr
meson compile -C builddir
sudo meson install -C "$PWD/builddir"
sudo ldconfig
Then restart fprintd and enroll:
sudo pkill -9 -x fprintd
fprintd-list "$USER"
sudo fprintd-enroll "$USER"
PAM setup
Enable fprintd in your PAM stack: distro helper where there is one, otherwise
auth sufficient pam_fprintd.so. Never required. Full steps per distro are in
docs/BUILD.md.
Tested on
- Ubuntu (PPA), Arch Linux (AUR), Fedora 28, NixOS.
Packaged route (Arch)
The AUR package libfprint-vfs009x-git builds libfprint with the libre vfs0090
and vfs0097 drivers, which is the quickest way onto this driver on Arch without
managing your own fork.