Redragon Asura USB 키보드는 모든 Ctrl, Alt, Win 키를 Shift_L에 매핑합니다.

Redragon Asura USB 키보드는 모든 Ctrl, Alt, Win 키를 Shift_L에 매핑합니다.

상태: 이 문제는 커널 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 키보드와 더 유사하고 기본적으로 작동하기 때문입니다. 키보드에 이 작업을 수행할 수 있는 키 또는 키 조합이 있습니까?

관련 정보