houmain / keymapper

A cross-platform context-aware key remapper.
GNU General Public License v3.0
260 stars 22 forks source link

Does not map keys when using `razerkbd` driver #29

Closed niwla23 closed 1 year ago

niwla23 commented 2 years ago

Version: 1.10.0 OS: Manjaro, installed from AUR

keymapper -v output:

Loading configuration file '/home/alwin/.config/keymapper.conf'
Connecting to keymapperd
Initializing focused window detection
Initialized X11 focused window detection
Initialized D-BUS focused window detection
Active contexts updated (1)
Entering update loop
Detected focused window changed:
  class = 'konsole'
  title = '.config : zsh — Konsole'
Detected focused window changed:
  class = 'konsole'
  title = '.config : keymapper — Konsole'

sudo keymapperd -v output:

Waiting for keymapper to connect
Creating uinput keyboard 'Keymapper'
Updating device list
Grabbing device event2 'Razer Razer Ornata Chroma'
Entering update loop

Config file:

CapsLock >> Backspace
Meta    >> A
Z >> Y
Y >> Z

But no keys are mapped, they just behave like normal.

houmain commented 2 years ago

Thanks for reporting! I suspect that the keyboard is the problem. Have you tried another keyboard? Could you please post the output of sudo evtest. Whether the keyboard registers multiple devices and which functionality these have. Thanks!

houmain commented 2 years ago

In 2.1.2 a mistake slipped in, so it did not load the config from the .config directory anymore. This was fixed in 2.1.3. But this was unrelated to the issue #29.

G-M0N3Y-2503 commented 2 years ago

My keyboard has several event devices.

/dev/input/event3:      Razer Razer BlackWidow Ultimate 2013
/dev/input/event4:      Razer Razer BlackWidow Ultimate 2013
/dev/input/event6:      Razer Razer BlackWidow Ultimate 2013

And the one that is grabbed (event3) doesn't seem to ever actually emit any events and the one that does (event4) seems to be rejected for having EV_ABS and EV_REL.

