시뮬레이션 키보드는 어떻게 작동하나요?

시뮬레이션 키보드는 어떻게 작동하나요?

일부 USB 장치는 키보드를 에뮬레이트하고 이러한 장치는 마치 키보드로 입력한 것처럼 정보를 보낸다는 내용을 읽었습니다. 예: 자기 카드 리더는 에뮬레이트된 키보드를 사용하여 카드에 대한 정보를 제공할 수 있습니다.

이건 제가 한번 물어본 질문이에요키보드, BT 키보드 및stdin이것은 그들이 어떻게 작동하는지 설명합니다.

그렇다면 애플리케이션은 시뮬레이션된 키보드에서 생성된 입력을 어디에서 수신해야 합니까?

답변1

시스템에 USB 키보드 2개가 연결되어 있거나 키보드가 내장된 노트북에 USB 키보드 1개가 연결되어 있는 경우 각 키보드에서 교대로 문자 1을 입력할 수 있습니다(또는 한 키보드에서 왼쪽 키보드를 사용하고 다른 키보드에서는 오른쪽 키보드 사용). ). 시스템에 키보드임을 알려주는 것 외에는 할 일이 없습니다. 장치의 문자가 올바른 대기열에 삽입되고 응용 프로그램은 일반 키보드 입력처럼 수신됩니다.

동일한 결과를 얻을 수 있는 다른 방법도 있습니다. USB 시대 이전에는 바코드 스캐너를 사용했는데 키보드와 마더보드 사이에 물리적으로 삽입해야 했고(암수 PS/2 커넥터 사용) 한 번에 스캔해야 했습니다. 바코드의 일련의 숫자를 빠르게 연속해서 누르는 것처럼 작동합니다.

1특수 키(예: Fn키보드에서 보낸 다른 키의 키코드를 수정하므로 Fn하나의 키보드를 누르고 다른 키보드의 키를 수정할 수 없습니다.)

답변2

USB 장치 자체가 HID 키보드 인터페이스를 제공하는 경우 컴퓨터의 관점에서 보면 이는 키보드입니다(또는 "포함"). 해당 HID 드라이버가 로드됩니다. 장치는 해당 HID 프로토콜을 사용하여 이 인터페이스를 통해 통신합니다.

USB 장치에는 많은 인터페이스가 있을 수 있습니다. 장치 자체는 그것이 무엇인지 설명하는 정보를 운영 체제에 보냅니다.USB 설명자. lsusb() 의 자세한 출력에서 ​​이 정보를 볼 수 있습니다 lsusb -v. 해당 값은 bDeviceClass, bDeviceSubClass bDeviceProtocol.

예를 들어, 이것은 키보드로 표시되는 마우스용 인터페이스 중 하나입니다. 키나 매크로를 지정하는 버튼을 클릭하면 마우스가 여기에 "입력"합니다.

Interface Descriptor:
  bLength                 9
  bDescriptorType         4
  bInterfaceNumber        0
  bAlternateSetting       0
  bNumEndpoints           1
  bInterfaceClass         3 Human Interface Device
  bInterfaceSubClass      1 Boot Interface Subclass
  bInterfaceProtocol      1 Keyboard
  iInterface              0 

xinput실제 두 번째 키보드처럼 배열되어 있습니다 .

이는 악의적으로 사용될 수도 있습니다., 입력하기 위해(또는 다른 장치로 표시하기 위해) 키보드처럼 보일 필요는 없기 때문입니다.

관련 정보