Accidentally breaking the fingerprint reader (software)


I used fprintd to try and register my fingerprints. I then realized I had registered different fingerprints as the same fingerprint (mis-calling the tool) so I decided to nuke the fprintd information rm -r /var/lib/fprintd and try again.

Except now every time I try to scan my finger, it fails.

$ sudo fprintd-enroll vaelatern
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-stage-passed
Enroll result: enroll-unknown-error
$ echo $?

Is there a call I can make to reset the fingerprint database? I have some confidence that’s the problem since I don’t get this problem on fingers on my left hand (I only had scanned in my right hand).

Users could probably replicate by registering fingerprints and then re-installing Linux.

There is some discussion on this in Fingerprint scanner compatibility with linux (ubuntu, fedora, etc) - #46 by Ryan_Helinski

There is a way to clear fingerprints in Windows 10, but we haven’t gotten an answer yet on what the equivalent is for Linux: Fingerprint enrollment

I appreciate the fast response.

I am not sure the windows suggestion would work for me even if I had a copy around, since the fingerprint DB wouldn’t be on a windows install. In fact I assume I did the equivalent by removing /var/lib/fprintd, didn’t I?

I am certain now that it’s a duplicate fingerprint.


--- a/src/device.c.orig 2021-08-28 20:54:02.585041442 -0400
+++ b/src/device.c      2021-08-28 20:56:53.786046275 -0400
@@ -662,6 +662,28 @@
         return "enroll-data-full";
       else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
         return "enroll-failed";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL))
+        return "enroll-error-general";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_NOT_SUPPORTED))
+        return "enroll-error-not-supported";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_NOT_OPEN))
+        return "enroll-error-not-open";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_ALREADY_OPEN))
+        return "enroll-error-already-open";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_BUSY))
+        return "enroll-error-busy";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID))
+        return "enroll-error-data-invalid";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_NOT_FOUND))
+        return "enroll-error-data-not-found";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_FULL))
+        return "enroll-error-data-full";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_DUPLICATE))
+        return "enroll-error-data-duplicate";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED))
+        return "enroll-error-device-removed";
+      else if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_TOO_HOT))
+        return "enroll-error-device-too-hot";

       return "enroll-unknown-error";

As @nrp noted, there is an fprintd-delete utility. However, it may be useful to see if fprintd-list works first since that shouldn’t be a destructive command.

No fingerprints to delete on Goodix MOC Fingerprint Sensor

User vaelatern has no fingers enrolled for Goodix MOC Fingerprint Sensor.

Enroll result: enroll-error-data-duplicate

OK. May have to dig into the code. Wonder if there’s some mapping file somewhere that the library uses to keep track of what’s stored on the device.

Will try to take a look if I have time on my device since I got the list command to run properly.

1 Like

It seems to use /var/lib/fprintd to keep track of what the device knows.

The libfprintd API asks for a pointer to a fingerprint record. I don’t know what it would do if passed NULL.

I am booting garuda linux on one drive and windows 10 on another, when I enrolled my finger in windows I have lost the ability to sign in on linux, it seems to only be accepting my finer as an option, not my password? Help please.

Once I figured out how to get into text mode I could sign in and deal with fprintd, first though I had to go to windows to delete the enrolled fingerprints as described in the link posted by nrp earlier in the thread: Accidentally breaking the fingerprint reader (software) - #2 by nrp

Any progress on deleting the device memory in Linux yet? Is the only solution to boot into windows right now?

@Henry_Luengas - there is a python script in this thread: Fingerprint scanner compatibility with linux (ubuntu, fedora, etc) - #87 by Brett_Kosinski that others apparently have used with success. I have not personally used it.

Having tried this, that solution doesn’t work. It recognizes the FW’s fingerprint sensor, then errors out trying to communicate with it.

How about this one? I was having a lot of problems with my fingerprint reader after jumping around OS’s, and this fixed the problem.