

ThinkPad X1C6 Fingerprint Reader on Linux
A tricky guide to make the Synaptics Fingerprint Reader work on Linux.
1. Intro#
What is the first thing we want to do when we buy a new laptop that we will put linux on? Obviously it is making sure that all its components work 100%.
I recently bought a well configured ThinkPad X1 Carbon 6th generation and after doing a bit of distro hopping I have decided that for the moment I will put on this laptop Fedora 37 ↗, recently released.
Everything works out of the box except one thing.. the fingerprint reader, damn. After a quick search on the internet I found a repo on GitHub called python-validity ↗ which, very briefly, allows you to enable the fingerprint reader on three distros: Ubuntu, Arch and Fedora.
Unfortunately the simple guide of the repo was not enough to make everything work and I had to do some more operations (founded on the issues tab on the repo) in order to make everything work.. here is the reason for this guide.
2. Python-validity installation#
This step is very simple: it consists of adding a specific repo for this software and replacing a couple of packages. Here are the steps of the guide for Fedora:
$ sudo dnf copr enable tigro/python-validity
$ sudo dnf install open-fprintd fprintd-clients fprintd-clients-pam python3-validity
bash3. “Touching” a pair of files#
Unfortunately, as soon as the software is installed, it will not be possible to start the systemd service since a couple of files are missing. So let’s create them by doing:
$ sudo touch /usr/share/python-validity/backoff
$ sudo touch /usr/share/python-validity/calib-data.bin
bash4. Downloading the firmware and start the service#
Let’s move to the python-validity folder with:
$ cd /usr/share/python-validity
bashLet’s now clean up the folder from the previous firmware with the command ,download the one that best suits our configuration and make it executable:
$ sudo python3 factory-reset.py
$ sudo ./validity-sensors-firmware
$ sudo chmod 755 6_07f_lenovo_mis_qm.xpfwext
$ sudo systemctl start python3-validity
bash5. Set the first fingerprint and enable the GNOME implementation#
Very simply, to set the fingerprint, you have to run the following command, which will ask you to place the index finger of your right hand a couple of times:
$ fprintd-enroll
bashAfter that we can type
$ sudo authselect enable-feature with-fingerprint
bashto integrate it with GNOME and GDM.
6. Last checks#
At this point we can say that we have finished with the installation. If everything has been done successfully we can activate the boot time service with:
$ sudo systemctl enable python3-validity
bash7. (Optional) Fix reboot / resume bug#
If we put the system in suspension, unfortunately the service will not work anymore (even if it seems active from the sysctl command).
By changing the service located in /usr/lib/systemd/system/open-fprintd-resume.service
the problem seems solved.
We then change the content of the file with the following:
[Unit]
Description=Restart devices after resume
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
[Service]
Type=oneshot
#ExecStart=/usr/lib/open-fprintd/resume.py
ExecStart=systemctl restart open-fprintd.service python3-validity.service
[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
bash