ubuntu/linux如何添加人脸识别登录?

How to add facial recognition based login in ubuntu/linux?

我写了一个代码(在 python 中)来检测我的脸。现在我想在我的 Ubuntu 系统中添加此登录功能。我在互联网上搜索但找不到合适的答案。

我想显示 option/icon 到 select 的面部识别,单击它时,我的面部识别代码在后台启动 运行。我怎样才能实现它?请准确解释我需要在 ubuntu 系统中进行哪些更改以启用和使用此类选项?

您需要使用 Linux-PAM 来 Su/Sudo 使用面部识别。我在此处使用 python + bash 脚本完成此操作:https://github.com/lambrou/susentry 我已经阅读了我的自述文件的一部分,并将根据您的问题的上下文向您解释。

您需要做的第一件事是制作一个 bash 脚本来调用您的 python 脚本。

#!/bin/bash

# You must change the value /path/to/susentry.py to the path of your
# python file.
export DISPLAY=:0.0
xhost +local:
python3 /path/to/susentry.py -l # run the python script for facial recognition
exit_status=$? # This grabs the exit status of the python script we just ran
if [ "${exit_status}" -ne 0 ]; # checks to see if exit status is anything other than 0
then
    echo "exit ${exit_status}"
    exit 1 # exit status 1 on python script fail (exit 1)
fi
echo "EXIT 0"
exit 0 # exit 0 if we get to this line

此脚本的作用是将显示器设置为您的显示器,因为 PAM 模块将从不同的用户空间调用脚本,我们需要告诉它您的显示器在哪里,以及您使用的 xhost。然后,它获取您的 python 脚本的退出状态(确保面部识别失败时退出 1,通过它退出 0)并将其传递给 PAM 以让它知道脚本是通过还是失败。 找到这一行:

python3 /path/to/susentry.py -l

并将 /path/to/susentry.py 更改为 python 脚本的完整路径。然后,将此文件放在 /usr/local/bin 文件夹中。

接下来,我们修改PAM common-auth文件:

gksudo gedit /etc/pam.d/common-auth

在您的通用授权文件中找到这一行:

auth [success=1 default=ignore]     pam_unix.so nullok_secure

此行调用要求用户输入密码的模块。如果模块 returns 成功(密码正确),则跳过下一行(success=1 表示跳过一行)。如果身份验证成功,目标是跳过以下行:

auth    requisite           pam_deny.so

由于此行拒绝用户访问权限。 所以,如果你想使用 su/sudo,但不是输入你的密码,而是使用面部比较,将此 放在 上面的行上:

auth [success=2 default=ignore]     pam_exec.so debug log=/path/to/pamlogs.txt /usr/local/bin/susentry

确保将 /path/to/pamlogs.txt 更改为要保存 PAM 输出的位置。 (此输出是来自您的 PAM、您的 bash 脚本和您的 python 脚本的错误输出和标准输入输出) 让我们分解一下。

auth [success=2 default=ignore]

表示“如果这个程序returns成功(exit 0),则跳过接下来的2行。(密码提示行,身份验证失败行)

pam_exec.so debug log=/path/to/pamlogs.txt

这部分说“使用pam_exec执行bash脚本,并将所有错误logs/stdin日志发送到/path/to/pamlogs.txt

/usr/local/bin/susentry

这部分是bash脚本所在的位置。这就是 PAM exec 运行并等待退出代码的原因。

如果面部识别脚本失败,它应该退回到询问密码。 请注意,您在编辑 /etc/pam.d/common-auth 时需要小心,因为您可能会破坏您的 sudo。你可能想在处理这些东西时打开一个具有 root 权限的新终端,这样你就可以恢复更改。