快轉到主要內容

Howdy ~ 使用人臉解鎖Linux筆電,Windows Hello開源替代品

· 民國114年乙巳年
·
切換繁體/簡體
分類   Linux系統 Linux好用軟體
標籤   Video4Linux KDE Plasma GNOME
目錄

Install Howdy facial authentication for Linux desktop.

人臉解鎖,即允許使用者刷臉解鎖電腦或筆電。

很多人用Linux跑人臉辨識的Python專案,那麼可不可以用人臉辨識技術來解鎖Linux電腦呢?

如果不算Android和ChromeOS,目前加入人臉辨識的Linux發行版只有Deepin,他們使用名為Seetaface的方案。其他主流Linux發行版如Ubuntu、Fedora、openSUSE、Arch Linux都沒有人臉辨識,需要依賴第三方程式實現人臉解鎖。

Linux最受歡迎的人臉解鎖程式,當屬boltgolt開發的「Howdy」,能夠賦予Linux電腦人臉解鎖的能力。

howdy.webp

開發者說它是一款模仿Windows Hello的軟體,能夠在Linux系統實現類似Windows Hello臉部辨識的功能。它可以在登入Linux電腦的時候時用人臉解鎖,還有在桌面執行sudo權限的程式的時候,用人臉替代密碼解鎖。

1. Howdy原理
#

Howdy使用的技術為OpenCV + Dlib模型。

Howdy需要紅外線相機進行人臉辨識,原理很像是Windows Hello。因此硬體需求為搭載紅外線相機的電腦。

雖然Howdy不一定要相機支援紅外線,參見這個issue,但安全性會大大降低,變成用一張照片就能騙過去。所以還是使用有紅外線相機的電腦吧。

Howdy掃描你的人臉之後會建立模型,全部的資料都儲存在本機,不會用到TPM。

Howdy依賴Linux發行版常見的PAM機制作為認證手段,能夠將人臉作為密碼以外的認證手段。若人臉解鎖失敗,便回退到密碼。

舉凡執行sudo指令、登入桌面環境、解鎖螢幕鎖定等操作,Howdy都會自動跳出來識別人臉。

20250316_091537.webp

Howdy尚能搭配Polkit,自動在桌面環境「輸入密碼」的視窗進行人臉解鎖。

Screenshot_20250316_090032.webp

當然,Howdy需要圖形界面才能運作,因為這樣才能使用相機。若是SSH連線階段,Howdy就不會跳出來認證。

不過Howdy並非唯一的認證方式,失敗了依然能輸入密碼登入,不能指定「僅限人臉解鎖電腦」。且要保護電腦,最好啟用Secure Boot與LKMS加密硬碟,才能確保裝置能不被外力輕易破解。

2. 安裝Howdy
#

  1. 首要任務當然是確認你Linux電腦的相機驅動有無正常運作。隨便用瀏覽器開一個網頁,測試能否存取相機。

  2. 安裝偵測相機裝置的工具,例如v4l2:

sudo apt install v4l-utils
  1. 然後參照Github說明,安裝Howdy。譬如Ubuntu就是透過開發者的PPA安裝:
sudo add-apt-repository ppa:boltgolt/howdy

sudo apt update

sudo apt install howdy

註:Ubuntu 24.04以上版本會遇到pip無法安裝到系統目錄的問題error: externally-managed-environment,暫時的解決方法是取消EXTERNALLY-MANAGED的機制:

python3 --version

sudo mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.old

sudo apt install howdy
  1. 確認Howdy函式庫的路徑:
ls -l /usr/local/lib/x86_64-linux-gnu/security/pam_howdy.so

# 或者
ls -l /lib/security/pam_howdy.so

#或者
ls -l /lib64/security/pam_howdy.so
  1. Linux系統若有啟用SELinux,可能會導致無法在開機的時候存取相機,參考這裡解決。

3. 設定Howdy使用的相機
#

用圖形介面設定
#

有許多人開發過前端GUI,譬如SlimbookFaceKCM howdy,不過他們偏小眾。

用Howdy開發者內建的程式設定吧,執行sudo howdy-gtk然後依照指示設定。下載人臉辨識模型的時候選取Balanced版本。

Screenshot_20250316_073355.webp

用指令設定
#

  1. 列出Linux的相機裝置,相機裝置應該是/dev/video開頭,但若有多個相機,可能每次開機後路徑都不一樣,所以我用/dev/v4l/by-id/的路徑來決定相機路徑為何。
ls -l /dev/v4l/by-id/

# 範例輸出:
usb-SunplusIT_Inc_HD_Webcam-video-index0 -> ../../video0
usb-SunplusIT_Inc_HD_Webcam-video-index1 -> ../../video1
  1. 查看相機資訊,我這個應該就是紅外線相機。
