Redragon Asura USB keyboard maps all Ctrl, Alt, Win keys to Shift_L
Clash Royale CLAN TAG#URR8PPP
up vote
2
down vote
favorite
Status: This is fixed as of Kernel 4.18, see the accepted answer for details.
I just started using a Redragon Asura USB Keyboard. The keyboard works at a basic level, but unfortunately all the Ctrl, Alt keys and the Win key are mapped to the left shift key, which makes it quite hard to use.
The dmesg output is
[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
I've started debugging the key presses using xev, and I get the exact same key mapping for those keys. I might've mixed the KeyPress and KeyRelease events, but all in all they are the same ( see at the end of the post ).
What can I do to properly map the Ctrl, Alt and Win keys?
Left alt:
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
Left 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
Left shift:
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
Win key:
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
Right 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
Right ctrl:
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
Edit: indeed, the keyboard shows up as two USB devices. I've uploaded the HID descriptors from /sys/debug/kernel/hid at
- https://pastebin.com/4VwDKRvU
- https://pastebin.com/CrBVRFBj
keyboard keyboard-layout usb-device keyboard-event
 |Â
show 1 more comment
up vote
2
down vote
favorite
Status: This is fixed as of Kernel 4.18, see the accepted answer for details.
I just started using a Redragon Asura USB Keyboard. The keyboard works at a basic level, but unfortunately all the Ctrl, Alt keys and the Win key are mapped to the left shift key, which makes it quite hard to use.
The dmesg output is
[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
I've started debugging the key presses using xev, and I get the exact same key mapping for those keys. I might've mixed the KeyPress and KeyRelease events, but all in all they are the same ( see at the end of the post ).
What can I do to properly map the Ctrl, Alt and Win keys?
Left alt:
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
Left 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
Left shift:
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
Win key:
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
Right 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
Right ctrl:
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
Edit: indeed, the keyboard shows up as two USB devices. I've uploaded the HID descriptors from /sys/debug/kernel/hid at
- https://pastebin.com/4VwDKRvU
- https://pastebin.com/CrBVRFBj
keyboard keyboard-layout usb-device keyboard-event
Does it actually show up as two HID devices, or did you plug it out and in again, reboot in between etc? Runevtest
as root, select USB keyboard, see if they show up at the same scan code there as well. If yes, we need the HID descriptor (I'll tell you how). If no, edit question with output ofsetxkbmap -print
.
â dirkt
Jun 12 '17 at 8:34
@dirkt - it does appear as two USB devices - I've unplugged and re-plugged in to double check. Running evdev as root shows me two 'USB keyboard' devices. The first one does not get generate any input, only the second one. The same problem is listed with evdev, left control generatestype 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
â Robert Munteanu
Jun 12 '17 at 8:41
Huh, interesting. Domount -t debugfs none /sys/kernel/debug
as root, put output of/sys/kernel/debug/hid/DEVICE/rdesc
for allDEVICE
you can find into question (or pastebin, if too large). Does it also show up as two devices inlsusb
?
â dirkt
Jun 12 '17 at 8:46
@dirkt - I have two related entries under /sys/kernel/debug/hid: 0003:0C45:760B.0037 and 0003:0C45:760B.0038 . I've uploaded the rdesc files at pastebin.com/4VwDKRvU and pastebin.com/CrBVRFBj
â Robert Munteanu
Jun 12 '17 at 9:01
That looks unusual enough that you may need a quirk in the HID kernel driver. Before I look at that in detail, do ahexdump -C /dev/hidrawX
on both hidraw devices (checkdmesg
for current numbers), each time: press each of the Ctrl/Alt/Win keys twice, press space bar at end a few times until the next line appears. Put output in pastebin.
â dirkt
Jun 12 '17 at 9:14
 |Â
show 1 more comment
up vote
2
down vote
favorite
up vote
2
down vote
favorite
Status: This is fixed as of Kernel 4.18, see the accepted answer for details.
I just started using a Redragon Asura USB Keyboard. The keyboard works at a basic level, but unfortunately all the Ctrl, Alt keys and the Win key are mapped to the left shift key, which makes it quite hard to use.
The dmesg output is
[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
I've started debugging the key presses using xev, and I get the exact same key mapping for those keys. I might've mixed the KeyPress and KeyRelease events, but all in all they are the same ( see at the end of the post ).
What can I do to properly map the Ctrl, Alt and Win keys?
Left alt:
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
Left 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
Left shift:
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
Win key:
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
Right 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
Right ctrl:
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
Edit: indeed, the keyboard shows up as two USB devices. I've uploaded the HID descriptors from /sys/debug/kernel/hid at
- https://pastebin.com/4VwDKRvU
- https://pastebin.com/CrBVRFBj
keyboard keyboard-layout usb-device keyboard-event
Status: This is fixed as of Kernel 4.18, see the accepted answer for details.
I just started using a Redragon Asura USB Keyboard. The keyboard works at a basic level, but unfortunately all the Ctrl, Alt keys and the Win key are mapped to the left shift key, which makes it quite hard to use.
The dmesg output is
[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
I've started debugging the key presses using xev, and I get the exact same key mapping for those keys. I might've mixed the KeyPress and KeyRelease events, but all in all they are the same ( see at the end of the post ).
What can I do to properly map the Ctrl, Alt and Win keys?
Left alt:
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
Left 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
Left shift:
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
Win key:
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
Right 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
Right ctrl:
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
Edit: indeed, the keyboard shows up as two USB devices. I've uploaded the HID descriptors from /sys/debug/kernel/hid at
- https://pastebin.com/4VwDKRvU
- https://pastebin.com/CrBVRFBj
keyboard keyboard-layout usb-device keyboard-event
keyboard keyboard-layout usb-device keyboard-event
edited Jun 13 at 12:22
asked Jun 12 '17 at 8:28
Robert Munteanu
2281324
2281324
Does it actually show up as two HID devices, or did you plug it out and in again, reboot in between etc? Runevtest
as root, select USB keyboard, see if they show up at the same scan code there as well. If yes, we need the HID descriptor (I'll tell you how). If no, edit question with output ofsetxkbmap -print
.
â dirkt
Jun 12 '17 at 8:34
@dirkt - it does appear as two USB devices - I've unplugged and re-plugged in to double check. Running evdev as root shows me two 'USB keyboard' devices. The first one does not get generate any input, only the second one. The same problem is listed with evdev, left control generatestype 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
â Robert Munteanu
Jun 12 '17 at 8:41
Huh, interesting. Domount -t debugfs none /sys/kernel/debug
as root, put output of/sys/kernel/debug/hid/DEVICE/rdesc
for allDEVICE
you can find into question (or pastebin, if too large). Does it also show up as two devices inlsusb
?
â dirkt
Jun 12 '17 at 8:46
@dirkt - I have two related entries under /sys/kernel/debug/hid: 0003:0C45:760B.0037 and 0003:0C45:760B.0038 . I've uploaded the rdesc files at pastebin.com/4VwDKRvU and pastebin.com/CrBVRFBj
â Robert Munteanu
Jun 12 '17 at 9:01
That looks unusual enough that you may need a quirk in the HID kernel driver. Before I look at that in detail, do ahexdump -C /dev/hidrawX
on both hidraw devices (checkdmesg
for current numbers), each time: press each of the Ctrl/Alt/Win keys twice, press space bar at end a few times until the next line appears. Put output in pastebin.
â dirkt
Jun 12 '17 at 9:14
 |Â
show 1 more comment
Does it actually show up as two HID devices, or did you plug it out and in again, reboot in between etc? Runevtest
as root, select USB keyboard, see if they show up at the same scan code there as well. If yes, we need the HID descriptor (I'll tell you how). If no, edit question with output ofsetxkbmap -print
.
â dirkt
Jun 12 '17 at 8:34
@dirkt - it does appear as two USB devices - I've unplugged and re-plugged in to double check. Running evdev as root shows me two 'USB keyboard' devices. The first one does not get generate any input, only the second one. The same problem is listed with evdev, left control generatestype 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
â Robert Munteanu
Jun 12 '17 at 8:41
Huh, interesting. Domount -t debugfs none /sys/kernel/debug
as root, put output of/sys/kernel/debug/hid/DEVICE/rdesc
for allDEVICE
you can find into question (or pastebin, if too large). Does it also show up as two devices inlsusb
?
â dirkt
Jun 12 '17 at 8:46
@dirkt - I have two related entries under /sys/kernel/debug/hid: 0003:0C45:760B.0037 and 0003:0C45:760B.0038 . I've uploaded the rdesc files at pastebin.com/4VwDKRvU and pastebin.com/CrBVRFBj
â Robert Munteanu
Jun 12 '17 at 9:01
That looks unusual enough that you may need a quirk in the HID kernel driver. Before I look at that in detail, do ahexdump -C /dev/hidrawX
on both hidraw devices (checkdmesg
for current numbers), each time: press each of the Ctrl/Alt/Win keys twice, press space bar at end a few times until the next line appears. Put output in pastebin.
â dirkt
Jun 12 '17 at 9:14
Does it actually show up as two HID devices, or did you plug it out and in again, reboot in between etc? Run
evtest
as root, select USB keyboard, see if they show up at the same scan code there as well. If yes, we need the HID descriptor (I'll tell you how). If no, edit question with output of setxkbmap -print
.â dirkt
Jun 12 '17 at 8:34
Does it actually show up as two HID devices, or did you plug it out and in again, reboot in between etc? Run
evtest
as root, select USB keyboard, see if they show up at the same scan code there as well. If yes, we need the HID descriptor (I'll tell you how). If no, edit question with output of setxkbmap -print
.â dirkt
Jun 12 '17 at 8:34
@dirkt - it does appear as two USB devices - I've unplugged and re-plugged in to double check. Running evdev as root shows me two 'USB keyboard' devices. The first one does not get generate any input, only the second one. The same problem is listed with evdev, left control generates
type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
â Robert Munteanu
Jun 12 '17 at 8:41
@dirkt - it does appear as two USB devices - I've unplugged and re-plugged in to double check. Running evdev as root shows me two 'USB keyboard' devices. The first one does not get generate any input, only the second one. The same problem is listed with evdev, left control generates
type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
â Robert Munteanu
Jun 12 '17 at 8:41
Huh, interesting. Do
mount -t debugfs none /sys/kernel/debug
as root, put output of /sys/kernel/debug/hid/DEVICE/rdesc
for all DEVICE
you can find into question (or pastebin, if too large). Does it also show up as two devices in lsusb
?â dirkt
Jun 12 '17 at 8:46
Huh, interesting. Do
mount -t debugfs none /sys/kernel/debug
as root, put output of /sys/kernel/debug/hid/DEVICE/rdesc
for all DEVICE
you can find into question (or pastebin, if too large). Does it also show up as two devices in lsusb
?â dirkt
Jun 12 '17 at 8:46
@dirkt - I have two related entries under /sys/kernel/debug/hid: 0003:0C45:760B.0037 and 0003:0C45:760B.0038 . I've uploaded the rdesc files at pastebin.com/4VwDKRvU and pastebin.com/CrBVRFBj
â Robert Munteanu
Jun 12 '17 at 9:01
@dirkt - I have two related entries under /sys/kernel/debug/hid: 0003:0C45:760B.0037 and 0003:0C45:760B.0038 . I've uploaded the rdesc files at pastebin.com/4VwDKRvU and pastebin.com/CrBVRFBj
â Robert Munteanu
Jun 12 '17 at 9:01
That looks unusual enough that you may need a quirk in the HID kernel driver. Before I look at that in detail, do a
hexdump -C /dev/hidrawX
on both hidraw devices (check dmesg
for current numbers), each time: press each of the Ctrl/Alt/Win keys twice, press space bar at end a few times until the next line appears. Put output in pastebin.â dirkt
Jun 12 '17 at 9:14
That looks unusual enough that you may need a quirk in the HID kernel driver. Before I look at that in detail, do a
hexdump -C /dev/hidrawX
on both hidraw devices (check dmesg
for current numbers), each time: press each of the Ctrl/Alt/Win keys twice, press space bar at end a few times until the next line appears. Put output in pastebin.â dirkt
Jun 12 '17 at 9:14
 |Â
show 1 more comment
3 Answers
3
active
oldest
votes
up vote
2
down vote
I know this answer is a bit late, but i found Swoogans keyboard driver and modified it for our purpose. I recently bought a Asura K501 myself and went through the same trouble. Please note that my asura is 2017 model and chipset is 0x760b and not 0x7603
https://bitbucket.org/vipinmohan/redragon-asura-kb-ubuntu
Use this. My Asura works fine now
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
add a comment |Â
up vote
1
down vote
Partial answer:
The first (silent) HID descriptor looks like what you usually see for USB keyboards: A report consists of 8 bits for the left and right Ctrl/Shift/Alt/Meta (Win) keys, followed by a reserved byte (zero) and 6 bytes for the scan codes for key presses. (This is the reason why USB keyboards are limited to 6-key rollover). This may be some sort of legacy descriptor.
The second descriptor makes use of several report types. The first three are for "consumer" (whatever that is), power control, and one vendor-defined (so we don't know what it does). The remaining three report types (IDs 4 to 6) report every single key as a bitfield (which makes a lot of sense for a gaming keyboard with n-key rollover).
As you can see from the hidraw dump, the functions keys are reported correctly: Pressing Left Ctrl gives you
04 01 00 00 00 00 00 00
(report id is 4
, first bit is on), while pressing Left Alt gives you
04 04 00 00 00 00 00 00
(report id is 4
, third bit is on), etc., and releasing all keys resets all bits to zero.
The device mapping in the kernel
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
actually claims to understand that, and it should map those to different scan codes. So if you really don't see something similar to
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 ------------
in evtest
(notice the different MSC_SCAN
codes, once 1d
, once 38
; never mind the line with EV_KEY
), then something goes wrong when the kernel maps the HID report to the scan codes.
In that case, please file a bug with the kernel developers (I guess for "input subsystem"), include all the information so far, and see if they have an idea to debug this.
A possible alternative solution is to somehow activate the legacy HID device, as this is more similar to normal USB keyboard and may work out of the box. Are there some keys or key combinations on the keyboard that look like they might do this?
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
1
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look atdrivers/hid
, especiallyhid-core.c
andhid-input.c
, and alsoDocumentation/hid
, especiallyhidraw.txt
andhid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.
â dirkt
Jun 14 '17 at 8:16
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g.hid-microsoft.c
. Hopefully something comes out of that
â Robert Munteanu
Jun 14 '17 at 8:22
 |Â
show 3 more comments
up vote
1
down vote
accepted
My Linux kernel patch to fix Redragon Asura keyboards is now mainlined and will part of the Kernel 4.18 release.
There is a minor issue with the Num Lock and Caps Lock LEDs not being active ( keys work just fine ) that will be fixed with 4.19.
The patch can be applied to 4.16 and 4.17 as well, openSUSE started carrying it with 4.16.
add a comment |Â
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
I know this answer is a bit late, but i found Swoogans keyboard driver and modified it for our purpose. I recently bought a Asura K501 myself and went through the same trouble. Please note that my asura is 2017 model and chipset is 0x760b and not 0x7603
https://bitbucket.org/vipinmohan/redragon-asura-kb-ubuntu
Use this. My Asura works fine now
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
add a comment |Â
up vote
2
down vote
I know this answer is a bit late, but i found Swoogans keyboard driver and modified it for our purpose. I recently bought a Asura K501 myself and went through the same trouble. Please note that my asura is 2017 model and chipset is 0x760b and not 0x7603
https://bitbucket.org/vipinmohan/redragon-asura-kb-ubuntu
Use this. My Asura works fine now
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
add a comment |Â
up vote
2
down vote
up vote
2
down vote
I know this answer is a bit late, but i found Swoogans keyboard driver and modified it for our purpose. I recently bought a Asura K501 myself and went through the same trouble. Please note that my asura is 2017 model and chipset is 0x760b and not 0x7603
https://bitbucket.org/vipinmohan/redragon-asura-kb-ubuntu
Use this. My Asura works fine now
I know this answer is a bit late, but i found Swoogans keyboard driver and modified it for our purpose. I recently bought a Asura K501 myself and went through the same trouble. Please note that my asura is 2017 model and chipset is 0x760b and not 0x7603
https://bitbucket.org/vipinmohan/redragon-asura-kb-ubuntu
Use this. My Asura works fine now
answered Jan 13 at 14:00
Vipin Mohan R Nair
1213
1213
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
add a comment |Â
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
Thanks! I still hope to upstream my kernel patch though ( see marc.info/?l=linux-input&m=151557660008868&w=2 ). Just that there isn't much enthusiasm in accepting it
â Robert Munteanu
Jan 15 at 15:10
add a comment |Â
up vote
1
down vote
Partial answer:
The first (silent) HID descriptor looks like what you usually see for USB keyboards: A report consists of 8 bits for the left and right Ctrl/Shift/Alt/Meta (Win) keys, followed by a reserved byte (zero) and 6 bytes for the scan codes for key presses. (This is the reason why USB keyboards are limited to 6-key rollover). This may be some sort of legacy descriptor.
The second descriptor makes use of several report types. The first three are for "consumer" (whatever that is), power control, and one vendor-defined (so we don't know what it does). The remaining three report types (IDs 4 to 6) report every single key as a bitfield (which makes a lot of sense for a gaming keyboard with n-key rollover).
As you can see from the hidraw dump, the functions keys are reported correctly: Pressing Left Ctrl gives you
04 01 00 00 00 00 00 00
(report id is 4
, first bit is on), while pressing Left Alt gives you
04 04 00 00 00 00 00 00
(report id is 4
, third bit is on), etc., and releasing all keys resets all bits to zero.
The device mapping in the kernel
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
actually claims to understand that, and it should map those to different scan codes. So if you really don't see something similar to
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 ------------
in evtest
(notice the different MSC_SCAN
codes, once 1d
, once 38
; never mind the line with EV_KEY
), then something goes wrong when the kernel maps the HID report to the scan codes.
In that case, please file a bug with the kernel developers (I guess for "input subsystem"), include all the information so far, and see if they have an idea to debug this.
A possible alternative solution is to somehow activate the legacy HID device, as this is more similar to normal USB keyboard and may work out of the box. Are there some keys or key combinations on the keyboard that look like they might do this?
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
1
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look atdrivers/hid
, especiallyhid-core.c
andhid-input.c
, and alsoDocumentation/hid
, especiallyhidraw.txt
andhid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.
â dirkt
Jun 14 '17 at 8:16
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g.hid-microsoft.c
. Hopefully something comes out of that
â Robert Munteanu
Jun 14 '17 at 8:22
 |Â
show 3 more comments
up vote
1
down vote
Partial answer:
The first (silent) HID descriptor looks like what you usually see for USB keyboards: A report consists of 8 bits for the left and right Ctrl/Shift/Alt/Meta (Win) keys, followed by a reserved byte (zero) and 6 bytes for the scan codes for key presses. (This is the reason why USB keyboards are limited to 6-key rollover). This may be some sort of legacy descriptor.
The second descriptor makes use of several report types. The first three are for "consumer" (whatever that is), power control, and one vendor-defined (so we don't know what it does). The remaining three report types (IDs 4 to 6) report every single key as a bitfield (which makes a lot of sense for a gaming keyboard with n-key rollover).
As you can see from the hidraw dump, the functions keys are reported correctly: Pressing Left Ctrl gives you
04 01 00 00 00 00 00 00
(report id is 4
, first bit is on), while pressing Left Alt gives you
04 04 00 00 00 00 00 00
(report id is 4
, third bit is on), etc., and releasing all keys resets all bits to zero.
The device mapping in the kernel
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
actually claims to understand that, and it should map those to different scan codes. So if you really don't see something similar to
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 ------------
in evtest
(notice the different MSC_SCAN
codes, once 1d
, once 38
; never mind the line with EV_KEY
), then something goes wrong when the kernel maps the HID report to the scan codes.
In that case, please file a bug with the kernel developers (I guess for "input subsystem"), include all the information so far, and see if they have an idea to debug this.
A possible alternative solution is to somehow activate the legacy HID device, as this is more similar to normal USB keyboard and may work out of the box. Are there some keys or key combinations on the keyboard that look like they might do this?
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
1
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look atdrivers/hid
, especiallyhid-core.c
andhid-input.c
, and alsoDocumentation/hid
, especiallyhidraw.txt
andhid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.
â dirkt
Jun 14 '17 at 8:16
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g.hid-microsoft.c
. Hopefully something comes out of that
â Robert Munteanu
Jun 14 '17 at 8:22
 |Â
show 3 more comments
up vote
1
down vote
up vote
1
down vote
Partial answer:
The first (silent) HID descriptor looks like what you usually see for USB keyboards: A report consists of 8 bits for the left and right Ctrl/Shift/Alt/Meta (Win) keys, followed by a reserved byte (zero) and 6 bytes for the scan codes for key presses. (This is the reason why USB keyboards are limited to 6-key rollover). This may be some sort of legacy descriptor.
The second descriptor makes use of several report types. The first three are for "consumer" (whatever that is), power control, and one vendor-defined (so we don't know what it does). The remaining three report types (IDs 4 to 6) report every single key as a bitfield (which makes a lot of sense for a gaming keyboard with n-key rollover).
As you can see from the hidraw dump, the functions keys are reported correctly: Pressing Left Ctrl gives you
04 01 00 00 00 00 00 00
(report id is 4
, first bit is on), while pressing Left Alt gives you
04 04 00 00 00 00 00 00
(report id is 4
, third bit is on), etc., and releasing all keys resets all bits to zero.
The device mapping in the kernel
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
actually claims to understand that, and it should map those to different scan codes. So if you really don't see something similar to
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 ------------
in evtest
(notice the different MSC_SCAN
codes, once 1d
, once 38
; never mind the line with EV_KEY
), then something goes wrong when the kernel maps the HID report to the scan codes.
In that case, please file a bug with the kernel developers (I guess for "input subsystem"), include all the information so far, and see if they have an idea to debug this.
A possible alternative solution is to somehow activate the legacy HID device, as this is more similar to normal USB keyboard and may work out of the box. Are there some keys or key combinations on the keyboard that look like they might do this?
Partial answer:
The first (silent) HID descriptor looks like what you usually see for USB keyboards: A report consists of 8 bits for the left and right Ctrl/Shift/Alt/Meta (Win) keys, followed by a reserved byte (zero) and 6 bytes for the scan codes for key presses. (This is the reason why USB keyboards are limited to 6-key rollover). This may be some sort of legacy descriptor.
The second descriptor makes use of several report types. The first three are for "consumer" (whatever that is), power control, and one vendor-defined (so we don't know what it does). The remaining three report types (IDs 4 to 6) report every single key as a bitfield (which makes a lot of sense for a gaming keyboard with n-key rollover).
As you can see from the hidraw dump, the functions keys are reported correctly: Pressing Left Ctrl gives you
04 01 00 00 00 00 00 00
(report id is 4
, first bit is on), while pressing Left Alt gives you
04 04 00 00 00 00 00 00
(report id is 4
, third bit is on), etc., and releasing all keys resets all bits to zero.
The device mapping in the kernel
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
actually claims to understand that, and it should map those to different scan codes. So if you really don't see something similar to
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 ------------
in evtest
(notice the different MSC_SCAN
codes, once 1d
, once 38
; never mind the line with EV_KEY
), then something goes wrong when the kernel maps the HID report to the scan codes.
In that case, please file a bug with the kernel developers (I guess for "input subsystem"), include all the information so far, and see if they have an idea to debug this.
A possible alternative solution is to somehow activate the legacy HID device, as this is more similar to normal USB keyboard and may work out of the box. Are there some keys or key combinations on the keyboard that look like they might do this?
answered Jun 12 '17 at 12:40
dirkt
14.4k2931
14.4k2931
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
1
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look atdrivers/hid
, especiallyhid-core.c
andhid-input.c
, and alsoDocumentation/hid
, especiallyhidraw.txt
andhid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.
â dirkt
Jun 14 '17 at 8:16
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g.hid-microsoft.c
. Hopefully something comes out of that
â Robert Munteanu
Jun 14 '17 at 8:22
 |Â
show 3 more comments
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
1
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look atdrivers/hid
, especiallyhid-core.c
andhid-input.c
, and alsoDocumentation/hid
, especiallyhidraw.txt
andhid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.
â dirkt
Jun 14 '17 at 8:16
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g.hid-microsoft.c
. Hopefully something comes out of that
â Robert Munteanu
Jun 14 '17 at 8:22
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
Thanks, I'll look into filing a bug. The keyboard does not have a legacy option, but I'll contact the manufacturer regarding that.
â Robert Munteanu
Jun 12 '17 at 12:56
1
1
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
Filed bugzilla.kernel.org/show_bug.cgi?id=196053 . Thanks a lot for your help troubleshooting this
â Robert Munteanu
Jun 13 '17 at 9:02
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
you seem very knowledgeable in this area. I decided to take out my rusty C for a walk and try and write a kernel module for the fix. I basically built a hid module stub and have an empty input_mapping method I'm looking at. Can you tell me where I can find the correspondence between the hid_* kernel data structures and what I see using hexdump -C ? I should be able to get something going then.
â Robert Munteanu
Jun 14 '17 at 7:58
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look at
drivers/hid
, especially hid-core.c
and hid-input.c
, and also Documentation/hid
, especially hidraw.txt
and hid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.â dirkt
Jun 14 '17 at 8:16
I don't think you can write a new kernel module, you'll have to look at the existing ones. I don't understand the kernel HID layer in detail, but have a look at
drivers/hid
, especially hid-core.c
and hid-input.c
, and also Documentation/hid
, especially hidraw.txt
and hid-transport.txt
. For the HID descriptor, read usb.org/developers/hidpage/HID1_11.pdf, essentially the kernel parses this and uses it in the above files to pass stuff to the input layer.â dirkt
Jun 14 '17 at 8:16
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g. hid-microsoft.c
. Hopefully something comes out of thatâ Robert Munteanu
Jun 14 '17 at 8:22
Documentation/hid
is a good start, thank you. I've seen that lots of HID drivers exist for such quirks, e.g. hid-microsoft.c
. Hopefully something comes out of thatâ Robert Munteanu
Jun 14 '17 at 8:22
 |Â
show 3 more comments
up vote
1
down vote
accepted
My Linux kernel patch to fix Redragon Asura keyboards is now mainlined and will part of the Kernel 4.18 release.
There is a minor issue with the Num Lock and Caps Lock LEDs not being active ( keys work just fine ) that will be fixed with 4.19.
The patch can be applied to 4.16 and 4.17 as well, openSUSE started carrying it with 4.16.
add a comment |Â
up vote
1
down vote
accepted
My Linux kernel patch to fix Redragon Asura keyboards is now mainlined and will part of the Kernel 4.18 release.
There is a minor issue with the Num Lock and Caps Lock LEDs not being active ( keys work just fine ) that will be fixed with 4.19.
The patch can be applied to 4.16 and 4.17 as well, openSUSE started carrying it with 4.16.
add a comment |Â
up vote
1
down vote
accepted
up vote
1
down vote
accepted
My Linux kernel patch to fix Redragon Asura keyboards is now mainlined and will part of the Kernel 4.18 release.
There is a minor issue with the Num Lock and Caps Lock LEDs not being active ( keys work just fine ) that will be fixed with 4.19.
The patch can be applied to 4.16 and 4.17 as well, openSUSE started carrying it with 4.16.
My Linux kernel patch to fix Redragon Asura keyboards is now mainlined and will part of the Kernel 4.18 release.
There is a minor issue with the Num Lock and Caps Lock LEDs not being active ( keys work just fine ) that will be fixed with 4.19.
The patch can be applied to 4.16 and 4.17 as well, openSUSE started carrying it with 4.16.
edited Aug 15 at 13:32
answered Jun 11 at 6:46
Robert Munteanu
2281324
2281324
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f370612%2fredragon-asura-usb-keyboard-maps-all-ctrl-alt-win-keys-to-shift-l%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Does it actually show up as two HID devices, or did you plug it out and in again, reboot in between etc? Run
evtest
as root, select USB keyboard, see if they show up at the same scan code there as well. If yes, we need the HID descriptor (I'll tell you how). If no, edit question with output ofsetxkbmap -print
.â dirkt
Jun 12 '17 at 8:34
@dirkt - it does appear as two USB devices - I've unplugged and re-plugged in to double check. Running evdev as root shows me two 'USB keyboard' devices. The first one does not get generate any input, only the second one. The same problem is listed with evdev, left control generates
type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
â Robert Munteanu
Jun 12 '17 at 8:41
Huh, interesting. Do
mount -t debugfs none /sys/kernel/debug
as root, put output of/sys/kernel/debug/hid/DEVICE/rdesc
for allDEVICE
you can find into question (or pastebin, if too large). Does it also show up as two devices inlsusb
?â dirkt
Jun 12 '17 at 8:46
@dirkt - I have two related entries under /sys/kernel/debug/hid: 0003:0C45:760B.0037 and 0003:0C45:760B.0038 . I've uploaded the rdesc files at pastebin.com/4VwDKRvU and pastebin.com/CrBVRFBj
â Robert Munteanu
Jun 12 '17 at 9:01
That looks unusual enough that you may need a quirk in the HID kernel driver. Before I look at that in detail, do a
hexdump -C /dev/hidrawX
on both hidraw devices (checkdmesg
for current numbers), each time: press each of the Ctrl/Alt/Win keys twice, press space bar at end a few times until the next line appears. Put output in pastebin.â dirkt
Jun 12 '17 at 9:14