Sponsored Content
Skip to content

Repository files navigation

Chipsailing CS9711 Fingerprint Scanner β€” Linux Driver Installer

One-command installer for the Chipsailing CS9711 USB fingerprint scanner on Linux.

Stock libfprint does not support this chip. This project automates the entire setup: detecting your distro, installing dependencies, cloning the community driver, applying patches, building, installing, and configuring PAM β€” so your fingerprint works for login, lock screen, and sudo.

Supported Hardware

Detail Value
Chip Chipsailing CS9711
USB ID 2541:0236
Form factor USB dongle / integrated sensor
Matching algorithm sigfm (optimised for small sensors)
Enrollment 15 touches per finger

To check if you have this device:

lsusb | grep 2541:0236

Important: USB Connection Requirement

This USB fingerprint sensor can be connected in two ways:

Option 1: Directly to the PC β€” Plug the scanner into any USB port on your computer (front panel, rear I/O, USB hub connected to the PC). This always works.

Option 2: Via a keyboard's USB passthrough port β€” Many mechanical keyboards (e.g. Royal Kludge RK84) have a USB-A port on the back for plugging in peripherals like this scanner. This only works if the keyboard is connected to the PC via USB cable. If the keyboard is connected via Bluetooth or 2.4GHz wireless, the keyboard's USB port is dead β€” the scanner may light up (it gets power) but the PC cannot see it (no data connection).

Connection Scanner works?
Scanner β†’ PC USB port directly Yes, always
Scanner β†’ Keyboard USB port, keyboard wired to PC Yes
Scanner β†’ Keyboard USB port, keyboard on Bluetooth No β€” no data, only power
Scanner β†’ Keyboard USB port, keyboard on 2.4GHz wireless No β€” no data, only power
Scanner β†’ unpowered USB hub Sometimes No β€” see below

If lsusb | grep 2541:0236 shows nothing, check your USB connection first.

Power note: the CS9711 is power-sensitive. On some machines it enumerates fine in a rear/direct port but fails to be detected behind an unpowered USB hub β€” the LED lights (it draws a little power) but the PC never sees the data device. If lsusb doesn't list it through a hub, plug it directly into the PC or use a hub with its own power supply.

Supported Distros

Distro Family Tested On Package Manager
Ubuntu / Kubuntu / Debian Ubuntu 24.04, 26.04 LTS, Kubuntu 26.04 (Plasma 6.6.4, reference HW), Debian 12+ / 13 Trixie apt
Linux Mint / Pop!_OS Mint 22, Mint 21+, Pop 22.04+ apt
Fedora / RHEL Fedora 44 (+ Rawhide/F45), RHEL 9+ dnf
Arch / Manjaro Arch, Manjaro, EndeavourOS pacman
openSUSE Tumbleweed, Leap 15.5+ zypper

Every distro above is container build-verified (v2.0.0, 2026-05-30) β€” and bleeding-edge branches (Fedora Rawhide/F45, Debian sid, Ubuntu devel) build clean too. See COMPAT-CHECKLIST.md.

The .desktop file ships with a bundled SVG icon (referenced by absolute path), so the launcher entry renders correctly on every freedesktop-compliant DE β€” KDE Plasma, GNOME, Cinnamon (Mint), MATE, XFCE β€” without depending on the user's icon theme.

The installer auto-detects your distro and uses the right package manager.

Quick Start (All Distros)

⚠️ Only run this if you have the Chipsailing CS9711 (lsusb shows 2541:0236). The installer builds a CS9711-only libfprint into /usr/local, which takes precedence over your system libfprint. If your machine has a different fingerprint reader (most laptops β€” Goodix, Synaptics, ELAN, etc.), running this will shadow the driver that reader needs and stop it working. The installer refuses to proceed if the CS9711 isn't detected (override with CS9711_FORCE=1). ./uninstall.sh fully restores your stock libfprint.

git clone https://github.com/mmhfarooque/chipsailing-cs9711-fingerprint-linux.git
cd chipsailing-cs9711-fingerprint-linux
chmod +x install.sh setup-gui.sh
./install.sh

The installer will:

  1. Detect your Linux distro and package manager
  2. Install all build dependencies
  3. Clone the archeYR/libfprint-CS9711 community driver
  4. Apply the 1500ms retry delay patch (see below)
  5. Build and install the patched libfprint
  6. Configure PAM for fingerprint auth
  7. Verify the scanner is detected

Then enroll your fingerprint:

fprintd-enroll          # 15 touches required
fprintd-verify          # test it

Complete Setup (Driver + GUI)

For the full experience β€” driver install, enrollment, and graphical manager:

git clone https://github.com/mmhfarooque/chipsailing-cs9711-fingerprint-linux.git
cd chipsailing-cs9711-fingerprint-linux
chmod +x install.sh setup-gui.sh

# Step 1: Install driver (builds from source, configures PAM)
./install.sh

# Step 2: Enroll your fingerprint (15 touches)
fprintd-enroll
fprintd-verify