v4l2-ctl -d /dev/v4l/by-id/SunplusIT_Inc_HD_Webcam-video-index0 -D
  1. 編輯Howdy設定檔
sudo howdy config
  1. 填入相機路徑
device_path = /dev/v4l/by-id/usb-SunplusIT_Inc_HD_Webcam-video-index0
  1. 啟用人臉辨識的通知訊息
detection_notice = true 
  1. 設定好之後,啟動Howdy測試程式,看看相機能否辨識到人臉。有些電腦鏡頭在做動的時候就會閃紅光。
sudo howdy test
  1. 這個視窗內,偵測到臉部就會出現圈圈,代表成功偵測到人臉。紅色圈圈是尚未建立模型的人臉,綠色圈圈是已經建立模型的人臉。

    Screenshot_20250316_090735.webp

  2. 請繼續維持同樣的角度看著鏡頭,然後新增臉部。Howdy沒有圖形互動的界面,盯著鏡頭幾秒後,就會自動建立臉部模型了。

sudo howdy add

4. 用Howdy解鎖sudo密碼
#

設定哪些輸入密碼的場合需要讓Howdy跳出來驗證,最先處理的就是sudo。我希望的處理邏輯:先嘗試人臉解鎖,無法使用人臉的時候,再回退到密碼解鎖。依照Howdy的設定,大約5秒沒有看到人臉就會算是解鎖失敗,然後回退到密碼解鎖。

  1. 找到Linux系統的PAM設定檔,通常位於/etc/pam.d目錄。

  2. 編輯/etc/pam.d/sudo/etc/pam.d/system_auth這兩個檔案

  3. 在頂部加入以下內容,設定sufficient認證規則,填入Howdy函式庫的路徑:

auth sufficient /lib/security/pam_howdy.so
  1. 重開機。

  2. 嘗試在終端機輸入sudo指令,應該就會自動啟動Howdy人臉解鎖。按Ctrl+C的話就直接跳過倒數計時,直接進入密碼解鎖。

    Screenshot_20250316_092149.webp

5. 用Howdy解鎖桌面環境
#

依然是編輯PAM的設定檔。

這個需要依照桌面環境調整。

GNOME
#

GNOME 47以上版本,只需要編輯GDM設定檔就可以了。在登入畫面和鎖定畫面便可以用人臉解鎖。

編輯/etc/pam.d/gdm-password ,加入以下內容:

auth     [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth sufficient /lib/security/pam_howdy.so

重開機。在GDM畫面點一下要登入的使用者,再看一下鏡頭,應該就能夠用人臉解鎖了。

GNOME螢幕鎖定後畫面應該會變黑,鍵盤喚醒螢幕之後才可以使用人臉辨解鎖。

KDE Plasma
#

KDE Plasma 6.0以上版本,需要編輯顯示管理器以及螢幕鎖定程式。

設定開機後啟動的SDDM顯示管理器,編輯/etc/pam.d/sddm,加入以下內容:

auth     [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth sufficient /lib/security/pam_howdy.so

但是自動解鎖SDDM並不會一併解鎖KDE鑰匙圈。所以其實不建議在這裡啟用人臉解鎖。

然後是KDE螢幕鎖定程式,編輯/etc/pam.d/kde,加入以下內容:

auth sufficient /lib/security/pam_howdy.so

KDE的螢幕鎖定程式可能不是以目前使用者執行,所以要將Howdy設定為允許所有使用者執行

sudo chmod o+x /lib/security/howdy/dlib-data

重開機,嘗試用人臉解鎖。

KDE螢幕鎖定後畫面應該會變黑,鍵盤喚醒螢幕之後才可以使用人臉辨解鎖。若螢幕沒有在鎖定之後熄滅,會導致人臉解鎖太早偵測導致失敗。

6. 用Howdy解鎖瀏覽器?
#

Windows系統的Google Chrome在填入密碼的時候,能夠用Windows Hello解鎖。

至於Linux,目前看來是辦不到。Linux的Google Chrome使用桌面環境附屬的鑰匙圈服務來管理密碼。通常登入桌面後這個鑰匙圈就跟著自動解鎖了,沒有Howdy介入的餘地。

參考資料
#

相關文章

Linux電腦同步iCloud檔案、郵件、行事曆(Rclone + Thunderbird 教學)
分類   Linux系統 Linux好用軟體
標籤   Rclone IOS Linux GNOME KDE Plasma
給Linux設定文字轉語音,Speech Dispatcher + Piper TTS安裝
分類   Linux系統 Linux好用軟體
標籤   Text to Speech GNOME KDE Plasma
Linux安裝應用程式超方便~應用商店前端介紹
分類   Linux系統 Linux好用軟體
標籤   Linux GNOME KDE Plasma

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。