노트북 덮개가 닫혀 있을 때 지문 인식을 비활성화하는 방법은 무엇입니까?

노트북 덮개가 닫혀 있을 때 지문 인식을 비활성화하는 방법은 무엇입니까?

최근에 노트북에서 지문 인증에 성공했습니다.Goodix 리눅스 개발Discord 커뮤니티와 github 사용자 Infinytum 및 Michael Teuscher의 driver/538d포크https://github.com/infinytum/libfprint/tree/driver/538d.

하지만 지문 로그인 fprintd-enrollsudo액세스를 활성화한 후 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.*fprintdfprintd

컨텐츠 테스트를 통해 HDMI 케이블이 연결되었는지도 확인했습니다 /sys/class/drm/card0-HDMI-A-1/status.

다음 단계를 따르십시오.

  1. /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
    
    
  2. 파일을 실행 가능하게 만들기

    chmod +x /etc/acpi/laptop-lid.sh
    
  3. /etc/acpi/events/laptop-lid다음 내용으로 파일을 만듭니다 .

    event=button/lid.*
    action=/etc/acpi/laptop-lid.sh
    
  4. acpid다음 명령을 사용하여 서비스를 다시 시작합니다 .

    sudo service acpid restart
    

이제 지문은 뚜껑이 열려 있을 때만 사용됩니다.

fprintd노트북이 종료된 상태에서 연결을 끊었다가 다시 연결할 때 서비스의 올바른 상태를 복원 하려면 systemdinit 파일에서 위 스크립트를 호출하면 됩니다. 이를 수행하는 단계는 다음과 같습니다.

  1. /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
    
  2. 시스템 구성 파일 다시 로드

    sudo systemctl daemon-reload
    
  3. 서비스 시작

    sudo systemctl start laptop-lid.service
    
  4. 부팅 시 자동으로 시작되도록 서비스를 활성화합니다.

    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같은 디버깅 옵션을 추가할 수 있습니다 . 자세한 내용은 확인하세요.debuglogpam_exec 문서. 구성 오류로 인해 계정을 사용하지 못할 수 있으므로 기존 구성을 수정하는 것보다 새 PAM 구성에서 변경 사항을 테스트하는 것이 가장 좋습니다. 예를 들어 system-authas를 복사하여 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새 구성으로 교체하세요.

관련 정보