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

Thanks for the guide! Alas, it’s not quite working for me.

Maybe a stupid question:

After I build the latest libfprint, when I try to build the latest fprintd, it complains: “Dependency libfprint-2 found: NO found 1.90.7+git20210222+tod1 but need: ‘>=1.92.0’”
Where is it looking for libfprint? It’s not finding the one I just built.
Although I’ve never used it before, I feel like the “ninja -C builddir” step was supposed to put the new libfprint in the right place; however, when I try to do that step again, it simply says, “ninja: no work to do.” Seems like it believes it did it’s job without error.

4 Likes

@Davis_Ladd Thanks for the guide!

Is it safe to run git checkout to the current newest tag before running meson for reproductive steps, isn’t it? As the HEAD commit of the master branch is updated continuously, I am afraid your guide will be outdated after some time.

  1. Compile newest version of libfprint
cd libfprint
git checkout v1.92.1
  1. Now for the newest version of fprintd
cd fprintd
git checkout v1.92.0
1 Like

I am now getting the same error as @spotcatbug .

I attempted to use the git checkout commands as suggested, as well.

The is a clean install of Ubuntu 21.04 no weird things have been done to it.

1 Like

“Dependency libfprint-2 found: NO found 1.90.7+git20210222+tod1 but need: ‘>=1.92.0’”

Maybe you need to set LD_LIBRARY_PATH for the libfprint library’s path installed from the source, to prioritize the path than standard system lib path where system libfprint exists.

And to the Linux compile newbies, where would that be?
the directory where libfprint was compiled? or is it something that should be visible in the Ninja log?

1 Like

Maybe the directory is where the libfprint-2.so.* file compiled by you exists.

export LD_LIBRARY_PATH=<directory>

Edited: Maybe this is not a wrong solution for the compiler error, as the LD_LIBRARY_PATH is a library path searched in the run time, not build time. Sorry.

I thought of that, but immediately dismissed it as being kind of an odd solution. Surely, Davis_Ladd (op of the guide) would have mentioned having to do something like that - I’m guessing he didn’t have to.
What I did do, as a test, was temporarily replace the libfprint library in /usr/lib/x86[snip] with the newly-built one. After a reboot, I was able to go into settings and add my fingerprint (and then use my fingerprint to login.) However, I was still not able to build fprintd! Same complaint (found 1.90, need at least 1.92). So, the system sees the new libfprint 1.92, but meson doesn’t? I put the old libfprint back because I want a real solution to this.

Set the CC or CFLAGS before building fprintd like this? I haven’t tried it by myself.

export CC='gcc -L /path/to/libfprint_lib_directory -I /path/to/libfprint_include_header_directory'

or

export CFLAGS='-L /path/to/libfprint_lib_directory -I /path/to/libfprint_include_header_directory'

I don’t know what the “system” means. But maybe the meson in fprintd found the libfprint deb package installed to standard lib directory by apt-get install, but the fprinted couldn’t find another libfprint you installed by building from the source.

By “system” I simply meant, settings app, login screen, etc. I don’t know the proper way to describe the running ubuntu desktop system.

I searched the entire boot drive for “libfprint-2.so.2.0.0”. It found two files: the one I built from source and the one located in “/usr/lib/x86_64-linux-gnu”. That’s when I decided to try replacing the one in /usr/lib/x86_64-linux-gnu with the one I built. It worked… kinda. I could register my fingerprint in the settings app and then login with my fingerprint, but I still couldn’t build fprintd.

I feel like I’m just not getting something here. Is there more to libfprint than the resulting libfprint-2.so file? I’m going to try setting LD_LIBRARY_PATH (not sure why I didn’t try that before writing this.)

1 Like

By checking the meson build log (duh), I figured out why the build of fprintd is failing. It’s using “/usr/bin/pkg-config --modversion libfprint-2” to determine the version of libfprint that’s installed. So, basically, you can do whatever you want to the libfprint library, but meson is just going to look at which version was installed with apt-get.

