[TRACKING] Fingerprint scanner compatibility with linux (ubuntu, fedora, etc)

For those using Kubuntu 21.10 (I use KDE 5.86.0 / Plasma 5.22.5), it works very well!
First, install libs using this script mentioned above:
sh libfprint_v1.94.1_install_v2.sh

Now, there is no GUI to enroll the fingerprints. In order to enroll, use the command from the post above:

fprintd-enroll -f right-index-finger

Then, after restart I couldn’t log in. There is a bug in login GUI that asks for password, but doesn’t check fingerprint until you press “Enter”. Even then it doesn’t allow to log in to KDE.
In order to be able to log into the desktop, you need to do the following:

→ Add auth sufficient pam_fprintd.so to the top of file /etc/pam.d/sddm

This is based on the more general post from here.

Otherwise, all works for sudo and for login, etc. Very handy!

1 Like

@nrp Has any progress been made on this? Would really like to get my fingerprint sensor working again in Linux.

My issue has not been getting Linux to recognize the hardware and attempt to use it. It has been the hardware. If you have installed Windows first and have configured the reader with Windows, it will not work on Linux. I’ve tried 7 different distros and have been able to get the reader installed and visible under Gnome Users. Never able to register a finger though. However, before I installed Windows I did Install Fedora 34 and I got the fingerprint working there, so I know it works if you don’t pre-register with it under a different OS.

Has anyone had any success with that scenario?

1 Like

Good news for my fellow Plasma users!

As for me, I have not been able to get this thing working under any Linux OS regardless of DE. Just kinda waiting for fprint updates to handle it I suppose. It does work with Windows 11 just fine.

2 Likes

Attempting to get the fingerprint reader working for on Linux Mint and have managed to get as far as building fprintd. Kind of wanting to pull my hair out, and would appreciate a hand.
This is the error I am getting:

meson.build:92:0: ERROR: Invalid version of dependency, need 'libfprint-2' ['>=1.94.0'] found '1.92.1'.

after running:

sudo dpkg-buildpackage -b -uc -us -d

The first time I got the error, I figured I would install the version of libfprint that fprintd is looking for. I uninstalled the previous one (1.92.1) and then substituted the tarball curled in step 1 of @Henry_Luengas 's guide with this one.

However, the error persists. It seems to me that libfprint v1.92.1 is installed somewhere, and it overrides the 1.94.1 package built in the guide? Only the latter shows up in Synaptic.

This Linux newbie thanks all for their help!

Distro: Linux Mint 20.2
Desktop Env.: Cinnamon 5.0.6
Linux Kernel: 5.14.9-051409-generic (updated manually for wifi compatibility)

Sounds like libfprint 1.94.1 didn’t build?

Why are you using

sudo dpkg-buildpackage -b -uc -us -d?

@Henry_Luengas’s instructions say to use

sudo dpkg-buildpackage -b -uc -us

I think the “-d” option tries to pull in dependencies which you don’t want to do.

Without the -d, I get an error about being unable to find the debhelper-compat dependency, which appears to not exist on Mint or is coupled with the debhelper package which has already been installed with build-dep. The workaround comes from:

Instead of doing that, edit debian/control and, in the Build-Depends section, replace the debhelper-compat dependency with debhelper (or, alternatively, just remove the dependency entirely).

Both modifying the dependency and removing it altogether resulted in errors involving requiring a compatibility level in debian/compat. Some research helped me to figure out that debhelper-compat is, in fact, an acceptable dependency in Mint and I just had to modify the version number of debhelper-compat in debian/control to match the version of debhelper I have installed.

I am still getting the same error about requiring libfprint >= 1.94.0, but now the buildpkg command works without the -d argument.

So dumb question: Did you build and install a libfprint 1.94.0 package, first, before attempting to build fprintd?

Building and installing the custom package should result in 1.92.1 being replaced upon install (that’s kinda the whole point of this exercise).

A dpkg -l libfprint* will show you what’s currently installed.

I may have when I first started tackling this problem using the information in the 18th post in this thread, but I completely removed the packages installed there via Synaptic (or pip when applicable) when that didn’t work entirely. Here is the output of dpkg -l libfprint*:

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig- 
aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                  Version      Architecture Description
+++-=====================-============-============- 
===========================>
ii  libfprint-2-2:amd64   1:1.94.1-1   amd64        async fingerprint 
library o>
ii  libfprint-2-dev:amd64 1:1.94.1-1   amd64        async fingerprint 
library o>
un  libfprint-2-doc       <none>       <none>       (no description 
available)

