You are not logged in.
I recently picked up a resold ThinkPad P51 off of eBay that previously had Windows 11 installed.
I ran into several hurdles getting the fingerprint sensor (138a:0097) working on Arch, particularly due to the recent transition to Python 3.14 and leftover Windows encryption/SGX locks on the hardware.
"Windows Lock" (Type 15 Error): Because the laptop came with Windows 11 installed, the sensor's internal Match-on-Chip storage was paired with a Windows enclave. This caused the driver to throw a: Exception: Dont know how to handle message type 15 error.
Python 3.14 Site-Package Pathing: On Arch, the AUR packages may install files into the 3.13 directory, or the system may fail to find the validitysensor module while running Python 3.14.
"Refusing to Start" Loop: The python-validity driver has a safety backoff. If it crashes during setup, it creates a lockfile preventing further attempts: Exception: Refusing to start more than 10 times per minute.
Resource Busy (Errno 16): The kernel or a hung background service often clamps onto the USB device, preventing initialization scripts from talking to the hardware.
D-Bus NameHasNoOwner: Occurs when attempting to run the driver manually while the open-fprintd bridge is stopped.
If your laptop had Windows, you MUST clear the chip's internal storage or it will reject the Linux driver's encryption handshake.
1. Reboot into BIOS.
2. Go to Security > Fingerprint.
3. Select Reset Fingerprint Data.
4. Save and Reboot into Arch.
Install the required driver stack from the AUR:
yay -S python-validity open-fprintd fprintdBecause Arch is currently on Python 3.14, the background services may fail to find the correct site-packages.
We need to run the driver manually to perform the initial "handshake."
Stop background interference
To kill any hung processes and clear the "refuse to start" timer:
sudo systemctl stop python3-validity open-fprintd
sudo killall -9 python3 2>/dev/null
sudo rm -f /var/run/python-validity.last_startPerform the cryptographic pairing
Run this script and swipe when prompted to generate new keys. This fixes the "Type 15" error:
sudo PYTHONPATH=/usr/lib/python3.14/site-packages python3 /usr/share/python-validity/playground/prototype.pyStart the D-Bus Bridge & Driver
Open two terminal windows:
Terminal 1 (The Driver):
sudo systemctl start open-fprintd
sudo PYTHONPATH=/usr/lib/python3.14/site-packages python3 /usr/lib/python-validity/dbus-service --debugThe first command starts the "Bridge" (open-fprintd).
The second runs the actual hardware driver in the foreground.
Keep this window visible; it uploads the firmware and initializes the USB link. Do not close this window until you are finished with Terminal 2.
Terminal 2 (The Enrollment):
fprintd-enroll your_usernameThis tells the driver to activate the physical sensor. When you run this, the sensor should light up.
Swipe your finger repeatedly until you see enroll-completed in Terminal 2.
Note: If Terminal 1 crashes with a "Resource Busy" error, it means a background process (likely a hung instance of the driver) tried to steal the USB device. To fix this, simply run:
sudo killall -9 python3to kill all python processes and try again.
Once enrollment is complete, enable the services permanently:
sudo systemctl enable --now python3-validity open-fprintdEdit /etc/pam.d/system-auth to enable the sensor for login and sudo. Add the pam_fprintd.so line right after preauth:
auth required pam_faillock.so preauth
auth sufficient pam_fprintd.so
auth [success=1 default=bad] pam_unix.so try_first_pass nullokArch Wiki Lenovo ThinkPad P51 Fingerprint Sensor
Arch Wiki fprint configuration
Troubleshooting Note:
If you see "Resource Busy," ensure you've killed all python instances (see command under "Terminal 2") and stopped the systemd services before running the debug command.
---
Personal note:
This post is my first on the forum! I hope the formatting is okay, and I hope this helps some other poor soul at their wits end ![]()
Last edited by cyberslav (Yesterday 23:35:27)
Tested on animals. They didn't understand it either.
Offline