I’m not sure how the build of fprintd could possibly work without some intermediate step that updates the libfprint package version information.

1 Like

I’ve just spent a bunch of time trying to get the build of fprintd working. I’m basically having to edit the various meson configuration files and google, google, google. Feels like whack-a-mole (work around one issue to have another immediately pop up.)

I’m just going to live with fprintd 1.90. Replacing only libfprint with 1.92 seems to do the trick. I’m not sure what I’m missing by not having an updated fprintd. The settings app lets you add fingerprints, so isn’t that enrollment, right there?

I found the fprintd’s CI case to test it with a libfprint compiled from the source on Fedora.

    # Make sure we don't build or link against the system libfprint
    - dnf remove -y libfprint-devel
    - git clone https://gitlab.freedesktop.org/libfprint/libfprint.git

So, in case of Ubuntu, removing the libfprint-2 development (header) files might be enough.

$ sudo apt remove libfprint-2-dev

I’m working on an updated version of the guide for Ubuntu 21.04 to do only what is necessary. I appreciate everyone’s feedback in this as I am new to this kind of thing.

I’m testing on a fresh install. I should have an update soon.

UPDATE

After some troubleshooting on a fresh install I found a lot of unnecessary steps. All that is needed is an installation of the new library and some packages.

sudo apt update
sudo apt upgrade
sudo apt install python3-venv python3-pip
sudo pip3 install meson libglib2.0-dev libgusb-dev libgrepository1.0-dev gtk-doc-tools libpolkit-gobject-1-dev libsystemd-dev libpam0g-dev libpam-wrapper libfprint-2-dev python3-pypamtest libxml2-utils libdbus-1-dev

Download the source code and edit meson_options.txt

wget https://gitlab.freedesktop.org/libfprint/libfprint/-/archive/v1.92.1/libfprint-v1.92.1.tar.gz
tar -xvzf libfprint-v1.92.1.tar.gz
cd libfprint-v1.92.1
nano meson_options.txt

Change driver value to “goodixmoc”

option('drivers',
       description: 'Drivers to integrate, "default" selects the default set, "all" selects all drivers',
       type: 'string',
       value: 'goodixmoc')

Build the new library and install it.

meson builddir
ninja -C builddir install

Again, I am new to this. Your help would be much appreciated. But I did this and got it to work on a fresh install.

9 Likes

I appreciate your efforts on this greatly, and I am still having problems.

Yes, I have internet connectivity.
Is there something I should install from the application stores?

Current issues are with this line in your more recent post.

All of these after meson fail for me with a similar error
sudo pip3 install libglib2.0-dev
ERROR: Could not find a version that satisfies the requirement libglib2.0-dev
ERROR: No matching distribution found for libglib2.0-dev

meson fails and says it’s already installed from before.

1 Like

Hey @Davis_Ladd,

Thank you for writing your instructions! They were clear and concise; nice work :slight_smile:

I’ve edited them to add a few apt dependecies and some of the comments from this thread:

Additions

  • Apt packages git gettext valgrind (git isn’t on minimal installations, for example)
  • The feedback from @junaruga about using tagged versions on the two git clones).

I successfully compiled libfprint v1.92 on Ubuntu 21.04.

Dependencies:

  • gtk-doc-tools
  • libfprint-2-dev
  • libgirepository1.0-dev
  • libgusb-dev
  • libpam-wrapper
  • libpam0g-dev
  • libpamtest0-dev
  • libpolkit-gobject-1-dev
  • libxml2-utils
  • python3-pip
  • python3-pypamtest
  • git
  • gettext
  • valgrind

pip packages, install with “pip install ‘package’”

  • meson installed with “sudo pip install meson”
  • ninja
  • gobject
  • python-dbusmock

1. Start with installing dependices

sudo apt install gtk-doc-tools libfprint-2-dev libgirepository1.0-dev libgusb-dev libpam-wrapper libpam0g-dev libpamtest0-dev libpolkit-gobject-1-dev libxml2-utils python3-pip python3-pypamtest git gettext valgrind

