NixOSで指紋認証ができない問題、以前からどうしようかなーと思って再挑戦した。
以前からの課題
以前の話では指紋用のドライバーがないとかそんなんだった気がするが、
NixOS自体の設定がぐちゃぐちゃだったため再度やりなおした。
fprintdの設定
機種: E14Gen6
configuration.nixservices.fprintd = { enable = true; tod = { enable = true; driver = pkgs.libfprint-2-tod1-goodix; }; };
これで以前問題だったドライバーが動かない問題があっさり解決した
ChatGPTさいきょう
fprintd-enrollの設定
ここはNix関係なく、CLIで指紋を登録するところ
コマンド打って登録した
途中sudoしないと動かなかったけど登録はできた
sudo fprintd-enroll
認証設定
じゃあ指紋をsudoとかログインに使えるようにしなければならないので、
調べたところ以下のsecurityスキームでできるらしかった
configuration.nixsecurity.pam = { services = { login.fprintAuth = true; sudo.fprintAuth = true; }; };
認証がうごかない
指紋は登録できなのに何故か動かなかった。
以下を試した。
- typoがないか、参考資料をコピーして起動
- polkitが起動していないといけないらしいので確認
- securitスキーマではなくauthの直接設定を記述して動作確認
全部動かず。。。意味わからん。。。
sudo fprintdのsudo怪しくね?
今さらだがsudo怪しいなって思った
そもそもsudo使ったら登録ユーザー違うのになると仮説をたてて調査
sudo fprintd-list raizawa
これだと指紋ないよって言われた
はぁ~~~?
sudo fprintd-list root
こっちだとあるらしい、デスヨネ
sudoなしで起動できるのが正しい
journalctlで調査したらfprintdはCLI上だとpolkitに弾かれるからgnome
とかのUIから使ってねって言われた
当然そんなものは入れていないのでGPT先生に聞く
configuration.nixenvironment.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、中途半端な疲労で昼寝してしまって寝れずにこんなことしてしまった。
今日から仕事なんだよね、あーあ。
仮眠取ります。