Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux

в 10:15, , рубрики: Chipsailing CS9711, fprintd, libfprint, PAM fingerprint, USB fingerprint reader Ubuntu, биометрическая аутентификация Linux, драйвер для CS9711, отпечаток пальца в Linux, реверс-инжиниринг USB, сканер отпечатков пальцев Linux

Многие современные ноутбуки оснащаются сканерами отпечатков, но что делать, если ваш рабочий ПК или старый ноутбук такой возможности не имеет? Китайские маркетплейсы предлагают огромное количество USB-сканеров по цене 1000–2000 рублей. Однако при попытке использовать их в Linux пользователя ждёт сюрприз: официальные драйверы отсутствуют, а встроенная поддержка libfprint часто не работает.

В этой статье я расскажу, как заставить работать сканер Chipsailing CS9711 (ID 2541:0236) в Ubuntu и других дистрибутивах. Мы скомпилируем форк libfprint с поддержкой этого устройства, настроим демон fprintd и подключим аутентификацию по отпечатку в KDE (а также дадим подсказки для других окружений).

Почему это вообще проблема?

Сканеры Chipsailing используют проприетарный протокол, и официальной поддержки в мейнстримном libfprint нет. Энтузиаст archeYR проделал огромную работу, создав форк libfprint, который добавляет поддержку CS9711. Позже появились и другие форки (например, от ddlsmurf и Luigi-Pizzolito), которые также активно развиваются .

Важно: драйвер находится на ранней стадии и основан на экспериментальном распознавании изображений . Базовые функции — регистрация и верификация — работают стабильно, но для критических систем с высокими требованиями к безопасности он пока не рекомендуется .

Что нам потребуется

  • Сканер Chipsailing CS9711 (можно проверить командой lsusb, должно быть ID 2541:0236). Обратите внимание: регистрация отпечатка требует 15 касаний, так что наберитесь терпения .

  • Дистрибутив Linux (тестировалось на Kubuntu 24.04 LTS, но подойдёт любой Debian-based).

  • Доступ в интернет и права sudo.

  • Немного терпения.

Пошаговая инструкция

1. Установка зависимостей для сборки

Нам понадобятся инструменты разработки и библиотеки, необходимые для компиляции libfprint:

bash

sudo apt update
sudo apt install git meson ninja-build pkg-config 
  libglib2.0-dev libgusb-dev libgudev-1.0-dev 
  libopencv-dev gobject-introspection libfprint-2-dev
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 1

Обратите внимание: мы ставим и стандартный libfprint-2-dev — он потребуется для удовлетворения зависимостей fprintd, но позже мы его подменим.

2. Клонирование и сборка форка

bash

git clone https://github.com/archeYR/libfprint-CS9711.git
cd libfprint-CS9711 # перейдите в каталог с исходниками
meson setup build
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 2

Если meson сообщит об отсутствующих зависимостях, доустановите их и повторите meson setup build. Затем собираем:

bash

ninja -C build
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 3

Важно: Проверьте работоспособность с помощью примеров до установки — это поможет убедиться, что сканер корректно взаимодействует с библиотекой:

bash

cd build/examples
sudo ./enroll   # приложите палец 15 раз для регистрации
sudo ./verify   # проверьте распознавание
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 4

Если примеры работают, можно устанавливать библиотеку в систему:

bash

cd ..  # вернуться в каталог libfprint-CS9711
sudo ninja -C build install
sudo ldconfig  # обновляем кэш библиотек
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 5

Библиотека будет установлена в /usr/local/lib/x86_64-linux-gnu/. Там появятся файлы:

3. Установка fprintd

Демон fprintd отвечает за взаимодействие с PAM и приложениями.

bash

sudo apt install fprintd
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 6

При установке подтянется стандартная библиотека libfprint из репозитория — она останется неиспользуемой, но удалять её не обязательно.

4. Подмена библиотеки через LD_PRELOAD (простой способ)

Самый простой способ заставить fprintd использовать нашу версию библиотеки — подгружать её через LD_PRELOAD. Для systemd-сервисов это делается через drop-in файл.

Создадим override для сервиса fprintd:

bash

sudo systemctl edit fprintd.service
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 7

В открывшемся редакторе (обычно nano) впишем:

text

[Service]
Environment="LD_PRELOAD=/usr/local/lib/x86_64-linux-gnu/libfprint-2.so"
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 8

Сохраняем и выходим. Затем перезапускаем сервис и проверяем его статус:

bash

sudo systemctl restart fprintd.service
sudo systemctl status fprintd.service
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 9

В выводе не должно быть ошибок, а в drop-in поле должна появиться строка с override.conf.

4. Альтернатива: полная пересборка fprintd (сложный способ)

Если по каким-то причинам LD_PRELOAD не работает (например, в некоторых дистрибутивах), можно пойти другим путём — пересобрать fprintd с привязкой к нашей версии libfprint .

Важный нюанс: на момент написания статьи форк libfprint-CS9711 имеет версию 1.94.6, а актуальный fprintd требует libfprint версии 1.94.9 или выше. Поэтому необходимо использовать старую версию fprintd (1.94.4), которая совместима .

Скачайте исходники fprintd версии 1.94.4, установите дополнительные зависимости и выполните сборку с указанием правильного PKG_CONFIG_PATH. Детальная инструкция есть в репозитории Frainaqua .

5. Регистрация отпечатков для текущего пользователя