/dev/input/event3 supported events ``` Select the device event number [0-9]: 3 Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x1532 product 0x11a version 0x111 Input device name: "Razer Razer BlackWidow Ultimate 2013" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 1 (KEY_ESC) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 12 (KEY_MINUS) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 15 (KEY_TAB) Event code 16 (KEY_Q) Event code 17 (KEY_W) Event code 18 (KEY_E) Event code 19 (KEY_R) Event code 20 (KEY_T) Event code 21 (KEY_Y) Event code 22 (KEY_U) Event code 23 (KEY_I) Event code 24 (KEY_O) Event code 25 (KEY_P) Event code 26 (KEY_LEFTBRACE) Event code 27 (KEY_RIGHTBRACE) Event code 28 (KEY_ENTER) Event code 29 (KEY_LEFTCTRL) Event code 30 (KEY_A) Event code 31 (KEY_S) Event code 32 (KEY_D) Event code 33 (KEY_F) Event code 34 (KEY_G) Event code 35 (KEY_H) Event code 36 (KEY_J) Event code 37 (KEY_K) Event code 38 (KEY_L) Event code 39 (KEY_SEMICOLON) Event code 40 (KEY_APOSTROPHE) Event code 41 (KEY_GRAVE) Event code 42 (KEY_LEFTSHIFT) Event code 43 (KEY_BACKSLASH) Event code 44 (KEY_Z) Event code 45 (KEY_X) Event code 46 (KEY_C) Event code 47 (KEY_V) Event code 48 (KEY_B) Event code 49 (KEY_N) Event code 50 (KEY_M) Event code 51 (KEY_COMMA) Event code 52 (KEY_DOT) Event code 53 (KEY_SLASH) Event code 54 (KEY_RIGHTSHIFT) Event code 55 (KEY_KPASTERISK) Event code 56 (KEY_LEFTALT) Event code 57 (KEY_SPACE) Event code 58 (KEY_CAPSLOCK) Event code 59 (KEY_F1) Event code 60 (KEY_F2) Event code 61 (KEY_F3) Event code 62 (KEY_F4) Event code 63 (KEY_F5) Event code 64 (KEY_F6) Event code 65 (KEY_F7) Event code 66 (KEY_F8) Event code 67 (KEY_F9) Event code 68 (KEY_F10) Event code 69 (KEY_NUMLOCK) Event code 70 (KEY_SCROLLLOCK) Event code 71 (KEY_KP7) Event code 72 (KEY_KP8) Event code 73 (KEY_KP9) Event code 74 (KEY_KPMINUS) Event code 75 (KEY_KP4) Event code 76 (KEY_KP5) Event code 77 (KEY_KP6) Event code 78 (KEY_KPPLUS) Event code 79 (KEY_KP1) Event code 80 (KEY_KP2) Event code 81 (KEY_KP3) Event code 82 (KEY_KP0) Event code 83 (KEY_KPDOT) Event code 85 (KEY_ZENKAKUHANKAKU) Event code 86 (KEY_102ND) Event code 87 (KEY_F11) Event code 88 (KEY_F12) Event code 89 (KEY_RO) Event code 90 (KEY_KATAKANA) Event code 91 (KEY_HIRAGANA) Event code 92 (KEY_HENKAN) Event code 93 (KEY_KATAKANAHIRAGANA) Event code 94 (KEY_MUHENKAN) Event code 95 (KEY_KPJPCOMMA) Event code 96 (KEY_KPENTER) Event code 97 (KEY_RIGHTCTRL) Event code 98 (KEY_KPSLASH) Event code 99 (KEY_SYSRQ) Event code 100 (KEY_RIGHTALT) Event code 102 (KEY_HOME) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 107 (KEY_END) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 110 (KEY_INSERT) Event code 111 (KEY_DELETE) Event code 113 (KEY_MUTE) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 117 (KEY_KPEQUAL) Event code 119 (KEY_PAUSE) Event code 121 (KEY_KPCOMMA) Event code 122 (KEY_HANGUEL) Event code 123 (KEY_HANJA) Event code 124 (KEY_YEN) Event code 125 (KEY_LEFTMETA) Event code 126 (KEY_RIGHTMETA) Event code 127 (KEY_COMPOSE) Event code 128 (KEY_STOP) Event code 129 (KEY_AGAIN) Event code 130 (KEY_PROPS) Event code 131 (KEY_UNDO) Event code 132 (KEY_FRONT) Event code 133 (KEY_COPY) Event code 134 (KEY_OPEN) Event code 135 (KEY_PASTE) Event code 136 (KEY_FIND) Event code 137 (KEY_CUT) Event code 138 (KEY_HELP) Event code 140 (KEY_CALC) Event code 142 (KEY_SLEEP) Event code 150 (KEY_WWW) Event code 152 (KEY_SCREENLOCK) Event code 158 (KEY_BACK) Event code 159 (KEY_FORWARD) Event code 161 (KEY_EJECTCD) Event code 163 (KEY_NEXTSONG) Event code 164 (KEY_PLAYPAUSE) Event code 165 (KEY_PREVIOUSSONG) Event code 166 (KEY_STOPCD) Event code 173 (KEY_REFRESH) Event code 176 (KEY_EDIT) Event code 177 (KEY_SCROLLUP) Event code 178 (KEY_SCROLLDOWN) Event code 179 (KEY_KPLEFTPAREN) Event code 180 (KEY_KPRIGHTPAREN) Event code 183 (KEY_F13) Event code 184 (KEY_F14) Event code 185 (KEY_F15) Event code 186 (KEY_F16) Event code 187 (KEY_F17) Event code 188 (KEY_F18) Event code 189 (KEY_F19) Event code 190 (KEY_F20) Event code 191 (KEY_F21) Event code 192 (KEY_F22) Event code 193 (KEY_F23) Event code 194 (KEY_F24) Event code 240 (KEY_UNKNOWN) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Event type 17 (EV_LED) Event code 0 (LED_NUML) state 0 Event code 1 (LED_CAPSL) state 0 Event code 2 (LED_SCROLLL) state 0 Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33 ```
/dev/input/event4 supported events ``` Select the device event number [0-9]: 4 Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x1532 product 0x11a version 0x111 Input device name: "Razer Razer BlackWidow Ultimate 2013" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 1 (KEY_ESC) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 12 (KEY_MINUS) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 15 (KEY_TAB) Event code 16 (KEY_Q) Event code 17 (KEY_W) Event code 18 (KEY_E) Event code 19 (KEY_R) Event code 20 (KEY_T) Event code 21 (KEY_Y) Event code 22 (KEY_U) Event code 23 (KEY_I) Event code 24 (KEY_O) Event code 25 (KEY_P) Event code 26 (KEY_LEFTBRACE) Event code 27 (KEY_RIGHTBRACE) Event code 28 (KEY_ENTER) Event code 29 (KEY_LEFTCTRL) Event code 30 (KEY_A) Event code 31 (KEY_S) Event code 32 (KEY_D) Event code 33 (KEY_F) Event code 34 (KEY_G) Event code 35 (KEY_H) Event code 36 (KEY_J) Event code 37 (KEY_K) Event code 38 (KEY_L) Event code 39 (KEY_SEMICOLON) Event code 40 (KEY_APOSTROPHE) Event code 41 (KEY_GRAVE) Event code 42 (KEY_LEFTSHIFT) Event code 43 (KEY_BACKSLASH) Event code 44 (KEY_Z) Event code 45 (KEY_X) Event code 46 (KEY_C) Event code 47 (KEY_V) Event code 48 (KEY_B) Event code 49 (KEY_N) Event code 50 (KEY_M) Event code 51 (KEY_COMMA) Event code 52 (KEY_DOT) Event code 53 (KEY_SLASH) Event code 54 (KEY_RIGHTSHIFT) Event code 55 (KEY_KPASTERISK) Event code 56 (KEY_LEFTALT) Event code 57 (KEY_SPACE) Event code 58 (KEY_CAPSLOCK) Event code 59 (KEY_F1) Event code 60 (KEY_F2) Event code 61 (KEY_F3) Event code 62 (KEY_F4) Event code 63 (KEY_F5) Event code 64 (KEY_F6) Event code 65 (KEY_F7) Event code 66 (KEY_F8) Event code 67 (KEY_F9) Event code 68 (KEY_F10) Event code 69 (KEY_NUMLOCK) Event code 70 (KEY_SCROLLLOCK) Event code 71 (KEY_KP7) Event code 72 (KEY_KP8) Event code 73 (KEY_KP9) Event code 74 (KEY_KPMINUS) Event code 75 (KEY_KP4) Event code 76 (KEY_KP5) Event code 77 (KEY_KP6) Event code 78 (KEY_KPPLUS) Event code 79 (KEY_KP1) Event code 80 (KEY_KP2) Event code 81 (KEY_KP3) Event code 82 (KEY_KP0) Event code 83 (KEY_KPDOT) Event code 85 (KEY_ZENKAKUHANKAKU) Event code 86 (KEY_102ND) Event code 87 (KEY_F11) Event code 88 (KEY_F12) Event code 89 (KEY_RO) Event code 90 (KEY_KATAKANA) Event code 91 (KEY_HIRAGANA) Event code 92 (KEY_HENKAN) Event code 93 (KEY_KATAKANAHIRAGANA) Event code 94 (KEY_MUHENKAN) Event code 95 (KEY_KPJPCOMMA) Event code 96 (KEY_KPENTER) Event code 97 (KEY_RIGHTCTRL) Event code 98 (KEY_KPSLASH) Event code 99 (KEY_SYSRQ) Event code 100 (KEY_RIGHTALT) Event code 102 (KEY_HOME) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 107 (KEY_END) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 110 (KEY_INSERT) Event code 111 (KEY_DELETE) Event code 113 (KEY_MUTE) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 117 (KEY_KPEQUAL) Event code 119 (KEY_PAUSE) Event code 121 (KEY_KPCOMMA) Event code 122 (KEY_HANGUEL) Event code 123 (KEY_HANJA) Event code 124 (KEY_YEN) Event code 125 (KEY_LEFTMETA) Event code 126 (KEY_RIGHTMETA) Event code 127 (KEY_COMPOSE) Event code 128 (KEY_STOP) Event code 129 (KEY_AGAIN) Event code 130 (KEY_PROPS) Event code 131 (KEY_UNDO) Event code 132 (KEY_FRONT) Event code 133 (KEY_COPY) Event code 134 (KEY_OPEN) Event code 135 (KEY_PASTE) Event code 136 (KEY_FIND) Event code 137 (KEY_CUT) Event code 138 (KEY_HELP) Event code 139 (KEY_MENU) Event code 140 (KEY_CALC) Event code 142 (KEY_SLEEP) Event code 143 (KEY_WAKEUP) Event code 144 (KEY_FILE) Event code 150 (KEY_WWW) Event code 152 (KEY_SCREENLOCK) Event code 155 (KEY_MAIL) Event code 156 (KEY_BOOKMARKS) Event code 158 (KEY_BACK) Event code 159 (KEY_FORWARD) Event code 161 (KEY_EJECTCD) Event code 163 (KEY_NEXTSONG) Event code 164 (KEY_PLAYPAUSE) Event code 165 (KEY_PREVIOUSSONG) Event code 166 (KEY_STOPCD) Event code 167 (KEY_RECORD) Event code 168 (KEY_REWIND) Event code 169 (KEY_PHONE) Event code 171 (KEY_CONFIG) Event code 172 (KEY_HOMEPAGE) Event code 173 (KEY_REFRESH) Event code 174 (KEY_EXIT) Event code 176 (KEY_EDIT) Event code 177 (KEY_SCROLLUP) Event code 178 (KEY_SCROLLDOWN) Event code 179 (KEY_KPLEFTPAREN) Event code 180 (KEY_KPRIGHTPAREN) Event code 181 (KEY_NEW) Event code 183 (KEY_F13) Event code 184 (KEY_F14) Event code 185 (KEY_F15) Event code 186 (KEY_F16) Event code 187 (KEY_F17) Event code 188 (KEY_F18) Event code 189 (KEY_F19) Event code 190 (KEY_F20) Event code 191 (KEY_F21) Event code 192 (KEY_F22) Event code 193 (KEY_F23) Event code 194 (KEY_F24) Event code 206 (KEY_CLOSE) Event code 207 (KEY_PLAY) Event code 208 (KEY_FASTFORWARD) Event code 209 (KEY_BASSBOOST) Event code 210 (KEY_PRINT) Event code 212 (KEY_CAMERA) Event code 216 (KEY_CHAT) Event code 217 (KEY_SEARCH) Event code 219 (KEY_FINANCE) Event code 224 (KEY_BRIGHTNESSDOWN) Event code 225 (KEY_BRIGHTNESSUP) Event code 228 (KEY_KBDILLUMTOGGLE) Event code 229 (KEY_KBDILLUMDOWN) Event code 230 (KEY_KBDILLUMUP) Event code 234 (KEY_SAVE) Event code 235 (KEY_DOCUMENTS) Event code 240 (KEY_UNKNOWN) Event code 241 (KEY_VIDEO_NEXT) Event code 244 (KEY_BRIGHTNESS_ZERO) Event code 256 (BTN_0) Event code 353 (KEY_SELECT) Event code 354 (KEY_GOTO) Event code 358 (KEY_INFO) Event code 362 (KEY_PROGRAM) Event code 366 (KEY_PVR) Event code 370 (KEY_SUBTITLE) Event code 372 (KEY_ZOOM) Event code 374 (KEY_KEYBOARD) Event code 375 (KEY_SCREEN) Event code 376 (KEY_PC) Event code 377 (KEY_TV) Event code 378 (KEY_TV2) Event code 379 (KEY_VCR) Event code 380 (KEY_VCR2) Event code 381 (KEY_SAT) Event code 383 (KEY_CD) Event code 384 (KEY_TAPE) Event code 386 (KEY_TUNER) Event code 387 (KEY_PLAYER) Event code 389 (KEY_DVD) Event code 392 (KEY_AUDIO) Event code 393 (KEY_VIDEO) Event code 396 (KEY_MEMO) Event code 397 (KEY_CALENDAR) Event code 398 (KEY_RED) Event code 399 (KEY_GREEN) Event code 400 (KEY_YELLOW) Event code 401 (KEY_BLUE) Event code 402 (KEY_CHANNELUP) Event code 403 (KEY_CHANNELDOWN) Event code 405 (KEY_LAST) Event code 407 (KEY_NEXT) Event code 408 (KEY_RESTART) Event code 409 (KEY_SLOW) Event code 410 (KEY_SHUFFLE) Event code 412 (KEY_PREVIOUS) Event code 416 (KEY_VIDEOPHONE) Event code 417 (KEY_GAMES) Event code 418 (KEY_ZOOMIN) Event code 419 (KEY_ZOOMOUT) Event code 420 (KEY_ZOOMRESET) Event code 421 (KEY_WORDPROCESSOR) Event code 422 (KEY_EDITOR) Event code 423 (KEY_SPREADSHEET) Event code 424 (KEY_GRAPHICSEDITOR) Event code 425 (KEY_PRESENTATION) Event code 426 (KEY_DATABASE) Event code 427 (KEY_NEWS) Event code 428 (KEY_VOICEMAIL) Event code 429 (KEY_ADDRESSBOOK) Event code 430 (KEY_MESSENGER) Event code 431 (KEY_DISPLAYTOGGLE) Event code 432 (KEY_SPELLCHECK) Event code 433 (KEY_LOGOFF) Event code 439 (KEY_MEDIA_REPEAT) Event code 442 (KEY_IMAGES) Event code 576 (KEY_BUTTONCONFIG) Event code 577 (KEY_TASKMANAGER) Event code 578 (KEY_JOURNAL) Event code 579 (KEY_CONTROLPANEL) Event code 580 (KEY_APPSELECT) Event code 581 (KEY_SCREENSAVER) Event code 582 (KEY_VOICECOMMAND) Event code 583 (KEY_ASSISTANT) Event code 585 (?) Event code 586 (?) Event code 592 (KEY_BRIGHTNESS_MIN) Event code 593 (KEY_BRIGHTNESS_MAX) Event type 2 (EV_REL) Event code 6 (REL_HWHEEL) Event code 12 (REL_HWHEEL_HI_RES) Event type 3 (EV_ABS) Event code 32 (ABS_VOLUME) Value 0 Min 0 Max 572 Event code 40 (ABS_MISC) Value 0 Min 0 Max 255 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33 Properties: ```
/dev/input/event6 supported events ``` Select the device event number [0-9]: 6 Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x1532 product 0x11a version 0x111 Input device name: "Razer Razer BlackWidow Ultimate 2013" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 272 (BTN_LEFT) Event code 273 (BTN_RIGHT) Event code 274 (BTN_MIDDLE) Event type 2 (EV_REL) Event code 0 (REL_X) Event code 1 (REL_Y) Event code 8 (REL_WHEEL) Event code 11 (REL_WHEEL_HI_RES) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Properties: ```

