Cant use supported fingerprint sensor

ls /sys/bus/spi/devices/ outputs spi-ELAN7001:00 which seems to be supported by libfprint
But when i go to gnome users settings there is no fingerprint option and fprint enroll returns Impossible to enroll: GDBus.Error:net.reactivated.Fprint.Error.NoSuchDevice: No devices available

My device is Asus VivoBook x415ja with i3 1005G1 running fedora 38

1 Like

You might have to check again when the new release get available.

v1.94.6-evidences-648.json fc3842d5

Collected 1 week ago

2023-08-17: v1.94.6 release

Can you run sudo dmesg | grep "ELAN" ?
In the output you ll have some entries, see if you can find 04f3: eg. 04F3:3104
The value after the colons is the PID. If the exact model (like 04F3:3104) is listed in the supported devices then your device is supported.

I think the issue here is that the fingerprint readers have different pids even though the “model” is the same ELAN7001. So I think the fix is probably as simple as adding the missing pids in libfprintd but I dont know how to do that.

i have a similar device whose pid is not in the list and I have been trying to get it to work but Im not very tech savy so Im facing some difficulty.
Im trying to follow the instructions in these two issues:

However these are for an old outdated fork of the standard libfprintd. Im not sure how these apply to the current libfprint.

I ll update here if Im able to work it out.

I managed to get the fingerprint sensor to work by following the instructions in the issues linked above. ./image-capture , ./enroll , ./verify all are working.

All I had to do was to add a single line in libfprint/libfprint/devices/elanspi.h under elanspi_id_table:

{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3104}, .driver_data = ELANSPI_180_ROTATE},

Just change 3104 to the pid of your fingerprint sensor*. Then cd to the root directory (libfprint) and compile:

meson build -D drivers=all
cd build
meson compile

You can verify it works by running the scripts (mentioned above) in the examples folder (which should be in the build folder).
I also tried running the scripts without this change but they failed to detect my fingerprint sensor.

However now I dont know how to actually install this modified libfprint. Im trying to make an rpm from the modified source but so far simply copying the .spec file fedora uses has not worked :grin:

*Also the last bit about the rotation can be NO or 90 instead of 180. You ll have to look at the resulting image finger.pgm after running ./img-capture with sudo to decide which one you should use.

When i run sudo dmesg | grep "ELAN" i get nothing?(Also tried it on Ubuntu 23.04 livecd to make sure its not my fedora install) Is there any other way to get PID of my ELAN?

Thats weird, Im not sure why you are not getting it. Try running the command after a fresh boot.
But another way is to go to /sys/class/hidraw/hidraw0/device/driver
The name of files in the directory should have the pid. There might be two files so you might get two pids. I guess you ll have to test which one is for the fingerprint sensor.
The path could also be a little different like maybe hidraw1 instead of 0.
The last method is to look in the .inf file of the Windows driver but I havent tested that method.

I somehow managed to make an rpm though Im not sure if I did it correctly. I installed the rpm. I installed fprintd, fprintd-pam from fedora repos.
And just like that fprintd-enroll now works!
However fprintd-verify always results in a verify-no-match (which I guess means it couldnt verify). Also gnome doesnt seem to show me the option for fingerprint sign-in either.

For now I have given up. I might give it another try tomorrow or sometime later.

Apparently this is a known issue:

For now there doesnt seem to be anything we can do but maybe you wont face this issue.

Thanks i was able to find my pid in /sys/class/hidraw/hidraw0/device/driver, i built rpm with my pid in libfprint and it now “works”, but im unable to enroll any finger with error Enroll result: enroll-unknown-error