I think I’ve managed to get a little further by modifying debian/control and meson.build specifically in the versions of libfprint they are searching for, and now coming to this (preceded by several “implicit declaration of function” errors):

ninja: build stopped: subcommand failed.
dh_auto_build: error: cd obj-x86_64-linux-gnu && LC_ALL=C.UTF- 
8 ninja -j8 -v returned exit code 1
make: *** [debian/rules:6: build] Error 1
dpkg-buildpackage: error: debian/rules build subprocess 
returned exit status 2

Mind dumping the full build log into a gist or something? The final outcome is showing a build failure, but there’s not enough to determine what lead to that failure.

Here’s a pastebin:

So the relevant errors look like this (with the function varying by callsite):

../src/device.c: In function ‘fprint_device_get_property’:
../src/device.c:301:28: error: implicit declaration of function ‘fp_device_get_temperature’; did you mean ‘fp_device_get_features’? [-Werror=implicit-function-declaration]
  301 |                            fp_device_get_temperature (priv->dev) > FP_TEMPERATURE_COLD);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                            fp_device_get_features

Doing a quick search, this function is defined in /usr/include/libfprint-2/fp-device.h, which is part of libfprint. However, the fact this declaration can’t be found indicates the version that gcc is using is not the correct version.

If you do a find /usr -name fp-device.h 2> /dev/null, do you get multiple results outside of your home directory? I’m wondering if you have an older version of the header/library kicking around on your system, and the build system is finding the older version of libfprint.

Edit:

Huh, I also just noticed this little tidbit in the build commands:

-I/usr/local/include/libfprint-2

I’ll bet money you have an older copy of libfprint installed in /usr/local and it’s being picked up during the build.

Aha! Yes, there was a copy of libfprint in there. I’ve deleted it and now I’m going to start the process from the beginning and see what happens. Will report back.

2 Likes

No luck, it’s still finding v1.92.1 somewhere. find /usr -name fp-device.h 2> /dev/null outputs only one result. I suspect that it’s some environment variable having to do with pkgconfig? But I’m not great at reading build logs yet. Here is the new output:

Again, thanks so much for your help.

Well, the build results still indicate you’ve got some or all of an old version of the library sitting around somewhere:

../meson.build:92:0: ERROR: Invalid version of dependency, need 'libfprint-2' ['>=1.94.0'] found '1.92.1'.

I’d do a pkg-config --variable=pcfiledir libfprint-2 to hunt down where the package configuration is coming from. As an example, on my system you see this:

brettk@theseus:~$ pkg-config --variable=pcfiledir libfprint-2
/usr/lib/x86_64-linux-gnu/pkgconfig
brettk@theseus:~$ ls `pkg-config --variable=pcfiledir libfprint-2`/libfprint*
/usr/lib/x86_64-linux-gnu/pkgconfig/libfprint-2.pc

My bet is for you it’ll be in /usr/local somewhere, and while you stamped out the files in /usr/local/include and /usr/local/lib, you missed the pkg-config metadata file for the library.

If that’s right, you’ll want to delete the .pc file as well.

As an FYI for folks, Debian testing is now shipping fprintd and libfprint 1.94! So no more manual building of packages!

If you’re running stable, you’ll want to add the testing or unstable repos and pull those packages. But it seems to be working great for me, and as a bonus, their build of 1.94 is way faster at fingerprint recognition than my own build of 1.92.

1 Like

That’s probably not good advice if you’re wanting to run stable, as that’ll wind up having you update to testing or unstable.

Instead, download the sources for the unstable version and compile them.

  1. Download the three files (.dsc, .orig.tar.bz2, and .debian.tar.xz) listed under “Download Source Package” on the right sidebar at Debian -- Details of package libfprint-2-2 in sid
  2. Install the build deps: apt-get build-dep libfprint-2-2 && apt-get install libgudev-1.0-dev
  3. Unpack the sources: dpkg-source -x libfprint_1.94.1-1.dsc
  4. Compile: cd libfprint-1.94.1 && dpkg-buildpackage -b -uc
  5. Install the debs you just built, at least the library and the corresponding -dev package.
  6. Repeat for fprintd, sources listed at Debian -- Details of package fprintd in sid.

Both packages seem to compile without trouble in a debian:stable docker image.

I certainly elided some important details. In particular you have to make sure to set up your package pinning rules correctly so you can selectively pull the packages without upgrading the whole system:

https://jaqque.sbih.org/kplug/apt-pinning.html

Yeah, sometimes this can cause unexpected dependencies to get pulled in, but in this case it’s fine as libfprint and fprintd don’t themselves pull in anything else.