바코드 스캐너는 USB 키보드 장치처럼 작동하며 처음에는 내 상황도 다르지 않았습니다. 화면 을 열고 nano
USB 포트를 통해 스캐너를 연결한 후 바코드를 읽고 바코드 바로 아래에 쓰여진 문자열을 보았습니다.
무엇을 해야할지 모르겠지만 아직은 아닙니다. 스캐너(키보드와 유사한 장치)는 시스템에 일부 정크를 보냅니다.
나는 썼다간단한 NodeJS 코드캡처된 콘텐츠 덤프:
data: <Buffer 04 00 62 60 5b 00 00 00> string: b`[
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5f 5b 00 00 00> string: b_[
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 60 62 00 00 00> string: b`b
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5c 5d 00 00 00> string: b\]
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5d 5a 00 00 00> string: b]Z
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5c 5d 00 00 00> string: b\]
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5c 61 00 00 00> string: b\a
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 00 00 28 00 00 00 00 00> string: (
data: <Buffer 00 00 00 00 00 00 00 00> string:
나는 SIP-4-1
.(여기showkey
동일한 바코드의 출력 입니다 )
동일한 스캐너가 Windows에서도 잘 작동합니다. 키보드 모드나 뭔가와 관련이 있는 것 같아요. 특정 USB 키보드 장치의 모드를 어떻게 변경합니까?
답변1
스캐너가 정크 메일을 보내지 않습니다. 이는 레거시 8바이트 "부팅" 보고서 설명자를 포함하는 레거시 USB HID 키보드 장치에 대한 완전한 레거시 입력 보고서입니다.
이를 디코딩하면 스캐너가 "S", "I" 등의 키를 직접 전송하지 않는다는 것을 알 수 있습니다. 대신, ⎇ Alt키를 사용하여 입력하는 것을 시뮬레이션합니다 . 그 과정에서 운영 체제에 대해 꽤 잘못된 가정을 하게 되는데, 그 중 일부 또는 전체가 쉽게 잘못될 수 있습니다.
예를 들어:
- 보고서 입력
04 00 62 60 5b 00 00 00
E2
62
은 USB HID 사용 코드 , ,60
가 동시에 눌러져 있는 버튼입니다5B
. E2
,62
및 은 , 및 의 USB HID 사용 코드60
입니다 .5B
⎇ Left AltIns/0↑/8PgDn/3- 083 10은 "S"의 코드입니다.
- 보고서 입력
00 00 00 00 00 00 00 00
모든 키가 해제되었음을 나타냅니다.
나머지는 "I", "P", "-", "4", "-" 및 "1"로 디코딩되며, 모두 이런 방식으로 입력되고 ⎇ Alt소수점 이하 3자리도 입력됩니다. (마지막 두 개의 입력 보고서는 News 및 Releases 입니다 ⮠ Return.)
여기에서 몇 가지 깨진 가정을 볼 수 있습니다.
- 스캐너는 키보드 드라이버가 입력 보고서를 특정 방향으로 구문 분석한다고 가정합니다. 이는 보장되지 않으며 스캐너는 전체 프로세스를 누른 상태에서 순차적으로 눌렀다 떼는 수정자 키 에 Ins/0대한 별도의 보고서를 올바르게 생성해야 합니다. 이는 예상치 못한 실행에 의존하며, 스캐너가 실제로 보내는 것은↑/8PgDn/34개의 키를 모두 동시에 누르고 놓음.
- 스캐너는 이것이 ⎇ Left Alt이 목적에 사용되는 키라고 가정합니다. 그러나 일부 운영 체제 및 키보드 레이아웃에서는 ⇮ Alt Gr/ ⎇ Right Alt대신
E6
(40
입력에 의해 보고된 첫 번째 바이트로 인코딩됨) 일 수 있습니다E2
.실제로 현재 운영 체제, 키보드 드라이버 및 키보드 레이아웃은 이러한 코드를 사용한 문자 입력을 전혀 지원하지 않을 수도 있습니다. (예를 들어 FreeBSD의
syscons
커널 터미널 에뮬레이터의 경우에 해당됩니다. 물론 Microsoft Windows의 경우에도 마찬가지입니다. 그러나 nosh 툴킷의 경우console-fb-realizer
, LXDE와 같은 GUI 및XFCE4, 그리고 그것은 보인다Ubuntu에서 모든 GUI 사용 가능;하고 싶지 않습니다. ) - 스캐너는 NumLock이 닫혀 있다고 가정합니다. NumLock이 켜져 있으면 Shift 키를 누르는 척하여 잠금 의미를 바꿔야 합니다.
일부 스캐너의 경우 특수 "제어" 바코드를 스캔하여 이를 수정할 수 있습니다. 아마도 여기서 일어나는 일이겠죠. 운영 체제, 키보드 드라이버 및 키보드 레이아웃이 처리할 수 없는 작동 모드로 스캐너를 전환하는 "제어" 바코드를 스캔했습니다. 이 경우 스캐너 설명서를 참조하여 이 동작을 끄는 제어 코드를 찾아야 합니다.
예: NLS-HR32 시리즈 스캐너의 경우 이는 스캐너를 "ALT+키보드 모드 2" 또는 "ALT+키보드 모드 3"으로 설정하는 효과이며 "ALT+키보드 비활성화" 또는 "ALT+키보드 모드 3"으로 다시 전환해야 합니다. "Alt+키보드 모드 1".