스캔할 때 카드 리더가 파일을 생성하도록 하려면 어떻게 해야 합니까?

스캔할 때 카드 리더가 파일을 생성하도록 하려면 어떻게 해야 합니까?

나는 라즈베리 파이 4와HID 옴니키 5427G2. 카드를 스캔하면 카드 리더가 키보드 역할을 하며 카드에 해당하는 일련의 7자리 숫자를 입력합니다. 이것은 잘 작동하지만 텍스트 파일이나 텍스트 필드의 키보드를 열고 선택하는 것처럼 입력합니다.

내가 원하는 것은 카드가 스캔될 때 스캔에서 얻은 번호가 "scan.txt" 파일에 저장되어 어딘가에 저장된다는 것입니다. 어떻게 해야 하나요?

또한 번호를 파일에 저장하면 자동으로 쉘 스크립트를 호출하기를 원합니다. 스크립트를 만들었으니 스캔에서 호출하면 됩니다.

미리 감사드립니다!

답변1

"빠르고 더러운" 해결책은 무한히 반복되는 bash 스크립트를 실행하는 것입니다.

#!/bin/bash
while read scan; do
    scandate=$(date +"%F_%T.%N")
    echo "$scan" >> /tmp/scan_$scandate.log
    cat /tmp/scan_$scandate.log &
done

애플리케이션을 대신하여 cat /tmp/scan_$scandate.log스캔된 입력에 대해 일부 작업을 수행합니다 . 이 스크립트에서는 스캔한 데이터를 처리할 수도 있습니다.

스캐너/키보드에서 입력을 읽는 기능은 키보드를 차단하고 Pi를 해당 기능에 전용으로 사용한다는 점에 유의하세요.

답변2

당신이 원하는 것은 기본적으로 간단합니다키로거.

귀하의 장치는 다음을 수행할 수 있습니다.키보드 에뮬레이션, Linux에서 키보드 장치는 다음과 같습니다.문서, 그래서 당신은 할 수 있습니다표준 입력 리디렉션.

또는 다음과 같은 프로그램을 사용할 수 있습니다.로그 키(이미 배포판에서 패키지로 제공될 수도 있습니다.) 추가 문서여기또한.

시스템에 설치된 키보드가 아닌 특정 장치에서만 입력을 캡처하려는 경우 장치를 식별해야 합니다. /dev/input/예를 들어 경로나 ID로 기기를 찾아보겠습니다.

logkeys -d, --device=device옵션을 사용하면 올바른 장치에서 이벤트를 필터링하는 데 도움이 됩니다.

올바른 장치 식별자를 테스트하고 찾는 데 도움이 되는 evtest, xinput과 같은 다른 유용한 도구가 있습니다.

다음을 설정할 수도 있습니다.우데브장치가 연결되어 있을 때 프로그램을 실행하거나 특정 작업을 수행하는 장치에 대한 규칙(소개udev 튜토리얼). 저는 udev에 대한 경험이 많지 않지만 이런 식으로 리디렉션을 설정하는 것이 가능할 것입니다. 유일한 장애물은 문자 대신 간단한 문자를 얻는 것입니다.원래 입력, 또는 귀하가 이를 디코딩할 책임이 있어야 합니다.

또 다른 옵션은 다음을 사용하는 것입니다.python-evdev 라이브러리Python을 좋아하고 /dev/input/whatever-your-keyboard-is-using에서 이벤트를 모니터링하는 경우.

udev 규칙을 시도해 보겠습니다. 임시 텍스트 파일도 신경쓰지 않고 장치의 이벤트를 모니터링하고 이에 반응하기만 하면 됩니다.


고쳐 쓰다

바코드 스캐너로 몇 가지 테스트를 수행했는데 키보드처럼 작동하므로 시스템 관점에서 보면 기술적으로 카드 리더기와 유사합니다.

첫째, 알아야 할 흥미로운 점은 다음과 같은 결과를 얻을 수 있다는 것입니다.독점 액세스이 기능을 사용하여 HID 장치에 연결합니다 EVIOCGRAB. 즉, 앱이 기기를 대신하여 원치 않는 입력을 보내거나 다른 창을 방해하지 않도록 할 수 있습니다. 당신은 이것을 원할 수도 있습니다.

evtest(위에서 언급한) --grab매개변수도 있다는 점에 유의하세요 .

또한 이전에 python-evdev에 대해 언급한 적이 있는데, 이는 장치에서 입력을 캡처하는 데 사용할 수 있습니다. grab()기능도 있습니다 .

python-evdev를 사용하는 데 루트가 필요하지는 않지만 권한을 조정해야 할 수도 있습니다. 그들로부터문서:

장치가 표시되지 않으면 사용자가 읽기/쓰기 액세스 권한이 있는 올바른 그룹(일반적으로 입력 그룹)에 있는지 확인하세요.

그룹에 자신을 추가하려면:

usermod -a -G input user

그런 다음 다시 로그인하십시오. (이 작업이 완료되면 evtest는 루트가 아닌 사용자에게도 작동합니다).

다음은 코드 예입니다.바코드 TTY 입력을 Python으로 "라우팅"하는 방법은 무엇입니까?나를 위해 일한 또 다른 것 :독점 키보드-evdev.py.

이제 bash만 사용하여 이 작업을 우아하게 수행할 수 있는 방법이 있는지 모르겠습니다. 그러나 Python이나 C가 실행 가능한 접근 방식입니다.

관련 정보