# Step 3: Install GUI manager (adds desktop shortcut)
./setup-gui.sh

# Step 4: Launch β€” or search "CS9711" in your app menu
python3 cs9711-manager.py

After setup, you can manage everything from the GUI β€” enrollment, retry delay, PAM settings, and driver maintenance.

Install via .deb Package (Ubuntu / Debian / Mint / Pop!_OS)

Pre-built .deb packages are available in Releases, or build your own:

# Install build dependencies first
sudo apt install -y git meson ninja-build libfprint-2-dev libglib2.0-dev \
  libgusb-dev libpixman-1-dev libcairo2-dev libssl-dev libopencv-dev \
  doctest-dev gobject-introspection libgirepository1.0-dev fprintd libpam-fprintd

# Build the .deb
chmod +x packaging/deb/build-deb.sh
./packaging/deb/build-deb.sh

# Install it
sudo apt install ./cs9711-fingerprint_1.0.0_amd64.deb

Remove: sudo apt remove cs9711-fingerprint

Install via RPM (Fedora / RHEL / openSUSE)

# Build the RPM
chmod +x packaging/rpm/build-rpm.sh
./packaging/rpm/build-rpm.sh

# Install (Fedora/RHEL)
sudo dnf install ~/rpmbuild/RPMS/x86_64/cs9711-fingerprint-1.0.0-1.*.rpm

# Install (openSUSE)
sudo zypper install ~/rpmbuild/RPMS/x86_64/cs9711-fingerprint-1.0.0-1.*.rpm

Install via PKGBUILD (Arch / Manjaro / EndeavourOS)

cd packaging/arch
makepkg -si

Or use the helper script:

chmod +x packaging/arch/build-arch.sh
./packaging/arch/build-arch.sh

After System Updates

When your package manager updates libfprint, it may overwrite the patched library. Just run:

./reinstall.sh

This rebuilds from the existing local source β€” no re-download needed.

An update guard installed by install.sh watches for this automatically on apt, dnf and pacman systems and restores the patched library from a root-owned cache after each transaction.

OpenCV major upgrades (e.g. CachyOS 4.13 β†’ 5.0)

The driver links against your distro's OpenCV. When a distro moves to a new OpenCV major version, the old libraries disappear and the driver can no longer load β€” fprintd reports no device while lsusb still shows the scanner. A cache restore cannot fix that (the cached copy was built against the same vanished libraries), so since v2.1.0:

  • the guard detects the unloadable state, logs which libraries vanished, and the GUI's Driver status row names them and points at Maintenance β†’ Rebuild Driver;
  • the pacman/dnf hooks also fire on opencv transactions;
  • the build resolves OpenCV as opencv4 β†’ opencv5 β†’ opencv β†’ CMake's OpenCV, so the rebuild links against whatever your distro now ships.

One ./reinstall.sh (or the GUI Rebuild button) after the OpenCV upgrade puts everything back.

The 1500ms Retry Delay Patch

The upstream driver uses a 250ms delay between scan retries. This is too fast β€” the scanner burns through all retry attempts before you can reposition your finger.

This project patches CS9711_DEFAULT_RESET_SLEEP from 250 to 1500 (milliseconds), giving you a comfortable pause between scans.

The patch is in patches/cs9711-retry-delay-1500ms.patch.

PAM Configuration

Since v2.0.2, fingerprint is wired per service, not globally: each auth location (login screen, lock screen, sudo, polkit) gets the pam_fprintd line in its own PAM service file, tagged # cs9711-managed, and the GUI's four switches control them independently. Nothing is ever written to the shared common-auth/system-auth stack β€” which also means the tool works the same on Arch/CachyOS, where /etc/pam.d/common-auth does not exist at all (v2.1.0 fixed β€œApply PAM Settings” accordingly, issue #1).

The line is only ever added as sufficient, with the full vendor stack preserved β€” password authentication can never be locked out, and every change is reversible (toggling off removes only the managed line/override).

Defaults:

  • max-tries=7 β€” 7 fingerprint attempts before falling back to password (default is 1)
  • timeout=30 β€” 30-second window for all attempts (default is 10)

β€œApply PAM Settings” in the GUI re-stamps these options onto every location that is currently enabled.

What It Enables

  • Lock screen unlock via fingerprint
  • sudo authentication (fingerprint prompt before password)
  • Login screen fingerprint auth
  • All via libpam-fprintd

GUI Manager

A GTK4 graphical manager is included for easy configuration:

./setup-gui.sh       # Install GUI dependencies + desktop shortcut
python3 cs9711-manager.py   # Launch

Or search "CS9711" or "Fingerprint Manager" in your app launcher after setup.

The GUI lets you:

  • See at a glance whether fingerprint is working β€” scanner, driver and enrolled fingers in one status card
  • Enroll/delete/verify fingerprints with visual progress
  • Adjust retry delay (250ms–3000ms slider)
  • Set PAM max attempts and timeout
  • Turn fingerprint on or off independently for login, lock screen, sudo and polkit
  • Rebuild/install/uninstall the driver
  • Configure GNOME Keyring auto-unlock

