Francesco Carmelo Capria

Back

ThinkPad X1C6 Fingerprint Reader on LinuxBlur image

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
bash

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
bash

4. Downloading the firmware and start the service#

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

$ cd /usr/share/python-validity
bash

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
bash

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
bash

After that we can type

$ sudo authselect enable-feature with-fingerprint
bash

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
bash

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
bash