我用python编写了一个代码来检测我的脸。现在我想添加这个功能来登录我的Ubuntu系统。我在网上搜索,但找不到合适的答案。
我想显示一个选择面部识别的选项/图标,点击它,我的面部识别代码开始在后台运行。我怎样才能做到?请详细说明我需要在哪里对ubuntu系统进行更改以启用和使用这样的选项?

最佳答案

您将希望使用Linux PAM来允许您使用面部识别Su/Sudo。我已经用python+a 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/sucentry.py-l
并将/path/to/sucentry.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

这一行调用向用户请求密码的模块。如果模块返回success(密码正确),则跳过下一行(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脚本的错误输出和stdin输出)
让我们把这个分解。
auth [success=2 default=ignore]
意思是“如果这个程序返回成功(退出0),那么跳过接下来的2行。(密码提示行,身份验证失败行)
pam_exec.so debug log=/path/to/pamlogs.txt
这一部分说“使用pam_exec执行bash脚本,并将所有错误日志/stdin日志发送到/path/to/pam logs.txt
/usr/local/bin/susentry
这部分是bash脚本的位置。这就是PAM Excel运行并等待退出代码的原因。
如果面部识别脚本失败,它应该返回到要求密码。
请注意,在编辑/etc/pam.d/common-auth时需要小心,因为您可能会破坏sudo。在处理这些内容时,您可能希望打开一个具有根用户权限的新终端,以便可以还原更改。

关于python - 如何在ubuntu/linux中添加基于面部识别的登录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52353483/

10-11 17:45