こんにちは、山田ハヤオです。メインはArch Linuxですが当然Windowsも使います。
学校の関係上でリモート授業があり、Webカメラを買いました。
せっかく買うのならということでWindows Helloによる顔認証に対応したカメラにしました。
しかしあくまでもメインのOSはArch Linuxなので、Arch LinuxでWindows Helloの認証ができるようにしました。
今回買ったウェブカメラ
Elecomのウェブカメラで、Amazonで7000円ほどでした。アマギフとクーポンで安く購入、
200万画素で1080pのフルHD対応のスグレモノです(30FPSなのは仕方ない)
遠隔授業用で買ったのですがせっかくなのでいろいろ遊んでみます。
公式サイトを見ると対応OSがWindows 10しかありませんがたぶん大丈夫です。
Linuxにつなげてみる
まずはArch Linuxで認識するかテストします。
lsusbコマンドはUSBに接続されているデバイスを表示してくれます。
とりあえずデバイスドライバも何も考えないでOBSで試してみます。
あっさりとカメラが使えてしまいました。Linux用のドライバなどもなさそうでした。
Windows Helloとは
Windows HellioはMicrosoftが開発したWindows 10以降で使用できる生体認証システムです。
ハードウェアが対応していれば指紋認証や顔認証などができます。
Windows Helloによる顔認証では、赤外線カメラの情報を使って顔認証を行います。
ちなみにデュアルブートしているInsider PreviewのWindows 11ではあっさりと顔認証に成功しました。
今回はこれをLinuxでやろうという企画になります。
Linuxで使うには
LinuxでWindows Helloと同等の機能を使うためのフリーソフトがあります。
「Howdy」というオープンソースのソフトです。
こいつを使ってPAMに設定してあげることでsudoやディスプレイマネージャの認証に顔認証を追加することができます。
今回はAlter Linux (Arch Linux)にHowdyをインストール、設定していこうと思います。
Howdyのインストール
まずは依存関係をインストールします。(なぜか自動でインストールされませんが必須です)
yay -S --asdeps openexr python-opencv
上のパッケージをインストールできたら、本体をインストールします。
yay -S --noconfirm howdy
コンパイルにしばらく時間がかかるのでお茶でもしながら待っててください。
カメラを探す
Howdyで使用するカメラを指定する必要があります。
まずは接続したカメラがどこにあるのかを探します。
sudo v4l2-ctl --list-devices
デバイスの一覧が表示されるのでその中から赤外線カメラを見つけてください。
ハヤオは上から3番目でした。
今回はカメラのパスを/dev/video2にしますが、環境によって異なるのでその都度読み替えてください。
カメラを設定
設定をコマンドで行えるようにソフトをインストールします。
yay -S crudini
インストールが終わったら以下のコマンドを実行します。
sudo crudini --set /usr/lib/security/howdy/config.ini video device_path /dev/video2
これで設定が書き込まれたはずです。以下のコマンドで確認します。
sudo crudini --get /usr/lib/security/howdy/config.ini video device_path
設定したパスになっていれば成功です。
なっていない場合、コマンドを打ち間違えていないか確認してください。
Howdyの動作テスト
インストールが終わったらまずはカメラが正しく認識されているかテストしましょう。
ターミナルを開いて以下のコマンドでテストできます。
sudo howdy test
こんな感じで白黒の画面になれば赤外線カメラに設定されています。
起動しなかったりカメラがカラーの場合は設定が間違っているので前に戻ってやり直してください。
顔をHowdyに追加する
自分の顔の情報をHowdyに追加します。以下のコマンドを実行してください。
顔のモデル名が聞かれるので適当に設定してエンターキーを押します。
sudo howdy add
その後、しばらくカメラを見続けると登録が完了します。
ただ1つだけ登録してもうまく動かない場合が多いので、同じ顔で5~7個ほど角度を変えて登録しておくと確実です。
これで顔の登録は完了です。
PAMの設定をする
いよいよ最終段階です。sudoやLightDMにHowdyを使うように設定してあげます。
Linuxの認証システムの1つであるPAMに対して設定を変更してあげます。
それぞれのPAMの設定ファイルの先頭に以下の行を追加します。
auth sufficient pam_python.so /lib/security/howdy/pam.py
sudo
まずはsudoで顔認証をするように設定します。
先程の行を/etc/pam.d/sudo
に記述してください。
こんな感じになるはずです。
#%PAM-1.0
auth sufficient pam_python.so /lib/security/howdy/pam.py
auth include system-auth
account include system-auth
session include system-auth
LightDM
LightDMに対しても同じように設定してあげます。
自動ログインを設定している場合は/etc/pam.d/lightdm-autologin
設定してない場合は/etc/pam.d/lightdm
です
SDDM
Plasmaを使っている人はSDDMの人が多いと思います。
自動ログインを設定している場合は/etc/pam.d/sddm-autologin
です
設定していない場合は/etc/pam.d/sddm
です
結果
sudoコマンドを実行すると顔認証が行われ、パスワードなしで昇格できるようになります。
終了
あとは再起動すればsudoやlightdmの起動したタイミングで顔認証が実行されます。
顔認証の有効や無効は以下で切り替えることができます。
無効化するには
sudo crudini --set /usr/lib/security/howdy/config.ini core disabled true
もう一度有効化するには
sudo crudini --set /usr/lib/security/howdy/config.ini core disabled false
で切り替えられます。
その他のトラブルシューティングはこちらをどうぞ
それでは、また今後。
The post LinuxでWindows Helloの顔認証をする first appeared on FascodeNetwork Blog.