Fingerprint scanner: Difference between revisions

From NixOS Wiki
Klinger (talk | contribs)
Full article for installing fingerprint scanners
 
Add a section about how to configure fingerprint login like in other distros
 
(One intermediate revision by one other user not shown)
Line 11: Line 11:
# Install the driver
# Install the driver
services.fprintd.enable = true;
services.fprintd.enable = true;
# If simply enabling fprintd is not enough, try enabling fprintd.tod...
services.fprintd.tod.enable = true;
services.fprintd.tod.enable = true;
# use one of the next four drivers
# ...and use one of the next four drivers
services.fprintd.tod.driver = pkgs.libfprint-2-tod1-goodix; # Goodix driver module
services.fprintd.tod.driver = pkgs.libfprint-2-tod1-goodix; # Goodix driver module
# services.fprintd.tod.driver = pkgs.libfprint-2-tod1-elan # Elan(04f3:0c4b) driver
# services.fprintd.tod.driver = pkgs.libfprint-2-tod1-elan # Elan(04f3:0c4b) driver
Line 23: Line 24:
Just run <syntaxhighlight lang="bash">sudo fprintd-enroll</syntaxhighlight> or use the UI in the Desktop Environment if available.
Just run <syntaxhighlight lang="bash">sudo fprintd-enroll</syntaxhighlight> or use the UI in the Desktop Environment if available.


== Login ==
While <code>services.fprintd.enable = true;</code> enables fingerprint login for the majority of display manager via the corresponding [https://search.nixos.org/options?channel=unstable&show=security.pam.services.%3Cname%3E.fprintAuth&from=0&size=50&sort=relevance&type=packages&query=pam.services.%3Cname%3E. PAM module], it can sometimes disable the ability to login using a password. This is addressed in the GitHub issue [https://github.com/NixOS/nixpkgs/issues/171136 171136]. In that issue, a possible workaround is addressed using a custom PAM module for the gnome display manager:<syntaxhighlight lang="nixos">
security.pam.services.login.fprintAuth = false;
security.pam.services.gdm-fingerprint = lib.mkIf (config.services.fprintd.enable) {
      text = ''
        auth      required                    pam_shells.so
        auth      requisite                  pam_nologin.so
        auth      requisite                  pam_faillock.so      preauth
        auth      required                    ${pkgs.fprintd}/lib/security/pam_fprintd.so
        auth      optional                    pam_permit.so
        auth      required                    pam_env.so
        auth      [success=ok default=1]      ${pkgs.gnome.gdm}/lib/security/pam_gdm.so
        auth      optional                    ${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so


        account    include                    login


        password  required                    pam_deny.so
        session    include                    login
        session    optional                    ${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so auto_start
      '';
    };
};
</syntaxhighlight>
[[Category:Hardware]]
[[Category:Hardware]]

Latest revision as of 22:21, 31 October 2024

Fingerprint scanners (on laptop computers) can be used to unlock devices instead of using passwords.

Install

# Start the driver at boot
systemd.services.fprintd = {
  wantedBy = [ "multi-user.target" ];
  serviceConfig.Type = "simple";
};

# Install the driver
services.fprintd.enable = true;
# If simply enabling fprintd is not enough, try enabling fprintd.tod...
services.fprintd.tod.enable = true;
# ...and use one of the next four drivers
services.fprintd.tod.driver = pkgs.libfprint-2-tod1-goodix; # Goodix driver module
# services.fprintd.tod.driver = pkgs.libfprint-2-tod1-elan # Elan(04f3:0c4b) driver
# services.fprintd.tod.driver = pkgs.libfprint-2-tod1-vfs0090; # driver for 2016 ThinkPads
# services.fprintd.tod.driver = pkgs.libfprint-2-tod1-goodix-550a # Goodix 550a driver (from Lenovo)

Enroll fingerprint

Just run

sudo fprintd-enroll

or use the UI in the Desktop Environment if available.

Login

While services.fprintd.enable = true; enables fingerprint login for the majority of display manager via the corresponding PAM module, it can sometimes disable the ability to login using a password. This is addressed in the GitHub issue 171136. In that issue, a possible workaround is addressed using a custom PAM module for the gnome display manager:

security.pam.services.login.fprintAuth = false;
security.pam.services.gdm-fingerprint = lib.mkIf (config.services.fprintd.enable) {
      text = ''
        auth       required                    pam_shells.so
        auth       requisite                   pam_nologin.so
        auth       requisite                   pam_faillock.so      preauth
        auth       required                    ${pkgs.fprintd}/lib/security/pam_fprintd.so
        auth       optional                    pam_permit.so
        auth       required                    pam_env.so
        auth       [success=ok default=1]      ${pkgs.gnome.gdm}/lib/security/pam_gdm.so
        auth       optional                    ${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so

        account    include                     login

        password   required                    pam_deny.so

        session    include                     login
        session    optional                    ${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so auto_start
      '';
    };
};