I use the openrazer driver and from what I recall from looking at it last, it mostly just passes events through. So Razer does some pretty weird stuff with their drivers. If you don't want just to grab all devices with EV_KEY or something, perhaps a blacklist or whitelist is needed.

VeerniVishwanath commented 2 years ago

In 2.1.2 a mistake slipped in, so it did not load the config from the .config directory anymore. This was fixed in 2.1.3. But this was unrelated to the issue #29.

Sorry my bad. I'll delete it 😅

G-M0N3Y-2503 commented 2 years ago

Additionally, In my case, while debugging keymapperd I noticed that the mappings don't work if my config has_mouse_mappings(). It looks like this is because extra event devices are selected and only events from one device are mapped?. Perhaps mapping events from all grabbed devices if the device is unspecified is necessary to support some devices. and in my case, I think all devices with the matched name would work.

keymapperd debug output The first loaded config has mouse mappings and the second does not have mouse mappings. ``` Waiting for keymapper to connect Received configuration Received contexts (1) Creating uinput device 'Keymapper' Updating device list Grabbing device event3 'Razer Razer Naga 2014' Grabbing device event4 'Razer Razer Naga 2014' Grabbing device event6 'Razer Razer BlackWidow Ultimate 2013' Grabbing device event8 'Razer Razer BlackWidow Ultimate 2013' Entering update loop Received contexts (1) Received configuration Mouse usage in configuration changed Received contexts (0) Connection to keymapper reset Ungrabbing device event3 Ungrabbing device event4 Ungrabbing device event6 Ungrabbing device event8 --------------- Waiting for keymapper to connect Received configuration Received contexts (0) Creating uinput device 'Keymapper' Updating device list Grabbing device event4 'Razer Razer Naga 2014' Grabbing device event6 'Razer Razer BlackWidow Ultimate 2013' Entering update loop Received contexts (0) ```
/dev/input/event3:      Razer Razer Naga 2014
/dev/input/event4:      Razer Razer Naga 2014
/dev/input/event5:      Razer Razer Naga 2014
/dev/input/event3 supported events ``` Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x1532 product 0x40 version 0x111 Input device name: "Razer Razer Naga 2014" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 272 (BTN_LEFT) Event code 273 (BTN_RIGHT) Event code 274 (BTN_MIDDLE) Event code 275 (BTN_SIDE) Event code 276 (BTN_EXTRA) Event code 277 (BTN_FORWARD) Event code 278 (BTN_BACK) Event type 2 (EV_REL) Event code 0 (REL_X) Event code 1 (REL_Y) Event code 6 (REL_HWHEEL) Event code 8 (REL_WHEEL) Event code 11 (REL_WHEEL_HI_RES) Event code 12 (REL_HWHEEL_HI_RES) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) ```
/dev/input/event4 supported events ``` Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x1532 product 0x40 version 0x111 Input device name: "Razer Razer Naga 2014" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 1 (KEY_ESC) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 12 (KEY_MINUS) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 15 (KEY_TAB) Event code 16 (KEY_Q) Event code 17 (KEY_W) Event code 18 (KEY_E) Event code 19 (KEY_R) Event code 20 (KEY_T) Event code 21 (KEY_Y) Event code 22 (KEY_U) Event code 23 (KEY_I) Event code 24 (KEY_O) Event code 25 (KEY_P) Event code 26 (KEY_LEFTBRACE) Event code 27 (KEY_RIGHTBRACE) Event code 28 (KEY_ENTER) Event code 29 (KEY_LEFTCTRL) Event code 30 (KEY_A) Event code 31 (KEY_S) Event code 32 (KEY_D) Event code 33 (KEY_F) Event code 34 (KEY_G) Event code 35 (KEY_H) Event code 36 (KEY_J) Event code 37 (KEY_K) Event code 38 (KEY_L) Event code 39 (KEY_SEMICOLON) Event code 40 (KEY_APOSTROPHE) Event code 41 (KEY_GRAVE) Event code 42 (KEY_LEFTSHIFT) Event code 43 (KEY_BACKSLASH) Event code 44 (KEY_Z) Event code 45 (KEY_X) Event code 46 (KEY_C) Event code 47 (KEY_V) Event code 48 (KEY_B) Event code 49 (KEY_N) Event code 50 (KEY_M) Event code 51 (KEY_COMMA) Event code 52 (KEY_DOT) Event code 53 (KEY_SLASH) Event code 54 (KEY_RIGHTSHIFT) Event code 55 (KEY_KPASTERISK) Event code 56 (KEY_LEFTALT) Event code 57 (KEY_SPACE) Event code 58 (KEY_CAPSLOCK) Event code 59 (KEY_F1) Event code 60 (KEY_F2) Event code 61 (KEY_F3) Event code 62 (KEY_F4) Event code 63 (KEY_F5) Event code 64 (KEY_F6) Event code 65 (KEY_F7) Event code 66 (KEY_F8) Event code 67 (KEY_F9) Event code 68 (KEY_F10) Event code 69 (KEY_NUMLOCK) Event code 70 (KEY_SCROLLLOCK) Event code 71 (KEY_KP7) Event code 72 (KEY_KP8) Event code 73 (KEY_KP9) Event code 74 (KEY_KPMINUS) Event code 75 (KEY_KP4) Event code 76 (KEY_KP5) Event code 77 (KEY_KP6) Event code 78 (KEY_KPPLUS) Event code 79 (KEY_KP1) Event code 80 (KEY_KP2) Event code 81 (KEY_KP3) Event code 82 (KEY_KP0) Event code 83 (KEY_KPDOT) Event code 85 (KEY_ZENKAKUHANKAKU) Event code 86 (KEY_102ND) Event code 87 (KEY_F11) Event code 88 (KEY_F12) Event code 89 (KEY_RO) Event code 90 (KEY_KATAKANA) Event code 91 (KEY_HIRAGANA) Event code 92 (KEY_HENKAN) Event code 93 (KEY_KATAKANAHIRAGANA) Event code 94 (KEY_MUHENKAN) Event code 95 (KEY_KPJPCOMMA) Event code 96 (KEY_KPENTER) Event code 97 (KEY_RIGHTCTRL) Event code 98 (KEY_KPSLASH) Event code 99 (KEY_SYSRQ) Event code 100 (KEY_RIGHTALT) Event code 102 (KEY_HOME) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 107 (KEY_END) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 110 (KEY_INSERT) Event code 111 (KEY_DELETE) Event code 113 (KEY_MUTE) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 117 (KEY_KPEQUAL) Event code 119 (KEY_PAUSE) Event code 121 (KEY_KPCOMMA) Event code 122 (KEY_HANGUEL) Event code 123 (KEY_HANJA) Event code 124 (KEY_YEN) Event code 125 (KEY_LEFTMETA) Event code 126 (KEY_RIGHTMETA) Event code 127 (KEY_COMPOSE) Event code 128 (KEY_STOP) Event code 129 (KEY_AGAIN) Event code 130 (KEY_PROPS) Event code 131 (KEY_UNDO) Event code 132 (KEY_FRONT) Event code 133 (KEY_COPY) Event code 134 (KEY_OPEN) Event code 135 (KEY_PASTE) Event code 136 (KEY_FIND) Event code 137 (KEY_CUT) Event code 138 (KEY_HELP) Event code 140 (KEY_CALC) Event code 142 (KEY_SLEEP) Event code 150 (KEY_WWW) Event code 152 (KEY_SCREENLOCK) Event code 158 (KEY_BACK) Event code 159 (KEY_FORWARD) Event code 161 (KEY_EJECTCD) Event code 163 (KEY_NEXTSONG) Event code 164 (KEY_PLAYPAUSE) Event code 165 (KEY_PREVIOUSSONG) Event code 166 (KEY_STOPCD) Event code 173 (KEY_REFRESH) Event code 176 (KEY_EDIT) Event code 177 (KEY_SCROLLUP) Event code 178 (KEY_SCROLLDOWN) Event code 179 (KEY_KPLEFTPAREN) Event code 180 (KEY_KPRIGHTPAREN) Event code 183 (KEY_F13) Event code 184 (KEY_F14) Event code 185 (KEY_F15) Event code 186 (KEY_F16) Event code 187 (KEY_F17) Event code 188 (KEY_F18) Event code 189 (KEY_F19) Event code 190 (KEY_F20) Event code 191 (KEY_F21) Event code 192 (KEY_F22) Event code 193 (KEY_F23) Event code 194 (KEY_F24) Event code 240 (KEY_UNKNOWN) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Event type 17 (EV_LED) Event code 0 (LED_NUML) state 0 Event code 1 (LED_CAPSL) state 0 Event code 2 (LED_SCROLLL) state 0 Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33 ```
/dev/input/event5 supported events ``` Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x1532 product 0x40 version 0x111 Input device name: "Razer Razer Naga 2014" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 1 (KEY_ESC) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 12 (KEY_MINUS) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 15 (KEY_TAB) Event code 16 (KEY_Q) Event code 17 (KEY_W) Event code 18 (KEY_E) Event code 19 (KEY_R) Event code 20 (KEY_T) Event code 21 (KEY_Y) Event code 22 (KEY_U) Event code 23 (KEY_I) Event code 24 (KEY_O) Event code 25 (KEY_P) Event code 26 (KEY_LEFTBRACE) Event code 27 (KEY_RIGHTBRACE) Event code 28 (KEY_ENTER) Event code 29 (KEY_LEFTCTRL) Event code 30 (KEY_A) Event code 31 (KEY_S) Event code 32 (KEY_D) Event code 33 (KEY_F) Event code 34 (KEY_G) Event code 35 (KEY_H) Event code 36 (KEY_J) Event code 37 (KEY_K) Event code 38 (KEY_L) Event code 39 (KEY_SEMICOLON) Event code 40 (KEY_APOSTROPHE) Event code 41 (KEY_GRAVE) Event code 42 (KEY_LEFTSHIFT) Event code 43 (KEY_BACKSLASH) Event code 44 (KEY_Z) Event code 45 (KEY_X) Event code 46 (KEY_C) Event code 47 (KEY_V) Event code 48 (KEY_B) Event code 49 (KEY_N) Event code 50 (KEY_M) Event code 51 (KEY_COMMA) Event code 52 (KEY_DOT) Event code 53 (KEY_SLASH) Event code 54 (KEY_RIGHTSHIFT) Event code 55 (KEY_KPASTERISK) Event code 56 (KEY_LEFTALT) Event code 57 (KEY_SPACE) Event code 58 (KEY_CAPSLOCK) Event code 59 (KEY_F1) Event code 60 (KEY_F2) Event code 61 (KEY_F3) Event code 62 (KEY_F4) Event code 63 (KEY_F5) Event code 64 (KEY_F6) Event code 65 (KEY_F7) Event code 66 (KEY_F8) Event code 67 (KEY_F9) Event code 68 (KEY_F10) Event code 69 (KEY_NUMLOCK) Event code 70 (KEY_SCROLLLOCK) Event code 71 (KEY_KP7) Event code 72 (KEY_KP8) Event code 73 (KEY_KP9) Event code 74 (KEY_KPMINUS) Event code 75 (KEY_KP4) Event code 76 (KEY_KP5) Event code 77 (KEY_KP6) Event code 78 (KEY_KPPLUS) Event code 79 (KEY_KP1) Event code 80 (KEY_KP2) Event code 81 (KEY_KP3) Event code 82 (KEY_KP0) Event code 83 (KEY_KPDOT) Event code 85 (KEY_ZENKAKUHANKAKU) Event code 86 (KEY_102ND) Event code 87 (KEY_F11) Event code 88 (KEY_F12) Event code 89 (KEY_RO) Event code 90 (KEY_KATAKANA) Event code 91 (KEY_HIRAGANA) Event code 92 (KEY_HENKAN) Event code 93 (KEY_KATAKANAHIRAGANA) Event code 94 (KEY_MUHENKAN) Event code 95 (KEY_KPJPCOMMA) Event code 96 (KEY_KPENTER) Event code 97 (KEY_RIGHTCTRL) Event code 98 (KEY_KPSLASH) Event code 99 (KEY_SYSRQ) Event code 100 (KEY_RIGHTALT) Event code 102 (KEY_HOME) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 107 (KEY_END) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 110 (KEY_INSERT) Event code 111 (KEY_DELETE) Event code 113 (KEY_MUTE) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 117 (KEY_KPEQUAL) Event code 119 (KEY_PAUSE) Event code 121 (KEY_KPCOMMA) Event code 122 (KEY_HANGUEL) Event code 123 (KEY_HANJA) Event code 124 (KEY_YEN) Event code 125 (KEY_LEFTMETA) Event code 126 (KEY_RIGHTMETA) Event code 127 (KEY_COMPOSE) Event code 128 (KEY_STOP) Event code 129 (KEY_AGAIN) Event code 130 (KEY_PROPS) Event code 131 (KEY_UNDO) Event code 132 (KEY_FRONT) Event code 133 (KEY_COPY) Event code 134 (KEY_OPEN) Event code 135 (KEY_PASTE) Event code 136 (KEY_FIND) Event code 137 (KEY_CUT) Event code 138 (KEY_HELP) Event code 139 (KEY_MENU) Event code 140 (KEY_CALC) Event code 142 (KEY_SLEEP) Event code 143 (KEY_WAKEUP) Event code 144 (KEY_FILE) Event code 150 (KEY_WWW) Event code 152 (KEY_SCREENLOCK) Event code 155 (KEY_MAIL) Event code 156 (KEY_BOOKMARKS) Event code 158 (KEY_BACK) Event code 159 (KEY_FORWARD) Event code 161 (KEY_EJECTCD) Event code 163 (KEY_NEXTSONG) Event code 164 (KEY_PLAYPAUSE) Event code 165 (KEY_PREVIOUSSONG) Event code 166 (KEY_STOPCD) Event code 167 (KEY_RECORD) Event code 168 (KEY_REWIND) Event code 169 (KEY_PHONE) Event code 171 (KEY_CONFIG) Event code 172 (KEY_HOMEPAGE) Event code 173 (KEY_REFRESH) Event code 174 (KEY_EXIT) Event code 176 (KEY_EDIT) Event code 177 (KEY_SCROLLUP) Event code 178 (KEY_SCROLLDOWN) Event code 179 (KEY_KPLEFTPAREN) Event code 180 (KEY_KPRIGHTPAREN) Event code 181 (KEY_NEW) Event code 183 (KEY_F13) Event code 184 (KEY_F14) Event code 185 (KEY_F15) Event code 186 (KEY_F16) Event code 187 (KEY_F17) Event code 188 (KEY_F18) Event code 189 (KEY_F19) Event code 190 (KEY_F20) Event code 191 (KEY_F21) Event code 192 (KEY_F22) Event code 193 (KEY_F23) Event code 194 (KEY_F24) Event code 206 (KEY_CLOSE) Event code 207 (KEY_PLAY) Event code 208 (KEY_FASTFORWARD) Event code 209 (KEY_BASSBOOST) Event code 210 (KEY_PRINT) Event code 212 (KEY_CAMERA) Event code 216 (KEY_CHAT) Event code 217 (KEY_SEARCH) Event code 219 (KEY_FINANCE) Event code 224 (KEY_BRIGHTNESSDOWN) Event code 225 (KEY_BRIGHTNESSUP) Event code 228 (KEY_KBDILLUMTOGGLE) Event code 229 (KEY_KBDILLUMDOWN) Event code 230 (KEY_KBDILLUMUP) Event code 234 (KEY_SAVE) Event code 235 (KEY_DOCUMENTS) Event code 240 (KEY_UNKNOWN) Event code 241 (KEY_VIDEO_NEXT) Event code 244 (KEY_BRIGHTNESS_ZERO) Event code 256 (BTN_0) Event code 353 (KEY_SELECT) Event code 354 (KEY_GOTO) Event code 358 (KEY_INFO) Event code 362 (KEY_PROGRAM) Event code 366 (KEY_PVR) Event code 370 (KEY_SUBTITLE) Event code 372 (KEY_ZOOM) Event code 374 (KEY_KEYBOARD) Event code 375 (KEY_SCREEN) Event code 376 (KEY_PC) Event code 377 (KEY_TV) Event code 378 (KEY_TV2) Event code 379 (KEY_VCR) Event code 380 (KEY_VCR2) Event code 381 (KEY_SAT) Event code 383 (KEY_CD) Event code 384 (KEY_TAPE) Event code 386 (KEY_TUNER) Event code 387 (KEY_PLAYER) Event code 389 (KEY_DVD) Event code 392 (KEY_AUDIO) Event code 393 (KEY_VIDEO) Event code 396 (KEY_MEMO) Event code 397 (KEY_CALENDAR) Event code 398 (KEY_RED) Event code 399 (KEY_GREEN) Event code 400 (KEY_YELLOW) Event code 401 (KEY_BLUE) Event code 402 (KEY_CHANNELUP) Event code 403 (KEY_CHANNELDOWN) Event code 405 (KEY_LAST) Event code 407 (KEY_NEXT) Event code 408 (KEY_RESTART) Event code 409 (KEY_SLOW) Event code 410 (KEY_SHUFFLE) Event code 412 (KEY_PREVIOUS) Event code 416 (KEY_VIDEOPHONE) Event code 417 (KEY_GAMES) Event code 418 (KEY_ZOOMIN) Event code 419 (KEY_ZOOMOUT) Event code 420 (KEY_ZOOMRESET) Event code 421 (KEY_WORDPROCESSOR) Event code 422 (KEY_EDITOR) Event code 423 (KEY_SPREADSHEET) Event code 424 (KEY_GRAPHICSEDITOR) Event code 425 (KEY_PRESENTATION) Event code 426 (KEY_DATABASE) Event code 427 (KEY_NEWS) Event code 428 (KEY_VOICEMAIL) Event code 429 (KEY_ADDRESSBOOK) Event code 430 (KEY_MESSENGER) Event code 431 (KEY_DISPLAYTOGGLE) Event code 432 (KEY_SPELLCHECK) Event code 433 (KEY_LOGOFF) Event code 439 (KEY_MEDIA_REPEAT) Event code 442 (KEY_IMAGES) Event code 576 (KEY_BUTTONCONFIG) Event code 577 (KEY_TASKMANAGER) Event code 578 (KEY_JOURNAL) Event code 579 (KEY_CONTROLPANEL) Event code 580 (KEY_APPSELECT) Event code 581 (KEY_SCREENSAVER) Event code 582 (KEY_VOICECOMMAND) Event code 583 (KEY_ASSISTANT) Event code 585 (?) Event code 586 (?) Event code 592 (KEY_BRIGHTNESS_MIN) Event code 593 (KEY_BRIGHTNESS_MAX) Event type 2 (EV_REL) Event code 6 (REL_HWHEEL) Event code 12 (REL_HWHEEL_HI_RES) Event type 3 (EV_ABS) Event code 32 (ABS_VOLUME) Value 0 Min 0 Max 572 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33 ```
G-M0N3Y-2503 commented 2 years ago

