그래서 크리스마스 선물로 Jelly Comb 키보드를 구입했습니다. 그러나 제조업체에 따르면 키보드는 Windows에서 사용하도록 고안되었습니다. 이제 다음과 같은 질문이 있습니다.
Num Lock을 누르면 키보드가 이상하게 작동하기 시작하고 숫자 역할을 하는 몇 개의 숫자와 몇 개의 문자를 제외하고 대부분의 키가 작동을 멈추고 Num Lock을 더 이상 끌 수 없습니다.
numlockx off
키보드를 컴퓨터에 연결할 때 Num Lock이 열리지 않도록 사용해 보았지만 가끔 숫자 패드를 사용하는 것을 좋아하는데 그렇게 할 수 없습니다.F1~F12가 작동하지 않습니다. Fn을 누르면 F 키가 멀티미디어 키 역할도 합니다. 최소한 그렇게 해야 합니다. 하지만 내 경우에는 F 키 중 하나를 누르면 임의의 멀티미디어 작업(키에 인쇄된 것과 무작위 및 다름)이 발생하지만 Fn 키와 함께 누르면 효과가 다른 멀티미디어 작업으로 변경되어 다시 인쇄됩니다. 열쇠가 아닌 다른 것에.
출력을 확인했을 때
xev
일부 키에 동일한 키코드가 있는 것을 발견했습니다. 예를 들어, F11은 Fn+F4와 동일한 출력을 인쇄합니다. 샘플 출력은 다음과 같습니다.
KeyRelease event, serial 28, synthetic NO, window 0x3e00001,
root 0x5c4, subw 0x0, time 2572602, (456,941), root:(521,1045),
state 0x0, keycode 33 (keysym 0x70, p), same_screen YES,
XLookupString gives 1 bytes: (70) "p"
XFilterEvent returns: False
KeymapNotify event, serial 28, synthetic NO, window 0x0,
keys: 4294967236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeymapNotify event, serial 28, synthetic NO, window 0x0,
keys: 4294967236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
첫 번째는 임의의 문자이고 마지막 두 개는 F11과 Fn+F4입니다.
자세한 내용은 Gnome과 함께 Ubuntu 20.04를 실행하고 있습니다.
그래서 제 질문은 리눅스에서 이 키보드를 정상적으로 사용할 수 있는 방법이 있느냐는 것입니다. Windows처럼 키보드를 해석하도록 OS에 "지시"하는 방법이 있다고 생각하지만 비슷한 것을 찾지 못했습니다.
편집하다:
따라서 @dirkt의 제안에 따라 출력을 확인 evtest
하고 각각 Fn+F11 및 F4에 대해 다음 줄을 얻었습니다.
Event: time 1609244073.713496, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244073.713496, -------------- SYN_REPORT ------------
Event: time 1609244073.738779, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244073.738779, -------------- SYN_REPORT ------------
Event: time 1609244076.661538, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.661538, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244076.661538, -------------- SYN_REPORT ------------
Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.687504, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244076.687504, -------------- SYN_REPORT ------------
Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
둘 다 동일한 코드(113 KEY_MUTE)를 가지고 있지만 Fn을 누르지 않으면 추가 줄이 나타납니다. 문자 및 숫자와 같은 모든 일반 키에도 동일하게 적용됩니다. 그런데 F1~F12를 Fn 키와 함께 사용하면 선이 사라집니다. 따라서 내 후속 질문은 Linux가 동일한 키 코드를 가진 키를 구별할 수 있도록 추가 줄을 활용할 수 있습니까? 그렇다면 차이점을 어떻게 알 수 있나요?
답변1
부분 답변:
제조업체에 따르면 이 키보드는 Windows에 적합합니다.
이는 키보드의 비표준 부분을 처리하기 위한 Windows 전용 드라이버가 있음을 의미할 수 있습니다.
이 드라이버는 Linux에서 사용할 수 없으므로 그대로 사용하거나 차이점을 리버스 엔지니어링하고 이를 처리하기 위해 Linux를 조정하는 옵션이 있습니다. 후자는 시간과 노력이 필요합니다.
Google for Jelly Comb은 이것이 USB 수신기가 있는 무선 키보드일 수 있음을 보여줍니다(당신은 말하지 않았지만 추측해야 합니다).
Linux에서 키보드 스택이 작동하는 방식에 대한 빠른 입문서:
USB 장치에는 키보드와 같은 장치와의 통신을 인코딩하는 방법에 대한 표준인 HID(Human Interface Device) 프로토콜이 있습니다. lsusb
키보드를 식별하고 lsusb -v
HID가 지원되는지 확인하는 데 사용되는 하나 이상의 USB 끝점(일부 키보드에는 둘 이상이 있음)
커널은 HID 이벤트를 디코딩합니다(이러한 이벤트를 설명하는 HID 설명자를 확인하고 이 스택 교환 또는 수퍼유저 스택 교환에서 자세한 답변을 검색할 수 있습니다). 그런 다음 커널은 이를 입력 계층에 전달합니다.
입력 계층 장치는 로 표시됩니다 /dev/event/input*
. 그것을 실행하고 dmesg
키보드가 무엇을 얻는지 확인하십시오. evtest
해당 이벤트에서 오는 이벤트를 확인하는 데 사용할 수 있습니다 .
입력 레이어인 X 또는 Wayland의 이벤트를 해석하고 해당 키맵을 사용하여 이벤트를 처리합니다.
evtest
따라서 둘 다 작동하지 않는 키 조합을 확인 xev
하고 흥미로운 일이 진행되고 있는지 확인하십시오.
귀하의 KeymapNotify
이벤트는 키맵을 변경하게 만든 코드가 있음을 의미합니다. 이는 사용 중인 키맵이나 데스크탑에 설치된 항목 때문일 수 있습니다.
그것이 작동할 것이라고 기대하지 마십시오 Fn. 키는 비표준이며 각 노트북 제조업체 또는 키보드 제조업체마다 키를 처리하는 방법이 다릅니다.