Теперь можно добавить свой палец:

bash

sudo fprintd-enroll $USER
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 10

По умолчанию регистрируется правый указательный. Чтобы изменить палец, используйте опцию --finger (см. man fprintd-enroll). Во время регистрации нужно будет 15 раз приложить палец, пока прогресс-бар не заполнится — это нормально .

6. Настройка PAM для входа по отпечатку

Включаем аутентификацию по отпечатку в системе:

bash

sudo pam-auth-update
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 11

В появившемся меню ставим звёздочку напротив пункта Fingerprint authentication. Нажимаем Ok.

Теперь при входе в систему, блокировке экрана или выполнении команд через sudo (если настроено) система будет предлагать приложить палец. Если сканер не сработает, можно будет ввести пароль как обычно.

Для более тонкой настройки (например, чтобы отпечаток работал только для локального входа, но не для sudo) можно редактировать файлы в /etc/pam.d/ вручную. Например, для KDE нужно добавить в /etc/pam.d/kde строку:

text

auth sufficient pam_fprintd.so
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 12

7. Проверка в графическом окружении (KDE/GNOME)

В Kubuntu после включения Fingerprint authentication в PAM, экран входа (SDDM) автоматически предложит использовать сканер. В GNOME работает аналогично. Если что-то не так, проверьте, запущен ли fprintd (systemctl status fprintd), и посмотрите логи:

bash

journalctl -u fprintd -f
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 13

Для GNOME может потребоваться дополнительная настройка polkit. Создайте файл /etc/pam.d/polkit-1 со следующим содержимым :

text

#%PAM-1.0
auth       required     pam_env.so
auth       sufficient   pam_fprintd.so
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    include      system-auth
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 14

После этого перезапустите polkit: sudo systemctl restart polkit.

Возможные проблемы и их решение

Проблема: примеры enroll/verify падают с ошибкой

Убедитесь, что сканер подключён и определился (lsusb). Попробуйте запустить примеры с правами root — возможно, недостаточно прав для доступа к USB.

Проблема: после перезагрузки fprintd не стартует

Проверьте, не сбросился ли override файл. Иногда systemd обновляет сервис и нужно заново применить изменения.

Проблема: PAM запрашивает отпечаток, но сканер не реагирует

Проверьте, что библиотека подгружается корректно. Можно остановить fprintd и запустить его вручную с явным указанием LD_PRELOAD:

bash

sudo systemctl stop fprintd
sudo LD_PRELOAD=/usr/local/lib/x86_64-linux-gnu/libfprint-2.so /usr/libexec/fprintd
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 15

И в другом терминале попробовать зарегистрировать палец. Если ручной запуск работает — проблема в systemd-окружении.

Проблема: библиотека установлена, но примеры не видят сканер

Возможно, у вас другая модель. Проверьте ID сканера. Для CS9711 должен быть ID 2541:0236. Также существуют варианты с ID 2541:9711 (например, в GPD Win Max 2) .

Проблема: верификация не проходит (verify-no-match)

Это известная проблема для данного драйвера . Попробуйте:

  • Перерегистрировать палец, меняя положение и давление.

  • Очистить сенсор микрофиброй.

  • Попробовать альтернативный форк драйвера (например, от Luigi-Pizzolito или ddlsmurf) .

Проблема: ошибки OpenCV (libopencv_features2d.so не найдена)

Иногда после обновления системы версии библиотек OpenCV меняются, и собранный драйвер не может их найти. Решение — создать символические ссылки :

bash

sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.12 /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.11
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 16

(подставьте актуальные версии из сообщения об ошибке).

Проблема: система обновляет самодельную библиотеку через apt

Поскольку мы поставили пакет libfprint-2-dev, apt может попытаться обновить библиотеку из репозитория. Чтобы заблокировать нежелательные обновления, используйте apt-mark :

bash

sudo apt-mark hold fprintd libfprint-2-2 libfprint-2-dev
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 17

Для проверки: apt-mark showhold. Для снятия блокировки: sudo apt-mark unhold fprintd libfprint-2-2.

В дистрибутивах на основе RPM (Fedora) используется dnf versionlock .

Удаление, если что-то пошло не так

Чтобы удалить самодельную библиотеку:

bash

cd libfprint-CS9711  # перейдите в каталог с исходниками
sudo ninja -C build uninstall
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 18

После этого можно переустановить штатный fprintd (хотя он и так был). Удалите override файл:

bash

sudo rm /etc/systemd/system/fprintd.service.d/override.conf
sudo systemctl daemon-reload
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 19

Снимите блокировку с пакетов, если устанавливали:

bash

sudo apt-mark unhold fprintd libfprint-2-2
Подключаем дешёвый USB-сканер отпечатков пальцев Chipsailing CS9711 в Linux - 20

Заключение

Мы получили работающий сканер отпечатков за небольшие деньги в Linux. Хотя драйвер пока не входит в официальный libfprint (отслеживать прогресс можно в issue #610 на GitLab), его качество уже позволяет комфортно использовать устройство для повседневной аутентификации. Это отличный пример того, как сообщество может закрывать аппаратные пробелы даже для бюджетных устройств.

Если вы столкнулись с другими моделями сканеров Chipsailing, возможно, этот же подход сработает и для них — достаточно найти соответствующий форк или написать свой драйвер.

Ссылки:

Автор: leonidsm

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js