Setting Up Goodix Fingerprint Reader on Fedora 35

Let’s cut to the chase: the Dell XPS 13 9300 is one of the best Linux laptops available!

However, Dell’s decision to incorporate a fingerprint scanner from Goodix, a company known for limited support for non-Windows platforms and proprietary code, poses challenges. This post will help you navigate the installation of the Goodix sensor on Fedora 35.

While some reverse-engineering work has been done on some other Goodix sensors, it doesn’t include the 533c variant present in the XPS 9300. For more insights and community support, consider visiting the dedicated Discord channel.

This guide is an updated version of the instructions provided by Cher’s Tech Blog, with a few modifications for Fedora 35.

Prerequisites

Make sure you have installed systemfprintd and libfrint:

sudo yum install fprintd fprintd-pam

Also, ensure the necessary dependencies are in place:

sudo yum install -y gcc gcc-c++ glib glib-devel glibc glibc-devel glib2 glib2-devel libusb libusb-devel nss-devel pixman pixman-devel libX11 libX11-devel libXv libXv-devel gtk-doc libgusb libgusb-devel gobject-introspection gobject-introspection-devel ninja-build cairo cairo-devel cmake libgudev1-devel valgrind-devel
sudo yum groupinstall 'Development Tools'

Installing the Goodix Driver

Clone and switch to the right version of the libfprint repository:

git clone https://gitlab.freedesktop.org/3v1n0/libfprint.git
cd libfprint/
git checkout tags/v1.94.1+tod1

Build and install libfprint:

meson builddir && cd builddir
meson compile
meson install

Replace the existing system’s libfprint with our built version:

sudo cp libfprint/libfprint-2.so.2.0.0 /usr/lib64/
sudo cp libfprint/tod/libfprint-2-tod.so /usr/lib64/
sudo cp libfprint/tod/libfprint-2-tod.so.1 /usr/lib64/

Fetch and install the Goodix driver and udev rules:

wget http://dell.archive.canonical.com/updates/pool/public/libf/libfprint-2-tod1-goodix/libfprint-2-tod1-goodix_0.0.6.orig.tar.gz
tar -xvf libfprint-2-tod1-goodix_0.0.6.orig.tar.gz
sudo mkdir -p /usr/lib/libfprint-2/tod-1/
sudo mkdir -p /usr/local/lib64/libfprint-2/tod-1/
sudo cp libfprint-2-tod1-goodix-0.0.6/usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-tod-goodix-53xc-0.0.6.so /usr/lib/libfprint-2/tod-1/
sudo ln -s /usr/lib/libfprint-2/tod-1/libfprint-tod-goodix-53xc-0.0.6.so /usr/local/lib64/libfprint-2/tod-1/libfprint-tod-goodix-53xc-0.0.6.so
sudo chmod 755 /usr/lib/libfprint-2/tod-1/libfprint-tod-goodix-53xc-0.0.6.so
sudo cp libfprint-2-tod1-goodix-0.0.6/lib/udev/rules.d/60-libfprint-2-tod1-goodix.rules /lib/udev/rules.d/
sudo mkdir -p /var/lib/fprint/goodix

wget http://dell.archive.canonical.com/updates/pool/public/libf/libfprint-2-tod1-goodix/libfprint-2-tod1-goodix_0.0.4-0ubuntu1somerville1.tar.gz

tar -xvf libfprint-2-tod1-goodix_0.0.4-0ubuntu1somerville1.tar.gz

sudo su
cat libfprint-2-tod1-goodix_0.0.4-0ubuntu1somerville1/libfprint-2-tod1-goodix/debian/modaliases >> /lib/modules/$(uname -r)/modules.alias
exit

sudo systemctl enable fprintd
sudo systemctl start fprintd

Finally, make sure dnf does not upgrade libfprint in the future.
This would otherwise replace again the version we just built.
Run:

sudo nano /etc/dnf/dnf.conf

And add:

exclude=libfprint*

With these steps complete, your Goodix fingerprint scanner should now be ready for use on Fedora 35.