상태: 이 문제는 커널 4.18부터 수정되었습니다. 자세한 내용은 허용된 답변을 참조하세요.
이제 막 사용하기 시작했어요레드 드래곤 아수라 USB 키보드. 키보드는 잘 작동하지만 아쉽게도 Ctrl, Alt, Win 키가 모두 왼쪽 Shift 키에 매핑되어 있어 사용하기가 어렵습니다.
dmesg 출력은
[185765.848957] input: USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:0C45:760B.0022/input/input50
[185765.905395] hid-generic 0003:0C45:760B.0022: input,hidraw3: USB HID v1.11 Keyboard [USB Keyboard] on usb-0000:00:14.0-3/input0
[185765.949342] input: USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1/0003:0C45:760B.0023/input/input51
[185766.009474] hid-generic 0003:0C45:760B.0023: input,hiddev0,hidraw4: USB HID v1.11 Keyboard [USB Keyboard] on usb-0000:00:14.0-3/input1
디버그 키를 사용하기 시작했습니다.시프, 그리고 이 키에 대해 정확히 동일한 키맵을 얻습니다. KeyPress와 KeyRelease 이벤트가 혼합되어 있을 수 있지만 전체적으로는 동일합니다(게시물 끝 참조).
Ctrl, Alt 및 Win 키를 올바르게 매핑하려면 어떻게 해야 합니까?
왼쪽 대안:
KeyRelease event, serial 36, synthetic NO, window 0x3200001,
root 0xd7, subw 0x0, time 185237066, (307,429), root:(2272,538),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
왼쪽 Ctrl:
KeyPress event, serial 36, synthetic NO, window 0x3200001,
root 0xd7, subw 0x0, time 185265721, (443,237), root:(2408,346),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
왼쪽으로 이동:
KeyRelease event, serial 36, synthetic NO, window 0x3200001,
root 0xd7, subw 0x0, time 185303441, (436,539), root:(2401,648),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
승리의 열쇠:
KeyPress event, serial 36, synthetic NO, window 0x3200001,
root 0xd7, subw 0x0, time 185327465, (399,367), root:(2364,476),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
오른쪽 Alt:
KeyPress event, serial 36, synthetic NO, window 0x3200001,
root 0xd7, subw 0x0, time 185361768, (348,141), root:(2313,250),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
마우스 오른쪽 버튼으로 클릭:
KeyPress event, serial 36, synthetic NO, window 0x3200001,
root 0xd7, subw 0x0, time 185401328, (598,415), root:(2563,524),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
편집하다: 실제로 키보드는 두 개의 USB 장치로 나타납니다. /sys/debug/kernel/hid에서 HID 설명자를 업로드했습니다.
답변1
내 거Linux 커널 패치로 Redragon Asura 키보드 수정이제 주류이며 커널 버전 4.18의 일부가 될 것입니다.
Num Lock 및 Caps Lock LED가 활성화되지 않는 작은 문제가 있습니다(키는 제대로 작동함). 이 문제는 4.19에서 수정될 예정입니다.
이 패치는 4.16 및 4.17에도 적용될 수 있으며, openSUSE는 4.16부터 패치를 제공합니다.
답변2
이 답변이 조금 늦었다는 것을 알고 있지만 Swoogans 키보드 드라이버를 찾아서 우리 목적에 맞게 수정했습니다. 나 자신도 최근에 Asura K501을 구입했는데 같은 문제에 부딪혔습니다. 내 Asura는 2017년 모델이고 칩셋은 0x7603이 아닌 0x760b입니다.
https://bitbucket.org/vipinmohan/redragon-asura-kb-ubuntu
이것을 사용하십시오. 내 Asura는 지금 잘 작동하고 있어요
답변3
부분 답변:
첫 번째(자동) HID 설명자는 일반적으로 USB 키보드에서 볼 수 있는 것과 유사합니다. 보고서는 왼쪽 및 오른쪽 Ctrl/Shift/Alt/Meta(Win) 키의 8비트와 예약된 바이트(0)로 구성됩니다. 및 6번의 키 입력 스캔 코드의 바이트. (이것이 USB 키보드가 6키 롤오버로 제한되는 이유입니다.) 이것은 아마도 일종의 레거시 설명자일 것입니다.
두 번째 설명자는 여러 보고서 유형을 사용합니다. 처음 세 개는 "소비자"(무엇이든), 전원 제어를 위한 것이고 하나는 공급업체가 정의한 것입니다(그래서 우리는 그것이 무엇인지 모릅니다). 나머지 세 가지 보고서 유형(ID 4~6)은 각 키 누름을 비트 필드로 보고합니다(n-키 롤오버가 있는 게임 키보드에 적합함).
hidraw 덤프에서 볼 수 있듯이 기능 키가 올바르게 보고됩니다 Left Ctrl.
04 01 00 00 00 00 00 00
(보고서 ID는 4
, 첫 번째 보고서가 열려 있음), 둘 다 Left Alt누르면
04 04 00 00 00 00 00 00
(보고서 ID는 4
, 비트 3은 켜짐) 등 모든 키를 놓으면 모든 비트가 0으로 재설정됩니다.
커널의 장치 매핑
Keyboard.00e0 ---> Key.LeftControl
Keyboard.00e1 ---> Key.LeftShift
Keyboard.00e2 ---> Key.LeftAlt
Keyboard.00e3 ---> Key.LeftMeta
Keyboard.00e4 ---> Key.RightCtrl
Keyboard.00e5 ---> Key.RightShift
Keyboard.00e6 ---> Key.RightAlt
Keyboard.00e7 ---> Key.RightMeta
실제로 이것을 이해한다고 주장합니다.~해야 한다서로 다른 매핑스캐닝암호. 그래서 당신이진짜비슷한 걸 본 적이 없어
type 4 (EV_MSC), code 4 (MSC_SCAN), value 1d
type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
-------------- SYN_REPORT ------------
type 4 (EV_MSC), code 4 (MSC_SCAN), value 1d
type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
-------------- SYN_REPORT ------------
type 4 (EV_MSC), code 4 (MSC_SCAN), value 38
type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 1
-------------- SYN_REPORT ------------
type 4 (EV_MSC), code 4 (MSC_SCAN), value 38
type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 0
-------------- SYN_REPORT ------------
( evtest
다른 MSC_SCAN
코드를 한 번 1d
, 한 번 기록하세요 38
. 줄은 신경 쓰지 마세요 EV_KEY
.) 그러면 커널이 HID 보고서를 스캔 코드에 매핑할 때 문제가 발생합니다.
이 경우 지금까지의 모든 정보를 포함하여 커널 개발자("입력 하위 시스템"인 것 같습니다)에게 버그를 제출하고 디버깅할 아이디어가 있는지 확인하십시오.
가능한 대안 솔루션 중 하나는 레거시 HID 장치를 어떤 방식으로든 활성화하는 것입니다. 이는 일반 USB 키보드와 더 유사하고 기본적으로 작동하기 때문입니다. 키보드에 이 작업을 수행할 수 있는 키 또는 키 조합이 있습니까?