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

Yep, this is exactly what happened to me.

@Atul_Ingle @kylemsguy have you both also tried taking a finger you wouldn’t ever use like your pinky finger let’s say and registering it like this:

fprintd-enroll -u username -f right-index-finger

Doing that will force it to set it as that finger in the database, but since it won’t match anything you have tried before, it may allow registration and consequently then allow deletion or even perhaps running of the script to clear up the database.

I haven’t had a chance to do anything else with testing the new version of libfprint, been busy but thought this might help as it was something I tried when troubleshooting originally.

Unfortunately, this just causes fprintd to crash like detailed before.

Is -u a flag from a newer version of fprintd?

I think that may have just been a mistype from memory. On Manjaro username is a positional argument not an optional one:

Usage:
  fprintd-enroll [OPTION…] [username] Enroll a fingerprint

Help Options:
  -h, --help        Show help options

Application Options:
  -f, --finger      Finger selected to verify (default is automatic)

fprintd-enroll didn’t work for me. I got a message saying Enroll result: enroll-stage-passed and then no response when I touched the fingerprint reader.

Running journalctl -xeu fprintd.service shows these logs:

Sep 27 19:30:52 atul-laptop fprintd[4628]: parse fingerlist error
Sep 27 19:30:52 atul-laptop systemd[1]: fprintd.service: Main process exited, code=dumped, status=5/TRAP

@Adrian_Sanabria did you need to do anything to get fingerprint working with 1password? I have it working for sudo and login, but 1password hasn’t noticed the fingerprint reader.

And if not, how did you install 1password? I installed via the ubuntu app store, and I was wondering if a different method might get me a newer version or something like that.

Managed to get it working last night by working through the instructions for Ubuntu 2.1.04 had to add I believe it was Cmake and libfprint-dev then it was picked up in gnome and works great

Ok, after looking through the 121 posts… Has anyone come up with a definitive guide to get fprint to work on Ubuntu/Kubuntu ? I’ve tried a couple above and still no joy… If I missed it, I apologize now…

1 Like

@Reese_Borel I got mine working on Pop!_OS (which is ubuntu based) using version 1.94.0 but I want to re-do it for version 1.94.1. The only problem I had was setting up the PAM module built from source. I had to install the libpam-fprintd package from apt, which also brought along an older versoin of fprintd with it as a dependency. Still works but I’d rather not have duplicate versions. Once I figure that out I’ll write up a guide.

2 Likes

I solved this by building my own deb packages for fprintd and libfprint with appropriate version numbers. This ensures dependencies are met but the packages don’t get replaced or duplicated accidentally.

I wrote up how I did that here:

Since Pop is ultimately based on Debian the same procedure should work for you.

4 Likes

I’m trying to replicate your process on Pop but I’m running into some problems, (I’ve never built a deb before).

I’ve tried v1.92.1 and v1.94.1, getting the same problem with both.

First difference is the name of deb source:
apt source --download-only libfprint
yields the file:
libfprint_1.90.7+git20210222+tod1-0ubuntu2.debian.tar.xz

Next difference, the following section doesn’t exist in the rules file:

We’ll also need to comment out the lines for moving around the autosuspend files (as far as I can tell they’re only needed for the ELAN driver)

Here is my resulting rules file:

#!/usr/bin/make -f

export DEB_BUILD_MAINT_OPTIONS = optimize=-lto

export DPKG_GENSYMBOLS_CHECK_LEVEL = 2

BUILDDIR = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)

# Configuration arguments
CONFIG_ARGS = \
	-Dudev_hwdb_dir=/lib/udev/hwdb.d \
	-Ddrivers=goodixmoc \
	-Dgtk-examples=false

%:
	dh $@ --with gir

override_dh_auto_configure:
	dh_auto_configure -- $(CONFIG_ARGS)

override_dh_auto_test:
	dh_auto_test -- -C $(BUILDDIR) --timeout-multiplier 5

Another Difference is that /debian already has the .symbols file you provide, I tried it with your and the original one.

Final Difference is the libfprint-2-2.install file already uses hwdb.d instead of rules.d, it also has a [0-9] regex isntead of *, but i tried it both ways:

Next up, we need to modify debian/libfprint-2-2.install to install hwdb.d and not rules.d

Here’s my libfprint-2-2.install:

lib/udev/hwdb.d/
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so.*

The package build seems to get pretty far but errors out on line 16 of debian/rules. Here’s the end of the output:

   dh_install
dh_install: warning: Cannot find (any matches for) "usr/lib/x86_64-linux-gnu/libfprint-[0-9]-tod.so.*" (tried in ., debian/tmp)