sudo pip install meson

pip install ninja gobject python-dbusmock

2. Compile newest version of libfprint

git clone https://gitlab.freedesktop.org/libfprint/libfprint.git
cd libfprint && git fetch origin && git checkout v1.92.1

3. Edit meson_options.txt

To make things easier I specified the just the goodix device in “meson_options.txt”

nano meson_options.txt

For the drivers option use replace default with goodixmoc. This compiles libfprint just for this fingerprint sensor.

option('drivers',
       description: 'Drivers to integrate, "default" selects the default set, "all" selects all drivers',
       type: 'string',
       value: 'goodixmoc')

4. Then build, compile and install

meson builddir
ninja -C builddir

5. Now for the newest version of fprintd

git clone https://gitlab.freedesktop.org/libfprint/fprintd.git
cd fprintd && git fetch origin && git checkout v1.92.0
meson builddir
ninja -C builddir

6. Enroll your fingerprint

fprintd-enroll

Alternatively one can do this from the “Settings > Users” screen in GNOME Settings.

I believe that is all the steps you need to do. If you have any problems let me know and I would be happy to help. This is the first time I have ever written instructions.


I’m new to this forum editor, so I wasn’t sure the best way to quote reply.

Thanks,
Ian C (he/him/his)

6 Likes

When I try to install a couple of the pipe packages, it can’t find suitable copies, same message as I mentioned before. Only two packages weren’t found.
libsystemd and libdbus-dev

Where does Ubuntu go to look for these things?

The first round, it didn’t find any to install?


Finally got everything installed, using a combination of above and correcting some user errors.

Got an enrollment finger and logged in.

Thank you all for providing instructions.

I also added install to the ninja -C builddir commands.

There is a lot to install, isn’t there.

I finally figured out my issue with the fingerprint reader. Since I think the issue was at the hardware/firmware level, I’m moving over here from the Fedora 34 thread.

TL;DR

  1. fingerprint reader was working fine in Ubuntu 21.04,
  2. replaced Ubuntu with Fedora 34
  3. couldn’t enroll my finger - every attempt ended with “enroll-unknown-error”
  4. discovered it was failing, because the sensor said it was already enrolled - it had never occurred to me to try enrolling one of my nine other fingers
  5. other fingers enroll fine

Here’s my original comment regarding the issue.

After finally figuring out how to get fprintd into debug mode (here, at the very bottom of the page), the problem seemed obvious.

Aug 08 20:15:49 fedora fprintd[10147]: [goodixmoc] SSM FP_ENROLL_NUM_STATES failed in state 2 with error: Finger is too similar to another>
Aug 08 20:15:49 fedora fprintd[10147]: [goodixmoc] FP_ENROLL_NUM_STATES completed with error: Finger is too similar to another, try use a >
Aug 08 20:15:49 fedora fprintd[10147]: Device reported enroll completion

As you can see above, I found out enroll was failing because the finger I was trying to enroll was already enrolled… but on a brand new Linux install???

This leads me to believe that my fingerprint from enrolling in Ubuntu is stored within the fingerprint reader (or TPM?), which prevented me from enrolling the same finger again.

I was able to enroll any other finger without a problem, but I still don’t know how to delete/unenroll my right index finger from the reader, or get the OS to recognize that it is already enrolled from a previous OS.

Also, in all my troubleshooting, at some point, the ability to enroll fingerprints in Gnome settings disappeared and I can’t figure out how to get it back! So I can enroll and verify with fprintd, but can’t get the OS to use it as an authentication option :man_facepalming:

8 Likes

My OS: pop!_os, which is using Ubuntu 21.04 kernel 5.11

I finally was able to get the fingerprint reader working after using a combination of all the guides on this page. However, on pop!_os, running fprintd-enroll didn’t work, until I installed libpam-fprintd.

sudo apt install libpam-fprintd

6 Likes

@Adrian_Sanabria very interesting issue! We’ll dig into that and see what the right way to unenroll fingerprints in Linux for this module is.

6 Likes