최근에 노트북에서 지문 인증에 성공했습니다.Goodix 리눅스 개발Discord 커뮤니티와 github 사용자 Infinytum 및 Michael Teuscher의 driver/538d
포크https://github.com/infinytum/libfprint/tree/driver/538d.
하지만 지문 로그인 fprintd-enroll
및 sudo
액세스를 활성화한 후 sudo pam-auth-update
문제가 발견되었습니다.
외부 모니터에서 작업할 때마다 덮개가 닫혀 있을 때 비밀번호를 입력하기 전에 지문 확인 시간이 초과될 때까지 기다려야 하므로 sudo
몇 초의 지연이 발생합니다.
username@host:~/ron/libfprint$ sudo ls
Place your finger on the fingerprint reader
Place your finger on the reader again
Place your finger on the reader again
Place your finger on the reader again
Verification timed out
[sudo] password for username:
sudo
암호를 입력하기 전에 지문 시간이 초과될 때까지 기다릴 필요가 없도록 노트북 덮개가 닫혀 있을 때 지문 확인을 비활성화하려면 어떻게 해야 합니까 ?
답변1
노트북 덮개를 닫을 때 지문 인증을 비활성화하고 다시 열 때 다시 활성화하기 위해 덮개를 닫을 때 서비스를 중지 및 차단하고 덮개를 닫을 때 취소 하는 사용자 지정 스크립트에 acpid
이벤트 바인딩을 사용합니다. 서비스 덮개를 열어 시작합니다 .button/lid.*
fprintd
fprintd
컨텐츠 테스트를 통해 HDMI 케이블이 연결되었는지도 확인했습니다 /sys/class/drm/card0-HDMI-A-1/status
.
다음 단계를 따르십시오.
/etc/acpi/laptop-lid.sh
다음 내용으로 파일을 만듭니다 .#!/bin/bash lock=$HOME/fprint-disabled if grep -Fq closed /proc/acpi/button/lid/LID0/state && grep -Fxq connected /sys/class/drm/card0-HDMI-A-1/status then touch "$lock" systemctl stop fprintd systemctl mask fprintd elif [ -f "$lock" ] then systemctl unmask fprintd systemctl start fprintd rm "$lock" fi
파일을 실행 가능하게 만들기
chmod +x /etc/acpi/laptop-lid.sh
/etc/acpi/events/laptop-lid
다음 내용으로 파일을 만듭니다 .event=button/lid.* action=/etc/acpi/laptop-lid.sh
acpid
다음 명령을 사용하여 서비스를 다시 시작합니다 .sudo service acpid restart
이제 지문은 뚜껑이 열려 있을 때만 사용됩니다.
fprintd
노트북이 종료된 상태에서 연결을 끊었다가 다시 연결할 때 서비스의 올바른 상태를 복원 하려면 systemd
init 파일에서 위 스크립트를 호출하면 됩니다. 이를 수행하는 단계는 다음과 같습니다.
/etc/systemd/system/laptop-lid.service
다음 내용으로 파일을 만듭니다.[Unit] Description=Laptop Lid After=suspend.target [Service] ExecStart=/etc/acpi/laptop-lid.sh [Install] WantedBy=multi-user.target WantedBy=suspend.target
시스템 구성 파일 다시 로드
sudo systemctl daemon-reload
서비스 시작
sudo systemctl start laptop-lid.service
부팅 시 자동으로 시작되도록 서비스를 활성화합니다.
sudo systemctl enable laptop-lid.service
이제 컴퓨터가 꺼진 상태에서 연결/연결 해제 시에도 상태가 정확해야 합니다.
답변에서 코드를 생성하는 데 사용된 참조:
답변2
Linux에서 지문 확인이 통과됨폴리아크릴아미드pam_fprintd.so
, 서비스와 통신하는 모듈이 있습니다 fprintd
. fprintd
서비스가 작동하지 않으면 통신 pam_fprintd
할 수 없으며 PAM 인증이 구성의 다음 모듈로 이동합니다. 그러나 다른 PAM 모듈도 건너뛸 수 있습니다 pam_fprintd
.
/etc/pam.d/system-auth
다음이 있다고 가정해 보겠습니다 .
auth sufficient pam_fprintd.so
auth required pam_unix.so
실제 구성은 다를 수도 있고 다른 위치에 있을 수도 있지만 결론은 비밀번호 인증을 수행한다는 pam_fprintd
것 입니다.pam_unix
pam_fprintd.so
당신이 할 수 있는 일은 LID가 꺼져 있으면 모듈을 건너뛰기 전에 구성에 다른 항목을 추가하는 것입니다 . 이를 달성하는 한 가지 방법은 다음과 같습니다.pam_exec.so기준 치수. /usr/local/bin/pam_check_lid
다음 내용을 포함하는 실행 가능한 스크립트를 만듭니다 .
#!/bin/sh
LID_STATE=$(cat /proc/acpi/button/lid/LID/state | cut -d':' -f2 | tr -d ' ')
case ${LID_STATE} in
closed)
echo closed
exit 1
;;
open*)
echo open
exit 0
;;
*)
# LID is open by default
echo unknown
exit 0
;;
esac
중요한: 파일이 전역적으로 쓰기 가능하지 않은지 확인하세요. 그렇지 않으면 시스템에 보안 취약점이 발생할 수 있습니다. 또한, dbus를 통해 LID 상태를 확인하실 수 있으니, 자세한 내용을 확인해주세요.이것.
그런 다음 앞에 다음 줄을 추가합니다 pam_fprintd
.
auth [success=ignore default=1] pam_exec.so quiet /usr/local/bin/pam_check_lid
따라서 구성은 다음과 같습니다.
auth [success=ignore default=1] pam_exec.so quiet /usr/local/bin/pam_check_lid
auth sufficient pam_fprintd.so
auth required pam_unix.so
PAM 인증은 이제 지문 인증을 시도하기 전에 스크립트를 실행하고, 스크립트가 0이 아닌 종료 코드를 반환하는 경우(실패) PAM 구성에서 항목 1개를 건너뛰는 기본 작업을 수행합니다. 따라서 pam_fprintd
다음 인증으로 이동합니다. 즉 pam_unix
). LID가 켜져 있으면 0
종료 코드를 반환하고 성공하면 ignore
구성의 키워드로 인해 아무 작업도 수행하지 않습니다.
또는 스크립트를 사용하는 대신 pam_exec.so
스크립트와 동일하게 작동하는 고유한 PAM 모듈을 만들 수 있습니다.
디버깅 및 실제 구현에 대한 의견은 거의 없습니다. 문제가 있는 경우 및 pam_exec
같은 디버깅 옵션을 추가할 수 있습니다 . 자세한 내용은 확인하세요.debug
log
pam_exec
문서. 구성 오류로 인해 계정을 사용하지 못할 수 있으므로 기존 구성을 수정하는 것보다 새 PAM 구성에서 변경 사항을 테스트하는 것이 가장 좋습니다. 예를 들어 system-auth
as를 복사하여 system-auth-new
작업을 계속한 system-auth-new
다음 테스트할 때 교체할 수 있습니다. 테스트를 위해 다음을 사용할 수 있습니다.팸 테스터. 예를 들어:
cp /etc/pam.d/system-auth /etc/pam.d/system-auth-new
# UPDATE /etc/pam.d/system-auth-new
pamtester system-auth-new YOUR_USER_NAME authenticate
예상대로 작동하면 system-auth
새 구성으로 교체하세요.