Сканер отпечатков на ноутбуке чаще всего простаивает: система видит устройство, но вход по пальцу не включен, а пароль приходится набивать десятки раз за день. В Linux за эту функцию отвечает связка из трех частей - библиотеки драйверов, службы хранения образцов и модуля PAM, который подключает отпечаток к любому запросу аутентификации. Разбор ниже закрывает весь путь: проверка совместимости считывателя, регистрация пальца, подключение к PAM для входа в систему, sudo и polkit, обход счетчиков попыток, работа считывателей, которым нужны сторонние службы, и типичные сбои после сна.
Из чего складывается поддержка отпечатков в Linux
Основание пирамиды - библиотека libfprint, куда входят драйверы конкретных считывателей. Актуальные выпуски 1.94 обслуживают сотни моделей от Synaptics, Validity, EgisTec, Elan, Goodix и других производителей, полный список живет на странице поддерживаемых устройств проекта fprint. Над библиотекой работает служба fprintd: она принимает запросы через D-Bus, хранит зарегистрированные образцы в /var/lib/fprint и раздает их проверяющим сторонам. Третий этаж - модуль pam_fprintd из пакета libpam-fprintd: именно PAM решает, при каких действиях система спросит палец, а при каких останется на пароле. Считыватели делятся на два класса: match-on-chip хранят образцы и сравнение ведут внутри самого устройства, а match-on-host передают системе изображение, и сравнение идет программно. Разница всплывает при переносе данных и при сбоях, поэтому класс своего устройства полезно знать заранее. Историческая справка объясняет пестроту поддержки: проект fprint вырос из усилий энтузиастов середины 2000-х, современная архитектура с fprintd и PAM-модулем оформилась к началу 2010-х, и с тех пор драйверы попадают в libfprint по мере появления людей с конкретным железом на руках и доступа к документации производителей. Производители меняют чипы почти каждый год, поэтому свежая модель считывателя первые месяцы живет без поддержки, а затем обрастает драйвером - проверка списка поддерживаемых устройств перед покупкой остается единственной страховкой.
Проверка устройства и выбор пальца для регистрации
Считыватель почти всегда сидит на внутренней шине USB, и lsusb показывает его в общем списке:
lsusb
Bus 001 Device 004: ID 138a:0097 Validity Sensors, Inc.
Если похожей строки в выводе нет, а на корпусе сканер налицо, устройство либо сидит на шине SPI и не виден как USB, либо выключено в прошивке: в BIOS части ноутбуков встречается отдельный пункт включения считывателя. Косвенную проверку дает dmesg с фильтром по слову fingerprint, а утилита lsusb приходит из пакета usbutils. Если идентификатора в списке поддерживаемых libfprint нет, палец работать не будет, и дальше уже смотри в сторону сторонних служб. Когда устройство совместимо, ставится стек целиком:
sudo apt install fprintd libpam-fprintd
Регистрация начинается с выбора пальца. Указательный правой руки - вариант по умолчанию, но удобнее тот, что естественно ложится на сканер при открытии крышки ноутбука, и у части машин это большой палец:
fprintd-enroll -f right-index-finger
fprintd-enroll -f left-thumb
Имена пальцев едины для всех команд стека: right-index-finger, left-thumb, right-middle-finger и остальные из полного набора десяти, поэтому enroll, verify и list говорят на одном языке. Служба попросит приложить палец несколько раз, пока не наберет качественный образец, и завершится словом enroll completed; палец при этом ведут медленно от основания к кончику, плотно и равномерно, потому что спешка дает пустой шаблон. Проверка выполняется без перезагрузки командой fprintd-verify, а список зарегистрированных пальцев показывает fprintd-list с именем пользователя. Лишний образец снимается через fprintd-delete, что выручает после продажи ноутбука или смены рабочего пальца.
Подключение отпечатков к PAM и системным службам
В Debian и Ubuntu модуль подключается через штатный менеджер профилей PAM:
sudo pam-auth-update
В списке появляется пункт аутентификации по отпечатку, и его отметка вставляет вызов pam_fprintd в /etc/pam.d/common-auth до проверки пароля. Ручной вариант для тех, кто правит файлы сам, выглядит так:
auth sufficient pam_fprintd.so timeout=30
auth [success=1 default=ignore] pam_unix.so nullok
Ключевой момент - слово sufficient и порядок строк: если палец распознан, пароль не спрашивают вовсе, а если нет, цепочка проваливается вниз к обычной проверке пароля, и вход не блокируется. В Fedora и других системах на базе RHEL тот же эффект дает authselect с возможностью with-fingerprint:
sudo authselect enable-feature with-fingerprint
sudo authselect apply-changes
После правки PAM отпечаток начинает работать во всех службах, которые используют common-auth: вход в GDM, повышение прав через sudo, запросы polkit при установке пакетов из графического центра, и даже консольный логин на виртуальном терминале спросит палец. Профили pam-auth-update лежат в /usr/share/pam-configs, поэтому внесенное изменение переживает обновления системы и не теряется при пересборке конфигурации. Отдельные службы с собственными файлами в /etc/pam.d, например sudo или polkit-1, включают common-auth через директиву включения, и править их руками обычно не требуется. Утилита sudo проверяет конфигурацию свежим запуском, и самый быстрый тест выглядит как sudo true в новом терминале.
Регистрация отпечатка и проверка входа на практике
Сквозной прогон от нуля до работающего входа выглядит так:
- Поставить пакеты fprintd и libpam-fprintd и убедиться, что считыватель виден в lsusb;
- Зарегистрировать палец командой fprintd-enroll, проведя им несколько раз до завершения процесса;
- Проверить распознавание через fprintd-verify без перезагрузки;
- Включить профиль отпечатков в pam-auth-update или добавить строку в common-auth вручную;
- Открыть новый терминал, выполнить sudo -k, чтобы сбросить кэш прав, и подтвердить запрос приложенным пальцем;
- При сбое смотреть журнал journalctl -u fprintd и перерегистрировать образец.
В графическом окружении GNOME та же функция включается в параметрах системы, в разделе пользователей, пунктом входа по отпечатку, и окружение само вызывает fprintd под капотом. Модуль PAM по умолчанию дает несколько попыток, число настраивается опцией max-tries, а параметр timeout=30 снимает вечное ожидание: если палец не приложили за полминуты, система переходит к паролю. На ноутбуках, где сканер стоит в неудобном месте, стоит зарегистрировать по два пальца каждой руки - служба хранит несколько образцов на пользователя без ограничений сверху. На машине с несколькими учетными записями каждый пользователь проходит свою регистрацию при первом входе, и образцы не смешиваются: у каждого аккаунта собственный каталог в /var/lib/fprint. В графическом окружении регистрация идет мышкой и пальцем без терминала, но командная версия ценнее тем, что показывает точную диагностику: сколько образцов набрано, на каком шаге качества не хватило.
Считыватели, которые не работают без сторонних служб
Часть оборудования выпала из основной библиотеки, и сообщество собрало для него отдельный стек. Считыватели Validity VFS7500 и VFS7552, а также Synaptics с идентификатором 06cb:009a, широко распространенные на ThinkPad середины 2010-х, обслуживаются парой open-fprintd и python-validity: служба замещает штатный fprintd, а драйвер на Python общается с устройством по своему протоколу. Порядок знакомый: пакеты ставятся из репозитория проекта, служба включается через systemctl, enroll проходит той же командой, потому что интерфейс D-Bus сохранен совместимым. Штатный fprintd со сторонним стеком уживаться не умеет, и его снимают перед установкой альтернативы. Для сна проект предлагает собственные службы open-fprintd-resume и open-fprintd-suspend, которые бережно расстаются с устройством перед засыпанием и будят его после, иначе считыватель потребует переподключения модуля. Образцы у этого драйвера хранятся на хосте, поэтому совместимость с образцами match-on-chip нулевая, и после перехода пальцы регистрируют заново. Перед установкой альтернативы проверяют, кто держит устройство: systemctl status fprintd open-fprintd покажет, какая служба активна, потому что конкурирующие службы делят одно имя на шине D-Bus. Хуже обстоят дела со старыми считывателями на шине SPI, встречавшимися на части деловых ноутбуков: lsusb их не видит вовсе, поддержки в libfprint нет, и единственный честный ответ - пароль. Впрочем, именно такие машины чаще всего доживают до второго владельца, и проверка совместимости перед покупкой б/у ноутбука входит в тот же список, что и состояние батареи.
Сон, автоприостановка USB и типичные сбои
Самая частая жалоба - считыватель умирает после сна: ядро усыпляет USB-устройство режимом автоприостановки и не всегда корректно его будит. Лечится правилом udev, которое удерживает питание считывателя:
sudo tee /etc/udev/rules.d/60-fprintd-power.rules <<EOF
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTR{power/control}="on"
EOF
Идентификатор производителя заменяют на свой из вывода lsusb, после чего правила перечитывают через udevadm control --reload. Текущее состояние питания любого USB-устройства проверяется чтением файла power/control в /sys/bus/usb/devices, и значение auto как раз означает разрешенную приостановку. Грубое глобальное решение - параметр usbcore.autosuspend=-1 в строке GRUB_CMDLINE_LINUX_DEFAULT, но он усыпляет режим экономии для всей шины, поэтому точечное правило udev предпочтительнее. Если после пробуждения палец все равно не отвечает, перезапуск службы помогает без перезагрузки:
systemctl restart fprintd
Быстрая проверка после любых правок - пара команд systemctl restart fprintd и fprintd-verify: служба отвечает на живую систему без перезагрузки. Диагностика строится на журнале: journalctl -u fprintd показывает, видела ли служба устройство, что ответил драйвер и на каком шаге отвалилась проверка. Сигнатура забавная, но узнаваемая: палец проведен, служба молчит, а в dmesg красуется строка о приостановке USB-устройства. После правки udev правил проблема уходит насовсем. Виновником бывает и другой пакет с агрессивными правилами, который объявляет права на чужие USB-устройства: в журнале это видно по моменту отсоединения, и решение сводится к правке чужих правил или черному списку конфликтующего пакета.
Границы разумного использования отпечатков
Отпечаток в PAM - фактор удобства, а не замена длинному паролю. Считыватель снимает копию не с самого пальца, а с шаблона, но и шаблон уступает ключу шифрования: оставленный на стакане след никто пока не отменял, поэтому на машинах с ценными файлами палец уместен как второй комфортный способ, а пароль остается последней линией. Техническая граница прозрачна: отпечаток недоступен до загрузки системы, поэтому разблокировать зашифрованный раздел LUKS на старте пальцем не выйдет, initramfs о fprintd ничего не знает. Вторая граница - неинтерактивные процессы: cron и фоновые службы палец провести не могут, поэтому для автоматических задач настраивают sudoers с NOPASSWD или ключи доступа, а PAM-запрос отпечатка остается уделом живого человека у клавиатуры. На общих машинах профили PAM настраивают аккуратно: pam-auth-update меняет common-auth сразу для всех служб, и там, где нужна обязательная проверка пароля, строка pam_fprintd ставится с ключом required вместо sufficient либо исключается из конкретного юнита в /etc/pam.d. Семейный сценарий ложится на стек без усилий: один ноутбук, несколько учетных записей, у каждой свой палец, а экран блокировки спросит отпечаток того, кто разблокирует машину прямо сейчас. Перед продажей ноутбука образцы снимают командой fprintd-delete по каждому пальцу или просто удаляют каталог пользователя в /var/lib/fprint. При таком уходе сканер остается тем, чем и должен быть - быстрым и приятным способом доказать системе, что за клавиатурой хозяин.