I noticed that RegEx isn't implemented for device names, perhaps a short-term fix could be to allow RegEx matching some specific event device?

houmain commented 2 years ago

Thank you for your thorough report!

If you don't want just to grab all devices with EV_KEY or something, perhaps a blacklist or whitelist is needed.

I did not want to grab devices with EV_ABS because I thought that only joysticks,... had these and I suspect that it is not so easy to forward them correctly. Maybe I could also get my hands on such a device and implement it properly. This would likely fix this issue.

Perhaps mapping events from all grabbed devices if the device is unspecified is necessary to support some devices.

That is how it is supposed to work. Mice are only grabbed when mappings exist. But I can see in your log:

Received configuration
Mouse usage in configuration changed
Received contexts (0)
Connection to keymapper reset

that it set zero active contexts, which is quite suspicious. I will investigate how this is possible.

Thanks!

G-M0N3Y-2503 commented 2 years ago

I did not want to grab devices with EV_ABS because I thought that only joysticks,... had these and I suspect that it is not so easy to forward them correctly.

In the case of my devices, I think that is just Razer just misreporting devices because no matter what I press that event device doesn't actually emit any events for me. I was just saying if other devices misreport their capabilities that might be an issue.

But I can see in your log:

Received configuration
Mouse usage in configuration changed
Received contexts (0)
Connection to keymapper reset

