Skip to content

Instantly share code, notes, and snippets.

@alexmi256
Last active November 23, 2021 19:47
Show Gist options
  • Save alexmi256/9b234b3b67d7bb41adc853c8973dbb0f to your computer and use it in GitHub Desktop.
Save alexmi256/9b234b3b67d7bb41adc853c8973dbb0f to your computer and use it in GitHub Desktop.
Raspberry Pi Zero W Wireless USB Fingerprint.md

Goal

Use a cheap fingerprint sensor wirelessly so that I can auth to Windows Hello and other systems that use it in a cost effective manner.

Possible Solutions

Device URL Cost ($USD) Works With Windows Hello
Server (Pi Zero W) and Client Running USBIP Windows Client USB/IP Server 0 Yes, but limited by windows client to windows test mode
Server (Pi Zero W) and Client Running VirtualHere VirtualHere 50 Yes, but 1 device and no client as service for no license, latter may have workaround, license is per server non-transferable
LR809/FP-HLT01 AliExpress 50 ?
evolute Identi5 Evolute ~93 ?
SecuGen Unity 20 Bluetooth BLE Fulcrum Biometrics 143 ?
HF Security HF7000 HF Security ? ?
BRT809 AliExpress 56 ?
ATKey.Card AuthenTrend 79 ?
Feitian AllinPass Feitian 90-110 ?

Status

DEAD - While the Pi Zero works well as a server, the biggest issue is that the Windows client which requires kernel mode drivers. To use kernel mode drivers you either need to enable test signed drivers at every boot which is a terrible idea or have them signed with an EV level certificate which costs around $400USD per year. The author of that repository does not seem willing to look into this at this time due to driver/features stability.

Intial Solution

I tried to get a Raspberry Pi Zero W as a USBIP server with a Windows 10 Client in order to use a cheap Fingerprint reader for windows hello. Device was connected to Windows 10 first and driver were installed and fingerprint was set up.

Device

root@dietpi:~# lsusb -v -s 001:002

Bus 001 Device 002: ID 2808:93a9 Focal-systems.Corp FT9201Fingerprint.̚
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x2808
  idProduct          0x93a9
  bcdDevice            1.00
  iManufacturer           1 Focal-systems.Corp
  iProduct                2 FT9201Fingerprint.̚
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0020
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              200mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               0
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)

Server OS

The RaspberryPi OS worked initially for Raspberry Pi Zero W. Decided to give DietPi a try. This had some issues updating but was successful in the end.

Load Kernel Modules

Need to load built-in module. Dashes and underscores are interchangable, so we only need to do:

modprobe usbip_host
echo usbip_host >> /etc/modules-load.d/modules.conf

Enable Daemon

Need to start daemon.

tmux new -s usbipd
usbipd -4 -d

Bind Device to Server

TODO:

  • Create usbipd daemon service
  • Set daemon as described in Arch wiki for a device

Bind the device

root@dietpi:~# tmux new -s usbipd
[detached (from session usbipd)]
root@dietpi:~# usbip list -l
- busid 1-1 (2808:93a9)
  unknown vendor : unknown product (2808:93a9)

root@dietpi:~# usbip bind -b 1-1
usbip: info: bind device on busid 1-1: complete

Client OS

Futher Work

Sources

Need to post this in:

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