Add framework README with fingerprint fix docs

Add framework README with instructions on fixing the fingerprint reader
when it fails due to previously enrolled prints.
This commit is contained in:
ducoterra
2022-02-02 09:29:56 -05:00
parent b315d6a043
commit d1b00d74b9
2 changed files with 83 additions and 0 deletions

29
framework.md Normal file
View File

@@ -0,0 +1,29 @@
# Framework Laptop
## Fingerprint Sensor
"Device disconnected" on enrolling
If you've enrolled fingerprints in another OS or in a previous installation you
might encounter this error. It prevents you from enrolling new fingerprints and
re-enrolling old fingerprints. Fortunately, there's an easy solution thanks to
[this incredible forum
post](https://community.frame.work/t/fingerprint-scanner-compatibility-with-linux-ubuntu-fedora-etc/1501/145).
The problem lies in old fingerprints remaining on the reader without the host
OS knowing about them. When the host OS tries to enroll a new fingerprint that
already exists, the fingerprint reader chokes. The solution is to delete the
old fingerprints from the reader before enrolling new ones. This should be
included as part of the device bootstra process or as part of the devices wipe
process.
Here's the process:
```bash
# Delete all fingerprints from device
sudo python framework/libfprint_delete_device_prints.py -d
```
That's it! Should work again.
## Secure Boot

View File

@@ -0,0 +1,54 @@
# Import PyGObject
# PyGObject is a Python package which provides bindings for GObject based libraries such as GTK, GStreamer, WebKitGTK, GLib, GIO and many more.
from gi import require_version
# for arguments
from sys import argv
from os import geteuid
if geteuid() != 0:
exit("You need to have root privileges to run this script.\nPlease try again, this time using 'sudo'. Exiting.")
# Load FPrint gi module
require_version('FPrint', '2.0')
# Import FPrint
from gi.repository import FPrint
# Get FPrint Context
fprint_context = FPrint.Context()
# Loop over FPrint devices
for fprint_device in fprint_context.get_devices():
# Print device info
print(fprint_device)
print(fprint_device.get_driver())
print(fprint_device.props.device_id)
# Open the device synchronously.
fprint_device.open_sync()
# Get list of enrolled prints
enrolled_fingerprints = fprint_device.list_prints_sync()
print("Device has %d enrolled fingerprints." % len(enrolled_fingerprints))
# Loop through enrolled fingerprints
for fingerprint in enrolled_fingerprints:
# Print fingerprint info
date = fingerprint.props.enroll_date
print(' %04d-%02d-%02d valid: %d' % (date.get_year(), date.get_month(), date.get_day(), date.valid()))
print(' ' + str(fingerprint.props.finger))
print(' ' + str(fingerprint.props.username))
print(' ' + str(fingerprint.props.description))
# check for delete flag
if (len(argv) > 1 and argv[1] == "-d"):
# Delete print
print('Deleting print:')
fprint_device.delete_print_sync(fingerprint)
print('Deleted')
# Close the device synchronously.
fprint_device.close_sync()