Skip to content

Detect the Latitude 9440 fingerprint reader without replacing its driver - #11846

Open
pelifix wants to merge 1 commit into
omacom:quattrofrom
pelifix:fix-latitude-9440-fingerprint
Open

pelifix wants to merge 1 commit into
omacom:quattrofrom
pelifix:fix-latitude-9440-fingerprint

Conversation

@pelifix

@pelifix pelifix commented Sep 14, 2026

Copy link
Copy Markdown

Two bugs that currently cancel each other out, so they need fixing together.

1. The reader is never detected

The Broadcom BCM58200 ControlVault 3 in the Dell Latitude 9440 2-in-1:

$ cat /sys/bus/usb/devices/3-3/{idVendor,idProduct,product}
0a5c
5843
58200

0a5c is not in fingerprint_vendors, and the descriptor is bare 58200, so it matches neither the vendor list nor *fingerprint* / *biometric* / *elan:arm-m4* / fpc *. Setup exits with "No fingerprint sensor detected" and the first-run invitation never fires, on a machine where fprintd drives the reader fine:

$ fprintd-list $USER
Fingerprints for user on Broadcom Sensors (press):

Adding 0a5c wholesale would be wrong for the reason the existing comment gives about Elan and STMicro — Broadcom also ships Bluetooth radios, hubs and ControlVault modules on machines with no reader. This adds an exact vendor:product list instead. (has_kernel_driver would not have excluded it: the interface has no driver bound.)

2. Fixing that alone would break working machines

The setup installs libfprint-git with --ask 4. The comment reads that as accepting the stock-libfprint replacement, but --ask 4 accepts any replacement.

Readers libfprint cannot drive run on a TOD stack instead — a libfprint fork plus a vendor blob:

$ pacman -Qqo /usr/lib/libfprint-2.so.2
libfprint-tod
$ pacman -Qi libfprint-tod | grep -E 'Provides|Conflicts'
Provides        : libfprint  libfprint-tod  libfprint-2.so=2-64  libfprint-2-tod.so=1-64
Conflicts With  : libfprint

libfprint-git provides libfprint, so the transaction is accepted with no prompt and removes libfprint-tod and libfprint-2-tod1-broadcom — the only driver the reader has. Fixing detection without this would have pointed the first-run invitation straight at it.

The guard checks who owns /usr/lib/libfprint-2.so.2 rather than testing package names, which differ per vendor (libfprint-2-tod1-broadcom, -goodix, -cv3plus). fprintd and usbutils are still installed; only the libfprint swap is skipped.

Verification

On the Latitude 9440:

$ omarchy-hw-fingerprint; echo $?
1          # before
0          # after

owner: libfprint-tod  => skips libfprint-git

./test/cli passes (112 ok).

One judgement call to flag: 0a5c:5843 is the ControlVault 3 module, which also does smartcard and NFC. A Dell shipping CV3 with no reader would now match and be invited to a setup that fails at enrollment. I have no such machine to test on — happy to drop the pair if you would rather wait for a narrower signal.

🤖 Generated with Claude Code

Two problems that currently cancel out on this machine.

omarchy-hw-fingerprint misses the Broadcom BCM58200 ControlVault 3 in the
Dell Latitude 9440 2-in-1. Its vendor (0a5c) is not in the list, and its
product descriptor is bare "58200", so nothing matches and the setup
exits with "No fingerprint sensor detected" on a laptop where fprintd
drives the reader fine. 0a5c cannot be added wholesale -- Broadcom also
ships Bluetooth radios, hubs and ControlVault modules on machines with no
reader -- so match the exact vendor:product pair instead.

That alone would be worse than nothing. The setup installs libfprint-git
with --ask 4, which accepts any replacement, not just the stock-libfprint
one it was written for. Readers libfprint cannot drive are run by a TOD
stack: a libfprint fork plus a vendor blob, libfprint-tod with
libfprint-2-tod1-broadcom in this case. The fork also provides libfprint,
so the install is accepted without a prompt and removes the only driver
the reader has. Fixing detection first would have pointed the first-run
invitation at exactly that.

Skip libfprint-git when something else owns /usr/lib/libfprint-2.so.2,
which asks who provides the library rather than guessing at package names
that differ per vendor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@pelifix
pelifix force-pushed the fix-latitude-9440-fingerprint branch from 0103686 to 4fc5d39 Compare September 14, 2026 20:47
@pelifix

pelifix commented Sep 14, 2026

Copy link
Copy Markdown
Author

Flagging the overlap with two other open PRs on this file, since we're all editing the same package block.

#11840 fixes the same class of bug at a different layer. It preserves an alternate fprintd client (fprintd-clients-git / python-validity) from being replaced by stock fprintd; this PR preserves the libfprint provider (libfprint-tod + a vendor blob) from being replaced by libfprint-git. Neither subsumes the other — #11840 still installs libfprint-git unconditionally, so it wouldn't save a TOD-driven reader, and this PR doesn't protect python-validity's client. Both are wanted; whichever lands second needs a trivial rebase, as they both introduce a package array in the same block.

#11842 is complementary rather than overlapping — it catches the case where a reader is detected but libfprint has no driver for it. Worth noting the ordering though: if #11842 lands without this one, a TOD-driven machine would install libfprint-git, lose its driver, and then hit the new fprintd-list check and be told "this exact sensor isn't supported yet". The diagnosis would be wrong, and caused by the removal that just happened. This PR is what keeps that message truthful.

Happy to rebase onto either of them, or to fold #11840's client check into this one if you'd rather have a single guard covering both layers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant