skip to content

ThinkPad X1C6 Fingerprint Reader on Linux

/ 3 min read

ThinkPad logo

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

3. “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

4. Downloading the firmware and start the service

Let’s move to the python-validity folder with:

$ cd /usr/share/python-validity

Let’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

5. 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

After that we can type

$ sudo authselect enable-feature with-fingerprint

to 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

7. (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