Fprintd-enroll doesn't add fingerprint, no error message

I was trying to get fprintd working, I enabled the fprintd module (services.fprind.enable = true;). I am on nixos-unstable, specifically bf744fe90419.

When I execute fprintd-enroll, it seems alright, when I put my finger on the fingeprint sensor, it shows enroll-stage-passed, but doesn’t do anything else. (it doesn’t exit after fingerprint scan)

> fprintd-enroll
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed
Enroll result: enroll-retry-scan
Enroll result: enroll-stage-passed

I looked to the logs of fprintd.service and found this (I stripped out date, hostname)

Starting Fingerprint Authentication Daemon...
libusb: error [udev_hotplug_event] ignoring udev action change
libusb: error [udev_hotplug_event] ignoring udev action change
Started Fingerprint Authentication Daemon.
libusb: error [udev_hotplug_event] ignoring udev action change
libusb: error [udev_hotplug_event] ignoring udev action change
fprintd.service: Deactivated successfully.

I was searching for ignoring udev action change, but couldn’t find much. One thing I found is that someone suggested libusb is too old for kernel. I am using unstable, latest kernel.

I have this in libusb output

...
Bus 001 Device 003: ID 27c6:6594 Shenzhen Goodix Technology Co.,Ltd. Goodix USB2.0 MISC
...

it is listed as supported by libfprint.

Any ideas on how to troubleshoot or resolve? Any help appreciated.

Just curious: what happens if you sudo fprintd-enroll?

> sudo fprintd-enroll
[sudo] password for ruther:
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed

Looks like the same thing, nothing changed in fprintd.service log

What does your entire services.fprintd section look like in your config?

Those Goodix fingerprint readers are finicky; I have one, too, on my Dell XPS. Here is my config:

  services.fprintd = {
    enable = true;
    package = pkgs.fprintd-tod;
    tod = {
      enable = true;
      driver = pkgs.libfprint-2-tod1-goodix;
    };
  };

But my lsusb output is similar but not identical to yours:
Bus 003 Device 002: ID 27c6:533c Shenzhen Goodix Technology Co.,Ltd. FingerPrint

My section is really just services.fprintd.enable = true. I can try tod instead, haven’t looked into that yet as
libfprint listed mine as supported. Will get back with any updates. Thank you for help.

That’s interesting, I tried with exact same config as you specified, and I got something else. Still not working though. Now fprintd-enroll looks the same, but log doesn’t contain any ignoring udev action change or fprintd.service deactivated successfully. It instead has

fprintd[1469144]: Capture sample failed, result: 0xc0

for each enroll-retry-scan. For entroll-stage-passed looks like nothing is logged, and it still stays inside of fprintd-enroll. Tbh this is the first time I am trying fingerprint sensors on laptop (never done that on neither Windows nor Linux), so I am not that knowledgeable on how fprintd-enroll should work. But from what I grasped I guess it should tell me something after enroll-stage-passed, right?

I’ve also tried services.fprintd.tod.driver = pkgs.libfprint-2-tod1-goodix-550a;, even though that doesn’t seem right. Got the same thing. Not sure if there is another driver I could try.

Oh my. Okay, turns out that I am just using fprint wrong. After I swipe my finger, put it to the sensor from multiple sides etc. it completes.

❯ fprintd-enroll
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed
Enroll result: enroll-retry-scan
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed
Enroll result: enroll-stage-passed
Enroll result: enroll-retry-scan
Enroll result: enroll-stage-passed
Enroll result: enroll-retry-scan
Enroll result: enroll-completed

I’ve tried the enrollment process with gnome and it guided me through it so that’s how I figured it out, tried in terminal and it works, even without tod. Could’ve guess that before as it’s the same on phone… :man_facepalming:

1 Like

Way to persist! Glad you figured it out

1 Like