Skip to content

Update README.md - #17

Merged
uunicorn merged 1 commit into
uunicorn:masterfrom
hhgarnes:patch-1
Jul 16, 2020
Merged

Update README.md#17
uunicorn merged 1 commit into
uunicorn:masterfrom
hhgarnes:patch-1

Conversation

@hhgarnes

Copy link
Copy Markdown
Contributor

Add some failure recovery instructions, and instructions on how to enable pam fingerprint authentication.

Add some failure recovery instructions, and instructions on how to enable pam fingerprint authentication.
Comment thread README.md
# At this point you may or may find the device busy, depending on
# how systemctl plays along. Kill offending processes if necessary.

$ sudo systemctl start python3-validity

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

factory-reset.py causes the USB device to be disconnected and then reconnected back. I think udev rule will start the python3-validity automatically whenever it is reconnected even if you've stopped it manually before, so this line may not be required. But no harm in starting it twice anyway.

@uunicorn
uunicorn merged commit 7b56f99 into uunicorn:master Jul 16, 2020
@uunicorn

Copy link
Copy Markdown
Owner

Thanks!

SimpleX-T added a commit to SimpleX-T/python-validity that referenced this pull request Jul 7, 2026
0xd51 / 0x969 chips can enter a "wedged capture-quality gate" state
after long uptime + heavy dev cycles: every captured frame is
rejected by the on-chip quality gate and no capture-complete
interrupt is ever emitted, so sensor.identify() loops in wait_int()
indefinitely. Nothing the daemon can do from userspace clears this —
even sensor.cancel() only unblocks wait_int; the wedge itself
survives systemctl restart. Recovery is a real cold power cycle
(shutdown, unplug charger, hold power ~15s, boot).

Historically the daemon-side identify() thread would keep running
past pam_fprintd's 10s timeout, and diagnosing the state took ~30
minutes of guessing because the journal just showed retry-scan
repetitions with no summary.

Add a retry-count watchdog to VerifyStart's update_cb: after 25
consecutive retries with no capture-complete (typically 12-15s),
log a specific warning naming the wedge condition and the required
recovery path, and call sensor.cancel() to unblock the identify()
thread. The outer except in run() then emits verify-no-match
cleanly.

25 is empirically past the tail of a healthy verify (~2 retries
typical, p95 = 2 in the task uunicorn#17 benchmark) with comfortable
margin. Enrollment path is left alone — its retry-scans are
per-stage user actions, not the same signature.

Diagnosed on the maintainer's own 840 G5 (0xd51) after 4 days of
uptime + a diagnostic init.open() that didn't clean up.
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.

2 participants