This repository provides a working libfprint driver (elanpress) for the Elan 04f3:0c6e fingerprint sensor, commonly found in various ASUS laptops (such as the Zenbook 14, ROG Flow X13, and others).
Upstream libfprint misclassifies the 04f3:0c6e sensor under the standard elan swipe driver:
FP_SCAN_TYPE_SWIPE. As a result, the desktop environment and fprintd expect continuous swiping gestures, leading to "swipe too short" errors.pre_scan_cmd), the sensor unblocks once and then wedges at "finger present" until a power cycle or times out, returning unexpected status bytes (0x00, 0xaf). The standard driver treats this as a fatal FP_DEVICE_ERROR_PROTO, aborting the session and reporting "device disconnected".libfprint uses the NIST NBIS Bozorth3 minutiae matcher. Bozorth3 expects large swiped impressions with many minutiae points (threshold 24). The compact touch pad yields too few minutiae for Bozorth3, causing "verify-no-match" even when enrollment succeeds.This fork integrates the dedicated elanpress driver:
FP_SCAN_TYPE_PRESS).sudo dnf install meson ninja gcc git libgusb-devel pixman-devel openssl-devel systemd-devel glib2-devel
sudo apt install meson ninja-build gcc git libgusb-dev libpixman-1-dev libssl-dev libsystemd-dev libglib2.0-dev
libfprint-elanpress-git.git clone -b elan-0c6e-touch-support https://github.com/FCsab/Elan-04f3-0c6e-fingerprint-reader-fix.git
cd Elan-04f3-0c6e-fingerprint-reader-fix
meson setup build --prefix=/usr -Ddoc=false -Dintrospection=false
ninja -C build
[!IMPORTANT] Keep backups outside of
/usr/lib64/: Do not store backup copies (such as.stockor.bak) directly in/usr/lib64/. Because shared libraries contain an internal SONAME (libfprint-2.so.2),ldconfigautomatically scans all files in/usr/lib64/and will repoint the active symlink back to the stock library on the next system update! Always store backups in/var/backups/libfprint/.
# 1. Safely backup stock library outside the library linker search path
sudo mkdir -p /var/backups/libfprint
sudo cp /usr/lib64/libfprint-2.so.2.0.0 /var/backups/libfprint/ 2>/dev/null || \
sudo cp /usr/lib/x86_64-linux-gnu/libfprint-2.so.2.0.0 /var/backups/libfprint/ 2>/dev/null
# 2. Install compiled library
sudo ninja -C build install
# 3. Update linker cache and restart fprintd
sudo ldconfig
sudo systemctl restart fprintd
Delete any old prints:
fprintd-delete $USER
Enroll your fingerprint:
fprintd-enroll
[!TIP] Enrollment Tips & Responsiveness:
- Lift your finger completely between presses for about 1 second. The driver requires 10 consecutive empty polls to ensure you have lifted your finger so the same press isn't sampled twice. Tapping too quickly before the sensor registers a full release will ignore the press.
- Press firmly. Light or partial touches with low contrast are automatically filtered out to ensure template quality, requiring an extra press.
- Vary your position slightly (center, left side, right side, fingertip) across the 12 stages to allow SIFT to map the entire finger pad.
Verify:
fprintd-verify
Touch the sensor once to confirm recognition.
Lock Screen:
Lock your screen (Super + L) and unlock using your fingerprint sensor.
fprintd reports a protocol error:Check where the symlink points:
ls -l /usr/lib64/libfprint-2.so.2
If it points to a .stock or .bak file, move the backup file out of /usr/lib64/:
sudo mkdir -p /var/backups/libfprint
sudo mv /usr/lib64/libfprint-2.so.2.0.0.* /var/backups/libfprint/ 2>/dev/null || true
sudo ldconfig
sudo systemctl restart fprintd
If a Fedora update overwrites libfprint-2.so.2.0.0 with upstream stock:
Simply re-install from your build directory:
cd ~/git/libfprint # or wherever your repo is cloned
sudo ninja -C build install
sudo ldconfig
sudo systemctl restart fprintd
In the spirit of transparency, AI tools were used in the development of this repository:
libfprint, meson build configurations, protocol debugging, and documentation were performed with the assistance of Google DeepMind's Antigravity AI coding assistant.04f3:0c6e on ASUS laptop) before committing.elanpress).This repository provides a working libfprint driver (elanpress) for the Elan 04f3:0c6e fingerprint sensor, commonly found in various ASUS laptops (such as the Zenbook 14, ROG Flow X13, and others).
Upstream libfprint misclassifies the 04f3:0c6e sensor under the standard elan swipe driver:
FP_SCAN_TYPE_SWIPE. As a result, the desktop environment and fprintd expect continuous swiping gestures, leading to "swipe too short" errors.pre_scan_cmd), the sensor unblocks once and then wedges at "finger present" until a power cycle or times out, returning unexpected status bytes (0x00, 0xaf). The standard driver treats this as a fatal FP_DEVICE_ERROR_PROTO, aborting the session and reporting "device disconnected".libfprint uses the NIST NBIS Bozorth3 minutiae matcher. Bozorth3 expects large swiped impressions with many minutiae points (threshold 24). The compact touch pad yields too few minutiae for Bozorth3, causing "verify-no-match" even when enrollment succeeds.This fork integrates the dedicated elanpress driver:
FP_SCAN_TYPE_PRESS).sudo dnf install meson ninja gcc git libgusb-devel pixman-devel openssl-devel systemd-devel glib2-devel
sudo apt install meson ninja-build gcc git libgusb-dev libpixman-1-dev libssl-dev libsystemd-dev libglib2.0-dev
libfprint-elanpress-git.git clone -b elan-0c6e-touch-support https://github.com/FCsab/Elan-04f3-0c6e-fingerprint-reader-fix.git
cd Elan-04f3-0c6e-fingerprint-reader-fix
meson setup build --prefix=/usr -Ddoc=false -Dintrospection=false
ninja -C build
[!IMPORTANT] Keep backups outside of
/usr/lib64/: Do not store backup copies (such as.stockor.bak) directly in/usr/lib64/. Because shared libraries contain an internal SONAME (libfprint-2.so.2),ldconfigautomatically scans all files in/usr/lib64/and will repoint the active symlink back to the stock library on the next system update! Always store backups in/var/backups/libfprint/.
# 1. Safely backup stock library outside the library linker search path
sudo mkdir -p /var/backups/libfprint
sudo cp /usr/lib64/libfprint-2.so.2.0.0 /var/backups/libfprint/ 2>/dev/null || \
sudo cp /usr/lib/x86_64-linux-gnu/libfprint-2.so.2.0.0 /var/backups/libfprint/ 2>/dev/null
# 2. Install compiled library
sudo ninja -C build install
# 3. Update linker cache and restart fprintd
sudo ldconfig
sudo systemctl restart fprintd
Delete any old prints:
fprintd-delete $USER
Enroll your fingerprint:
fprintd-enroll
[!TIP] Enrollment Tips & Responsiveness:
- Lift your finger completely between presses for about 1 second. The driver requires 10 consecutive empty polls to ensure you have lifted your finger so the same press isn't sampled twice. Tapping too quickly before the sensor registers a full release will ignore the press.
- Press firmly. Light or partial touches with low contrast are automatically filtered out to ensure template quality, requiring an extra press.
- Vary your position slightly (center, left side, right side, fingertip) across the 12 stages to allow SIFT to map the entire finger pad.
Verify:
fprintd-verify
Touch the sensor once to confirm recognition.
Lock Screen:
Lock your screen (Super + L) and unlock using your fingerprint sensor.
fprintd reports a protocol error:Check where the symlink points:
ls -l /usr/lib64/libfprint-2.so.2
If it points to a .stock or .bak file, move the backup file out of /usr/lib64/:
sudo mkdir -p /var/backups/libfprint
sudo mv /usr/lib64/libfprint-2.so.2.0.0.* /var/backups/libfprint/ 2>/dev/null || true
sudo ldconfig
sudo systemctl restart fprintd
If a Fedora update overwrites libfprint-2.so.2.0.0 with upstream stock:
Simply re-install from your build directory:
cd ~/git/libfprint # or wherever your repo is cloned
sudo ninja -C build install
sudo ldconfig
sudo systemctl restart fprintd
In the spirit of transparency, AI tools were used in the development of this repository:
libfprint, meson build configurations, protocol debugging, and documentation were performed with the assistance of Google DeepMind's Antigravity AI coding assistant.04f3:0c6e on ASUS laptop) before committing.elanpress).