Adaptive layout (since v2.2.0). The window lays out as two columns when there is room β€” workflow on the left, configuration and upkeep on the right β€” and collapses to a single vertical column below 880sp. That means it fits a wide desktop window on KDE Plasma, GNOME or Cinnamon, and equally a half-tiled or narrow/mobile-style window, without the endless scrolling of earlier versions. Styling uses no hardcoded colours, so it follows your theme in both light and dark.

If a system update strands the driver, the GUI says so directly β€” a banner across the top names the missing libraries and offers the rebuild, rather than leaving you to guess at a USB fault.

CS9711 Fingerprint Manager

Optional: Auto-Unlock GNOME Keyring

By default, GNOME Keyring requires your password to unlock (fingerprint login skips it). To set an empty keyring password so it auto-unlocks:

python3 helpers/set-empty-keyring-password.py

Optional: Auto-Unlock KDE Wallet

KWallet has the same problem in reverse: it is opened by a PAM module that captures your login password, so a fingerprint login short-circuits past it and the wallet β€” and everything that depends on it, such as browser saved passwords β€” stays locked. autokdewallet by @Himalian solves this properly with a TPM-secured wallet password that unlocks automatically at login, fingerprint included. Recommended from a working Fedora 44 KDE setup by @popy2k14 in #1.

File Structure

.
β”œβ”€β”€ install.sh                   # Universal installer (auto-detects distro)
β”œβ”€β”€ reinstall.sh                 # Quick rebuild (after system updates)
β”œβ”€β”€ uninstall.sh                 # Remove driver, restore stock libfprint
β”œβ”€β”€ cs9711-manager.py            # GTK4 GUI manager
β”œβ”€β”€ setup-gui.sh                 # GUI dependency installer + desktop shortcut
β”œβ”€β”€ cs9711-manager.desktop       # Desktop entry template
β”œβ”€β”€ patches/
β”‚   └── cs9711-retry-delay-1500ms.patch
β”œβ”€β”€ helpers/
β”‚   └── set-empty-keyring-password.py
β”œβ”€β”€ packaging/
β”‚   β”œβ”€β”€ deb/
β”‚   β”‚   └── build-deb.sh        # Build .deb package
β”‚   β”œβ”€β”€ rpm/
β”‚   β”‚   β”œβ”€β”€ build-rpm.sh        # Build RPM package
β”‚   β”‚   └── cs9711-fingerprint.spec
β”‚   └── arch/
β”‚       β”œβ”€β”€ build-arch.sh       # Build Arch package
β”‚       └── PKGBUILD
β”œβ”€β”€ VERSION                      # Current version number
β”œβ”€β”€ CHANGELOG.md                 # Version history and release notes
β”œβ”€β”€ LICENSE
└── README.md

Troubleshooting

Problem Fix
No devices available Check USB connection. Run sudo ldconfig. Run lsusb | grep 2541.
Scanner in lsusb but not in fprintd after a distro OpenCV upgrade The driver can no longer load (ldd on the patched libfprint-2.so.2 shows not found OpenCV libs). Run ./reinstall.sh β€” v2.1.0+ relinks against the new OpenCV. The GUI shows this state as BROKEN β€” missing libopencv_…
verify-no-match Old enrollment data. Run fprintd-delete $(whoami) && fprintd-enroll.
System update broke it Run ./reinstall.sh or reinstall the .deb/.rpm package.
Scanner not detected If plugged into a keyboard's USB port, the keyboard must be connected via USB cable (not Bluetooth/wireless). See USB Connection Requirement above.
Burns through retries Check patch: grep CS9711_DEFAULT_RESET_SLEEP in cs9711.c should show 1500.
Unsupported distro Install dependencies manually (see source), then run install.sh.

Useful Commands

fprintd-enroll                        # Enroll default finger (right index)
fprintd-enroll -f left-index-finger   # Enroll specific finger
fprintd-list $(whoami)                # List enrolled fingers
fprintd-verify                        # Test fingerprint
fprintd-delete $(whoami)              # Delete all enrolled fingerprints
lsusb | grep 2541                     # Check if scanner is connected

Credits

Installer vs driver: this repo is the installer / setup layer. The driver and its fingerprint matching (e.g. verify-no-match) live upstream in archeYR/libfprint-CS9711 β€” report matching/driver issues there. After installing, re-enroll for a clean template: fprintd-delete $(whoami) && fprintd-enroll.

Changelog

See CHANGELOG.md for full version history and release notes.

License

The libfprint driver is licensed under LGPL-2.1 (same as upstream libfprint). The installer scripts in this repo are MIT licensed.

About

Chipsailing CS9711 (USB 2541:0236) fingerprint scanner driver for Linux. One-command installer for Ubuntu, Debian, Fedora, Arch, openSUSE. Patched libfprint with 1500ms retry delay + PAM config. Includes .deb, RPM, and Arch packages.

Topics

Resources

Stars

32 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages