目次

NixOSの指紋認証できた

(更新: )ぎじゅつ

NixOSで指紋認証ができない問題、以前からどうしようかなーと思って再挑戦した。

以前からの課題

#

以前の話では指紋用のドライバーがないとかそんなんだった気がするが、
NixOS自体の設定がぐちゃぐちゃだったため再度やりなおした。

fprintdの設定

#

機種: E14Gen6

configuration.nix
services.fprintd = { enable = true; tod = { enable = true; driver = pkgs.libfprint-2-tod1-goodix; }; };

これで以前問題だったドライバーが動かない問題があっさり解決した
ChatGPTさいきょう

fprintd-enrollの設定

#

ここはNix関係なく、CLIで指紋を登録するところ
コマンド打って登録した
途中sudoしないと動かなかったけど登録はできた

sudo fprintd-enroll

認証設定

#

じゃあ指紋をsudoとかログインに使えるようにしなければならないので、
調べたところ以下のsecurityスキームでできるらしかった

configuration.nix
security.pam = { services = { login.fprintAuth = true; sudo.fprintAuth = true; }; };

認証がうごかない

#

指紋は登録できたのに何故か動かなかった。
以下を試した。

  • typoがないか、参考資料をコピーして起動
  • polkitが起動していないといけないらしいので確認
  • securityスキーマではなくauthの直接設定を記述して動作確認

全部動かず。。。意味わからん。。。

sudo fprintdのsudo怪しくね?

#

今さらだがsudo怪しいなって思った
そもそもsudo使ったら登録ユーザー違うのになると仮説をたてて調査

sudo fprintd-list raizawa

これだと指紋ないよって言われた
はぁ~~~?

sudo fprintd-list root

こっちだとあるらしい、デスヨネ

sudoなしで起動できるのが正しい

#

journalctlで調査したらfprintdはCLI上だとpolkitに弾かれるからgnome
とかのUIから使ってねって言われた

当然そんなものは入れていないのでGPT先生に聞く

configuration.nix
environment.etc."polkit-1/rules.d/50-fprintd.rules".text = '' polkit.addRule(function(action, subject) { if (action.id == "net.reactivated.fprint.device.enroll" && subject.isInGroup("wheel")) { return polkit.Result.YES; } }); '';

こんな感じでwheel groupに入れてるなら通常起動を許可する雑な方法を提示された
藁にも縋る思いなので実行して無事設定に成功した

まとめ

#
  • ドライバーの問題はなにごともなくfprintd-enrollまで動いた
  • sudoで起動すると実行ユーザーでなくて、rootに保存されるので指紋の情報がない扱いっぽい
  • polkitってやつがfprintdの実行権限をつかさどっているのでごにょごにょして許可したらユーザーに紐付く指紋情報が保存できた
    • ログインなどの設定が反映された

おわりに

#

現在、2025-05-07 06:42、中途半端な疲労で昼寝してしまって寝れずにこんなことしてしまった。
今日から仕事なんだよね、あーあ。
仮眠取ります。