that it set zero active contexts, which is quite suspicious. I will investigate how this is possible.

Oh, I hadn't noticed that, Just so you know. I don't think it's directly related to the mappings not working when has_mouse_mappings() is detected.

just ran the test again, albeit without --update to keymapper and the test failed without emitting that log.

`keymapperd --verbose` ``` Waiting for keymapper to connect Received configuration Received contexts (1) Creating uinput device 'Keymapper' Updating device list Grabbing device event8 'Razer Razer Naga 2014' Grabbing device event20 'Razer Razer BlackWidow Ultimate 2013' Entering update loop Received contexts (1) Received contexts (1) Connection to keymapper reset Ungrabbing device event8 Ungrabbing device event20 --------------- Waiting for keymapper to connect Creating uinput device 'Keymapper' Updating device list Grabbing device event8 'Razer Razer Naga 2014' Grabbing device event20 'Razer Razer BlackWidow Ultimate 2013' Entering update loop Received configuration Mouse usage in configuration changed Received contexts (1) Received contexts (1) Received contexts (1) Connection to keymapper reset Ungrabbing device event8 Ungrabbing device event20 --------------- Waiting for keymapper to connect Received configuration Received contexts (1) Creating uinput device 'Keymapper' Updating device list Grabbing device event3 'Razer Razer Naga 2014' Grabbing device event8 'Razer Razer Naga 2014' Grabbing device event20 'Razer Razer BlackWidow Ultimate 2013' Grabbing device event21 'Razer Razer BlackWidow Ultimate 2013' Entering update loop Received contexts (1) Connection to keymapper reset Ungrabbing device event3 Ungrabbing device event8 Ungrabbing device event20 Ungrabbing device event21 --------------- Waiting for keymapper to connect ```
`keymapper --verbose` Without any mouse key mappings ``` Loading configuration file '/home/gerard/keymapper.conf' Connecting to keymapperd Sending configuration Initializing focused window detection Initialized X11 focused window detection Initialized D-BUS focused window detection Entering update loop Detected focused window changed: class = 'konsole' title = '~ : bash — Konsole' Detected focused window changed: class = 'konsole' title = '~ : keymapper — Konsole' ```
`keymapper --verbose` With mouse key mappings ``` Loading configuration file '/home/gerard/keymapper.conf' Connecting to keymapperd Sending configuration Initializing focused window detection Initialized X11 focused window detection Initialized D-BUS focused window detection Entering update loop Detected focused window changed: class = 'konsole' title = '~ : bash — Konsole' Detected focused window changed: class = 'konsole' title = '~ : keymapper — Konsole' Connection to keymapperd lost --------------- Connecting to keymapperd Sending configuration Initializing focused window detection Initialized X11 focused window detection Initialized D-BUS focused window detection Entering update loop Detected focused window changed: class = 'konsole' title = '~ : keymapper — Konsole' ```
niwla23 commented 2 years ago