dh_install: warning: libfprint-2-2 missing files: usr/lib/x86_64-linux-gnu/libfprint-[0-9]-tod.so.*
dh_install: warning: Cannot find (any matches for) "usr/lib/x86_64-linux-gnu/libfprint-[0-9]-tod.so.*" (tried in ., debian/tmp)

dh_install: warning: libfprint-2-tod1 missing files: usr/lib/x86_64-linux-gnu/libfprint-[0-9]-tod.so.*
dh_install: warning: Cannot find (any matches for) "usr/include/libfprint-[0-9]/tod-[0-9]/*" (tried in ., debian/tmp)

dh_install: warning: libfprint-2-tod-dev missing files: usr/include/libfprint-[0-9]/tod-[0-9]/*
dh_install: warning: Cannot find (any matches for) "usr/lib/x86_64-linux-gnu/libfprint-[0-9]-tod.so" (tried in ., debian/tmp)

dh_install: warning: libfprint-2-tod-dev missing files: usr/lib/x86_64-linux-gnu/libfprint-[0-9]-tod.so
dh_install: warning: Cannot find (any matches for) "usr/lib/x86_64-linux-gnu/pkgconfig/libfprint-[0-9]-tod-[0-9].pc" (tried in ., debian/tmp)

dh_install: warning: libfprint-2-tod-dev missing files: usr/lib/x86_64-linux-gnu/pkgconfig/libfprint-[0-9]-tod-[0-9].pc
dh_install: error: missing files, aborting
make: *** [debian/rules:16: binary] Error 255
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2

debian/usr/lib/x86_64-linux-gnu/ has the following files after the error:

setebos@setebos ~/D/f/libfprint ((v1.94.1))> ls -la debian/tmp/usr/lib/x86_64-linux-gnu/
total 1288
drwxr-xr-x 1 root root     150 Sep 30 11:48 ./
drwxr-xr-x 1 root root      32 Sep 30 11:48 ../
drwxr-xr-x 1 root root      36 Sep 30 11:48 girepository-1.0/
lrwxrwxrwx 1 root root      16 Sep 30 11:48 libfprint-2.so -> libfprint-2.so.2*
lrwxrwxrwx 1 root root      20 Sep 30 11:48 libfprint-2.so.2 -> libfprint-2.so.2.0.0*
-rwxr-xr-x 1 root root 1307544 Sep 30 11:48 libfprint-2.so.2.0.0*
drwxr-xr-x 1 root root      28 Sep 30 11:48 pkgconfig/

Your framework page was great, I hope you can provide some insight into this .deb build issue!

@Henry_Luengas I’m trying on Kubuntu 21 and running into the exact same error(s).

1 Like

Must have something to do with libfprint-2-tod. I’m going to investigate that.

@Reese_Borel @Brett_Kosinski Downloading the actual package source that you used on debian did the trick, the ubuntu repositories have some different one that I believe is a fork or something.

libfprint_1.90.7-2.debian.tar.xz

After that your instructions applied much more directly, except neither the original symbols file nor the one you provided worked for v1.94.1

dpkg-gensymbols: error: some new symbols appeared in the symbols file: see diff output below
dpkg-gensymbols: warning: debian/libfprint-2-2/DEBIAN/symbols doesn't match completely debian/libfprint-2-2.symbols

So I copied the contents of debian/libfprint-2-2/DEBIAN/symbols to debian/libfprint-2-2.symbols and then it worked like a charm!

2 Likes

Yeah that’s no surprise. The symbols change from version to version. Nice job getting it working!

Final Guide for v1.94.1 on Ubuntu/Pop!_OS

All credit to @Brett_Kosinski’s original guide.

libfprint 1.94.1

  1. To begin, create a working directory and download the Debian package source, the libfprint source, and associated build dependencies:
mkdir build_dir
cd build_dir
curl -O https://deb.debian.org/debian/pool/main/libf/libfprint/libfprint_1.90.7-2.debian.tar.xz
sudo apt build-dep libfprint
sudo apt-get install libgudev-1.0-dev
git clone https://github.com/freedesktop/libfprint.git 
  1. Now, we’ll jump into the libfprint repository, check out the 1.94.1 tag, and unpack the debian control files:
cd libfprint
git checkout v1.94.1
tar -xJvf ../libfprint_1.90.7-2.debian.tar.xz
  1. To begin, we need to make some changes to the ./debian/rules file. First, we’ll update the rules to only build the driver we need:
CONFIG_ARGS = \
    -Dudev_rules_dir=/lib/udev/rules.d \
    -Dgtk-examples=false \
    -Ddrivers=goodixmoc
  1. We’ll also need to comment out the lines for moving around the autosuspend files (as far as I can tell they’re only needed for the ELAN driver):
override_dh_install:
#	mv debian/tmp/lib/udev/rules.d/60-libfprint-2-autosuspend.rules \
#		debian/tmp/lib/udev/rules.d/60-libfprint-2.rules
  1. Next up, we need to modify ./debian/libfprint-2-2.install to install hwdb.d and not rules.d:
lib/udev/hwdb.d/
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-*.so.*
  1. Next, we’ll update ./debian/changelog to add an entry for our version at the top of the file, you can add your own info:
libfprint (1:1.94.1-1) unstable; urgency=medium

  * custom build for use on my Framework laptop

 -- Brett Kosinski (brettk) <email>  Fri, 6 Sep 2021 20:05:00 -0700
  1. Build the package, it will fail:
sudo dpkg-buildpackage -b -uc -us
dpkg-gensymbols: error: some new symbols appeared in the symbols file: see diff output below
dpkg-gensymbols: warning: debian/libfprint-2-2/DEBIAN/symbols doesn't match completely debian/libfprint-2-2.symbols
  1. Fix this error by copying the symbols file it is comparing against:
cp ./debian/libfprint-2-2/DEBIAN/symbols ./debian/libfprint-2-2.symbols
  1. Build again and it should work this time, producing 4 .deb files in the parent directory:
sudo dpkg-buildpackage -b -uc -us
  1. Install these with dpkg:
sudo dpkg -i ../*.deb
  1. You can remove all the files now and uninstall the build dependencies if desired.

frpintd 1.94.0

  1. While getting libfprint built was a bit of a pain, fprintd is much simpler. The first essential steps are the same (starting in some build directory):
mkdir build_dir
cd build_dir
apt source --download-only fprintd
sudo apt build-dep fprintd
git clone https://github.com/freedesktop/libfprint-fprintd.git 
cd libfprint-fprintd
git checkout v1.94.0
tar -xJvf ../fprintd_1.90.9-1.debian.tar.xz
  1. Edit ./debian/rules to overide a check for dependency information. Add these lines to the end and make sure a tab is used rather than spaces for the spacing on the last line:
    override_dh_shlibdeps:
    	dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
  1. Edit ./debian/changelog to create a new entry for our version, you can add your own info:
fprintd (1:1.94.0-1) unstable; urgency=medium

  * custom build for use on my Framework laptop

 -- Brett Kosinski (brettk) <email>  Fri, 6 Sep 2021 20:05:00 -0700
  1. Then build the package!
sudo dpkg-buildpackage -b -uc -us
  1. Install the created .deb files:
sudo dpkg -i ../*.deb
  1. Enable and start the service:
sudo systemctl enable fprintd.service
sudo systemctl start fprintd.service
  1. Activate the PAM module.
sudo pam-auth-update --enable fprintd
  1. You can remove all the files now and uninstall the build dependencies if desired.

Enrolling Fingerprints

Setting up fingerprints

At this point, if all went well, assuming you’re using Gnome you can enroll a new set of fingerprints:

  1. Hit the Windows key, type “Users”, and open the settings panel
  2. Select “Fingerprint login”
  3. Enroll fingerprints

Voila! At this point all of the hardware on your laptop should be functioning.

It’s really not a hard process, but here’s a dumb script that should get the job done. It’s not smart enough to edit the files, so it just deletes them and pulls edited copies from my webserver. This is very unsafe so if you can’t read and understand this script (also verify any files it downloads) you should NOT be running it!

ubuntu_libfprint_v1.94.1_install.sh

bash ubuntu_libfprint_v1.94.1_install.sh

(Tested on Pop!_OS, but i think it should work fine on Ubuntu)

14 Likes

So this is my first time using linux. Im using PopOS and was relived to see this guide was specifically for it but after installing some of the packages I noticed that I have to go in and edit files.

My terminal commands knowledge especially on Linux is very basic and Im not willing to go down a stack overflow rabbit hole just to get the fingerprint scanner to work. So I tried the script and that didn’t work either.

Somebody please tell me there is an easier way to get this damn thing to work. Im willing to install some shit using the terminal and that’s about as far as Im willing to go to get this to work.

Maybe theres another distro that this just works out of the box?

My experience with the Fedora 34 respin is that it just works out of the box.

1 Like

If you’re only willing to install packages then you won’t get the fingerprint sensor working, as from the Ubuntu 21.04 thread:

Ubuntu 21.10 may have libfprint >1.92.0 but I’m unable to check. Otherwise Fedora 34 Respin or Fedora 35 (When it releases later this month) will work fine.

@Water261 ok thanks for clarifying. The scanner not working isn’t a deal breaker for me right now, Im sure someone will eventually figure out how to make it easier in the next few weeks/months. Im not even sure if Im set on using Linux anyway and might just end up going back to Windows.