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 权限的新终端,这样你就可以恢复更改。
我写了一个代码(在 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 权限的新终端,这样你就可以恢复更改。