Sorry, completly forgot about this issue. I can confirm this is a Razer problem. The razerkbd driver from openrazer cause the issue. When unloading it (rmmod razerkbd) the keymapper works fine.

G-M0N3Y-2503 commented 2 years ago

Maybe I could also get my hands on such a device and implement it properly. This would likely fix this issue.

After further investigation, I believe that this would fix this issue (at least in my case). Also, It looks like Xbox 360 controllers have functioning EV_ABS inputs if you're looking for just any device.

For completeness, I believe it would also be possible to remove EV_ABS for a device when using razerkbd. But my understanding is that for most devices "reasonable" defaults are used, so every razer keyboard that doesn't have a volume dial or something would need to be added individually.

niwla23 commented 2 years ago

Is it also possible that this should be fixed on openrazers side? I don't know if this is clear, but razerkbd is an inofficial driver from openrazer. AFAIK it should only control RGB, I don't know why it is messing with keystrokes

G-M0N3Y-2503 commented 1 year ago

From what I know, Typically openrazer just handles RGB and passes through the rest essentially. However, In some cases, it can do more elaborate stuff like map the mouse wheel tilt to scroll horizontally. Only briefly looking into it it looks like the part that is messing with keymapper should only occur for keyboards that have something like a volume wheel. In my case with my keyboard that doesn't have this wheel, it could be a bug in openrazer that maps the wrong part, or Razers firmware could just be enabling stuff it doesn't actually use on my keyboard.

So it's possible, but some keyboards do appear to use the part that messes with keymapper validly, so this bug here would exist in that case.

houmain commented 1 year ago

@G-M0N3Y-2503 thanks for the clarification. I also think that openrazer simply announces the functionality of all potential devices, which is usually not a problem. Soon I will try to make the virtual keymapper device announce the EV_ABS events of all grabbed devices and forward these input events. I have a Wacom tablet, which also has such inputs, so I should be able to properly test it.