HactarCE / key-names

Platform-aware keyboard key name handling for Rust applications
Apache License 2.0
5 stars 5 forks source link

Mapping assumes XKB scancodes, but is supposed to use evdev scancodes #5

Closed picuber closed 1 year ago

picuber commented 1 year ago

OS: Arch Linux x86_64 Kernel: 6.0.5-arch1-1 locale: en_US.UTF-8 Keyboard layout: UK Dvorak (setxkbmap gb dvorak caps:escape ) X.Org version: 21.1.4

It seems to produce the wrong mapping on my system. I've also tried it with other keyboard layouts, and setting the X11 Layout with localectl, but it still generates a (albeit a different) wrong mapping.

Output of localectl status:

System Locale: LANG=en_US.UTF-8
    VC Keymap: dvorak-uk
   X11 Layout: (unset)

Output of cargo run --example all_keys:

    Finished dev [unoptimized + debuginfo] target(s) in 0.04s
     Running `target/debug/examples/all_keys`
                         Abort -> "Abort"
                         Again -> "KP_Decimal"
                       AltLeft -> "X"
                      AltRight -> "Henkan_Mode"
                     ArrowDown -> "ISO_Level3_Shift"
                     ArrowLeft -> "Control_R"
                    ArrowRight -> "KP_Divide"
                       ArrowUp -> "NoSymbol"
               AudioVolumeDown -> "Right"
               AudioVolumeMute -> "Left"
                 AudioVolumeUp -> "End"
                     Backquote -> "U"
                     Backslash -> "D"
                     Backspace -> "5"
                   BracketLeft -> "period"
                  BracketRight -> "P"
                BrightnessDown -> "XF86Messenger"
                  BrightnessUp -> "XF86Search"
                   BrowserBack -> "XF86WWW"
              BrowserFavorites -> "XF86Launch1"
                BrowserForward -> "XF86DOS"
                   BrowserHome -> "XF86AudioPlay"
                BrowserRefresh -> "XF86AudioPrev"
                 BrowserSearch -> "NoSymbol"
                   BrowserStop -> "XF86LaunchA"
                      CapsLock -> "M"
                         Comma -> "numbersign"
                   ContextMenu -> "Pause"
                   ControlLeft -> "F"
                  ControlRight -> "NoSymbol"
                       Convert -> "ISO_Level3_Shift"
                          Copy -> "Super_L"
                           Cut -> "Redo"
                        Delete -> "Up"
                        Digit0 -> "2"
                        Digit1 -> "NoSymbol"
                        Digit2 -> "NoSymbol"
                        Digit3 -> "NoSymbol"
                        Digit4 -> "NoSymbol"
                        Digit5 -> "NoSymbol"
                        Digit6 -> "NoSymbol"
                        Digit7 -> "NoSymbol"
                        Digit8 -> "Escape"
                        Digit9 -> "1"
           DisplayToggleIntExt -> "XF86Finance"
                         Eject -> "XF86RotateWindows"
                           End -> "Multi_key"
                         Enter -> "Y"
                         Equal -> "4"
                        Escape -> "NoSymbol"
                            F1 -> "W"
                           F10 -> "F2"
                           F11 -> "KP_End"
                           F12 -> "KP_Down"
                           F13 -> "NoSymbol"
                           F14 -> "NoSymbol"
                           F15 -> "XF86ScrollUp"
                           F16 -> "XF86ScrollDown"
                           F17 -> "parenleft"
                           F18 -> "parenright"
                           F19 -> "XF86New"
                            F2 -> "V"
                           F20 -> "Redo"
                           F21 -> "XF86Tools"
                           F22 -> "XF86Launch5"
                           F23 -> "XF86Launch6"
                           F24 -> "XF86Launch7"
                            F3 -> "Z"
                            F4 -> "Shift_R"
                            F5 -> "KP_Multiply"
                            F6 -> "Alt_L"
                            F7 -> "space"
                            F8 -> "Escape"
                            F9 -> "F1"
                          Find -> "Cancel"
                            Fn -> "Fn"
                        FnLock -> "FnLock"
                          Help -> "SunProps"
                          Home -> "Muhenkan"
                         Hyper -> "Hyper"
                        Insert -> "Home"
                 IntlBackslash -> "KP_Add"
                      IntlHash -> "IntlHash"
                        IntlRo -> "KP_Next"
                       IntlYen -> "XF86PowerOff"
                      KanaMode -> "NoSymbol"
                          KeyA -> "G"
                          KeyB -> "minus"
                          KeyC -> "N"
                          KeyD -> "R"
                          KeyE -> "9"
                          KeyF -> "L"
                          KeyG -> "slash"
                          KeyH -> "equal"
                          KeyI -> "Tab"
                          KeyJ -> "Return"
                          KeyK -> "Control_L"
                          KeyL -> "A"
                          KeyM -> "Shift_L"
                          KeyN -> "grave"
                          KeyO -> "apostrophe"
                          KeyP -> "comma"
                          KeyQ -> "7"
                          KeyR -> "0"
                          KeyS -> "C"
                          KeyT -> "bracketleft"
                          KeyU -> "BackSpace"
                          KeyV -> "S"
                          KeyW -> "8"
                          KeyX -> "T"
                          KeyY -> "bracketright"
                          KeyZ -> "H"
          KeyboardLayoutSelect -> "NoSymbol"
                         Lang1 -> "XF86AudioLowerVolume"
                         Lang2 -> "XF86AudioRaiseVolume"
                         Lang3 -> "KP_Insert"
                         Lang4 -> "KP_Delete"
                         Lang5 -> "KP_Right"
                    LaunchApp1 -> "Find"
                    LaunchApp2 -> "SunFront"
               LaunchAssistant -> "NoSymbol"
            LaunchControlPanel -> "NoSymbol"
                    LaunchMail -> "XF86Xfer"
             LaunchScreenSaver -> "NoSymbol"
                   MailForward -> "XF86MonBrightnessUp"
                     MailReply -> "XF86MonBrightnessDown"
                      MailSend -> "Cancel"
              MediaFastForward -> "XF86AudioPlay"
                     MediaPlay -> "NoSymbol"
                MediaPlayPause -> "XF86Favorites"
                   MediaRecord -> "XF86Forward"
                   MediaRewind -> "NoSymbol"
                   MediaSelect -> "XF86AudioNext"
                     MediaStop -> "XF86Back"
                MediaTrackNext -> "XF86Mail"
            MediaTrackPrevious -> "XF86MyComputer"
                      MetaLeft -> "KP_Equal"
                     MetaRight -> "plusminus"
                         Minus -> "3"
                    NonConvert -> "backslash"
                       NumLock -> "F3"
                       Numpad0 -> "KP_Subtract"
                       Numpad1 -> "KP_Home"
                       Numpad2 -> "KP_Up"
                       Numpad3 -> "KP_Prior"
                       Numpad4 -> "F9"
                       Numpad5 -> "F10"
                       Numpad6 -> "Num_Lock"
                       Numpad7 -> "F5"
                       Numpad8 -> "F6"
                       Numpad9 -> "F7"
                     NumpadAdd -> "Scroll_Lock"
               NumpadBackspace -> "NumpadBackspace"
                   NumpadClear -> "NumpadClear"
              NumpadClearEntry -> "NumpadClearEntry"
                   NumpadComma -> "XF86AudioMute"
                 NumpadDecimal -> "KP_Left"
                  NumpadDivide -> "Katakana"
                   NumpadEnter -> "F12"
                   NumpadEqual -> "Next"
               NumpadMemoryAdd -> "NumpadMemoryAdd"
             NumpadMemoryClear -> "NumpadMemoryClear"
            NumpadMemoryRecall -> "NumpadMemoryRecall"
             NumpadMemoryStore -> "NumpadMemoryStore"
          NumpadMemorySubtract -> "NumpadMemorySubtract"
                NumpadMultiply -> "K"
               NumpadParenLeft -> "XF86Tools"
              NumpadParenRight -> "XF86HomePage"
                NumpadSubtract -> "F8"
                          Open -> "Super_R"
                      PageDown -> "Linefeed"
                        PageUp -> "KP_Enter"
                         Paste -> "Menu"
                         Pause -> "Delete"
                        Period -> "semicolon"
                         Power -> "Down"
                   PrintScreen -> "Hiragana"
                         Props -> "Props"
                         Quote -> "E"
                        Resume -> "Resume"
                    ScrollLock -> "F4"
                        Select -> "NoSymbol"
                    SelectTask -> "NoSymbol"
                     Semicolon -> "O"
                     ShiftLeft -> "I"
                    ShiftRight -> "J"
                ShowAllWindows -> "NoSymbol"
                         Slash -> "Q"
                         Sleep -> "XF86Open"
                         Space -> "B"
                         Super -> "Super"
                       Suspend -> "Suspend"
                           Tab -> "6"
                         Turbo -> "Turbo"
                          Undo -> "Hangul_Hanja"
                        WakeUp -> "XF86Paste"
                    ZoomToggle -> "NoSymbol"

Modifiers: Ctrl + Shift + Alt + Super + <key>
HactarCE commented 1 year ago

Oh geez, that output is a mess. Thank you for reporting! I'm curious whenever v1.2.0 produces the correct output?

picuber commented 1 year ago

(sry for the late reply, I couldn't get to my mashine for a bit)

I've tried it out with v1.2.0, and it seems to work. It's still garbled, but it's consistent with dvorak <-> querty (which I assume is the intented functionality)

With dvorak layout ``` Compiling key-names v1.2.0 (/home/picuber/opt/key-names) Finished dev [unoptimized + debuginfo] target(s) in 2.09s Running `target/debug/examples/all_keys` Abort -> "Abort" Again -> "Redo" AltLeft -> "Alt_L" AltRight -> "ISO_Level3_Shift" ArrowDown -> "Down" ArrowLeft -> "Left" ArrowRight -> "Right" ArrowUp -> "Up" AudioVolumeDown -> "XF86AudioLowerVolume" AudioVolumeMute -> "XF86AudioMute" AudioVolumeUp -> "XF86AudioRaiseVolume" Backquote -> "grave" Backslash -> "numbersign" Backspace -> "BackSpace" BracketLeft -> "slash" BracketRight -> "equal" BrightnessDown -> "XF86MonBrightnessDown" BrightnessUp -> "XF86MonBrightnessUp" BrowserBack -> "XF86Back" BrowserFavorites -> "XF86Favorites" BrowserForward -> "XF86Forward" BrowserHome -> "XF86HomePage" BrowserRefresh -> "XF86Reload" BrowserSearch -> "XF86Search" BrowserStop -> "Cancel" CapsLock -> "Escape" Comma -> "W" ContextMenu -> "Menu" ControlLeft -> "Control_L" ControlRight -> "Control_R" Convert -> "Henkan_Mode" Copy -> "XF86Copy" Cut -> "XF86Cut" Delete -> "Delete" Digit0 -> "0" Digit1 -> "1" Digit2 -> "2" Digit3 -> "3" Digit4 -> "4" Digit5 -> "5" Digit6 -> "6" Digit7 -> "7" Digit8 -> "8" Digit9 -> "9" DisplayToggleIntExt -> "XF86Display" Eject -> "XF86Eject" End -> "End" Enter -> "Return" Equal -> "bracketright" Escape -> "Escape" F1 -> "F1" F10 -> "F10" F11 -> "F11" F12 -> "F12" F13 -> "XF86Tools" F14 -> "XF86Launch5" F15 -> "XF86Launch6" F16 -> "XF86Launch7" F17 -> "XF86Launch8" F18 -> "XF86Launch9" F19 -> "NoSymbol" F2 -> "F2" F20 -> "XF86AudioMicMute" F21 -> "XF86TouchpadToggle" F22 -> "XF86TouchpadOn" F23 -> "XF86TouchpadOff" F24 -> "NoSymbol" F3 -> "F3" F4 -> "F4" F5 -> "F5" F6 -> "F6" F7 -> "F7" F8 -> "F8" F9 -> "F9" Find -> "Find" Fn -> "Fn" FnLock -> "FnLock" Help -> "Help" Home -> "Home" Hyper -> "Hyper" Insert -> "Insert" IntlBackslash -> "backslash" IntlHash -> "IntlHash" IntlRo -> "NoSymbol" IntlYen -> "NoSymbol" KanaMode -> "Hiragana_Katakana" KeyA -> "A" KeyB -> "X" KeyC -> "J" KeyD -> "E" KeyE -> "period" KeyF -> "U" KeyG -> "I" KeyH -> "D" KeyI -> "C" KeyJ -> "H" KeyK -> "T" KeyL -> "N" KeyM -> "M" KeyN -> "B" KeyO -> "R" KeyP -> "L" KeyQ -> "apostrophe" KeyR -> "P" KeyS -> "O" KeyT -> "Y" KeyU -> "G" KeyV -> "K" KeyW -> "comma" KeyX -> "Q" KeyY -> "F" KeyZ -> "semicolon" KeyboardLayoutSelect -> "NoSymbol" Lang1 -> "Hangul" Lang2 -> "Hangul_Hanja" Lang3 -> "Katakana" Lang4 -> "Hiragana" Lang5 -> "NoSymbol" LaunchApp1 -> "XF86Explorer" LaunchApp2 -> "XF86Calculator" LaunchAssistant -> "NoSymbol" LaunchControlPanel -> "NoSymbol" LaunchMail -> "XF86Mail" LaunchScreenSaver -> "NoSymbol" MailForward -> "XF86MailForward" MailReply -> "XF86Reply" MailSend -> "XF86Send" MediaFastForward -> "XF86AudioForward" MediaPlay -> "XF86AudioPlay" MediaPlayPause -> "XF86AudioPlay" MediaRecord -> "XF86AudioRecord" MediaRewind -> "XF86AudioRewind" MediaSelect -> "XF86Tools" MediaStop -> "XF86AudioStop" MediaTrackNext -> "XF86AudioNext" MediaTrackPrevious -> "XF86AudioPrev" MetaLeft -> "Super_L" MetaRight -> "Super_R" Minus -> "bracketleft" NonConvert -> "Muhenkan" NumLock -> "Num_Lock" Numpad0 -> "KP_Insert" Numpad1 -> "KP_End" Numpad2 -> "KP_Down" Numpad3 -> "KP_Next" Numpad4 -> "KP_Left" Numpad5 -> "KP_Begin" Numpad6 -> "KP_Right" Numpad7 -> "KP_Home" Numpad8 -> "KP_Up" Numpad9 -> "KP_Prior" NumpadAdd -> "KP_Add" NumpadBackspace -> "NumpadBackspace" NumpadClear -> "NumpadClear" NumpadClearEntry -> "NumpadClearEntry" NumpadComma -> "KP_Decimal" NumpadDecimal -> "KP_Delete" NumpadDivide -> "KP_Divide" NumpadEnter -> "KP_Enter" NumpadEqual -> "KP_Equal" NumpadMemoryAdd -> "NumpadMemoryAdd" NumpadMemoryClear -> "NumpadMemoryClear" NumpadMemoryRecall -> "NumpadMemoryRecall" NumpadMemoryStore -> "NumpadMemoryStore" NumpadMemorySubtract -> "NumpadMemorySubtract" NumpadMultiply -> "KP_Multiply" NumpadParenLeft -> "parenleft" NumpadParenRight -> "parenright" NumpadSubtract -> "KP_Subtract" Open -> "XF86Open" PageDown -> "Next" PageUp -> "Prior" Paste -> "XF86Paste" Pause -> "Pause" Period -> "V" Power -> "XF86PowerOff" PrintScreen -> "Multi_key" Props -> "Props" Quote -> "minus" Resume -> "Resume" ScrollLock -> "Scroll_Lock" Select -> "SunFront" SelectTask -> "NoSymbol" Semicolon -> "S" ShiftLeft -> "Shift_L" ShiftRight -> "Shift_R" ShowAllWindows -> "XF86LaunchA" Slash -> "Z" Sleep -> "XF86Sleep" Space -> "space" Super -> "Super" Suspend -> "Suspend" Tab -> "Tab" Turbo -> "Turbo" Undo -> "Undo" WakeUp -> "XF86WakeUp" ZoomToggle -> "NoSymbol" Modifiers: Ctrl + Shift + Alt + Super + ```
With querty layout ``` Finished dev [unoptimized + debuginfo] target(s) in 0.04s Running `target/debug/examples/all_keys` Abort -> "Abort" Again -> "Redo" AltLeft -> "Alt_L" AltRight -> "ISO_Level3_Shift" ArrowDown -> "Down" ArrowLeft -> "Left" ArrowRight -> "Right" ArrowUp -> "Up" AudioVolumeDown -> "XF86AudioLowerVolume" AudioVolumeMute -> "XF86AudioMute" AudioVolumeUp -> "XF86AudioRaiseVolume" Backquote -> "grave" Backslash -> "numbersign" Backspace -> "BackSpace" BracketLeft -> "bracketleft" BracketRight -> "bracketright" BrightnessDown -> "XF86MonBrightnessDown" BrightnessUp -> "XF86MonBrightnessUp" BrowserBack -> "XF86Back" BrowserFavorites -> "XF86Favorites" BrowserForward -> "XF86Forward" BrowserHome -> "XF86HomePage" BrowserRefresh -> "XF86Reload" BrowserSearch -> "XF86Search" BrowserStop -> "Cancel" CapsLock -> "Escape" Comma -> "comma" ContextMenu -> "Menu" ControlLeft -> "Control_L" ControlRight -> "Control_R" Convert -> "Henkan_Mode" Copy -> "XF86Copy" Cut -> "XF86Cut" Delete -> "Delete" Digit0 -> "0" Digit1 -> "1" Digit2 -> "2" Digit3 -> "3" Digit4 -> "4" Digit5 -> "5" Digit6 -> "6" Digit7 -> "7" Digit8 -> "8" Digit9 -> "9" DisplayToggleIntExt -> "XF86Display" Eject -> "XF86Eject" End -> "End" Enter -> "Return" Equal -> "equal" Escape -> "Escape" F1 -> "F1" F10 -> "F10" F11 -> "F11" F12 -> "F12" F13 -> "XF86Tools" F14 -> "XF86Launch5" F15 -> "XF86Launch6" F16 -> "XF86Launch7" F17 -> "XF86Launch8" F18 -> "XF86Launch9" F19 -> "NoSymbol" F2 -> "F2" F20 -> "XF86AudioMicMute" F21 -> "XF86TouchpadToggle" F22 -> "XF86TouchpadOn" F23 -> "XF86TouchpadOff" F24 -> "NoSymbol" F3 -> "F3" F4 -> "F4" F5 -> "F5" F6 -> "F6" F7 -> "F7" F8 -> "F8" F9 -> "F9" Find -> "Find" Fn -> "Fn" FnLock -> "FnLock" Help -> "Help" Home -> "Home" Hyper -> "Hyper" Insert -> "Insert" IntlBackslash -> "backslash" IntlHash -> "IntlHash" IntlRo -> "NoSymbol" IntlYen -> "NoSymbol" KanaMode -> "Hiragana_Katakana" KeyA -> "A" KeyB -> "B" KeyC -> "C" KeyD -> "D" KeyE -> "E" KeyF -> "F" KeyG -> "G" KeyH -> "H" KeyI -> "I" KeyJ -> "J" KeyK -> "K" KeyL -> "L" KeyM -> "M" KeyN -> "N" KeyO -> "O" KeyP -> "P" KeyQ -> "Q" KeyR -> "R" KeyS -> "S" KeyT -> "T" KeyU -> "U" KeyV -> "V" KeyW -> "W" KeyX -> "X" KeyY -> "Y" KeyZ -> "Z" KeyboardLayoutSelect -> "NoSymbol" Lang1 -> "Hangul" Lang2 -> "Hangul_Hanja" Lang3 -> "Katakana" Lang4 -> "Hiragana" Lang5 -> "NoSymbol" LaunchApp1 -> "XF86Explorer" LaunchApp2 -> "XF86Calculator" LaunchAssistant -> "NoSymbol" LaunchControlPanel -> "NoSymbol" LaunchMail -> "XF86Mail" LaunchScreenSaver -> "NoSymbol" MailForward -> "XF86MailForward" MailReply -> "XF86Reply" MailSend -> "XF86Send" MediaFastForward -> "XF86AudioForward" MediaPlay -> "XF86AudioPlay" MediaPlayPause -> "XF86AudioPlay" MediaRecord -> "XF86AudioRecord" MediaRewind -> "XF86AudioRewind" MediaSelect -> "XF86Tools" MediaStop -> "XF86AudioStop" MediaTrackNext -> "XF86AudioNext" MediaTrackPrevious -> "XF86AudioPrev" MetaLeft -> "Super_L" MetaRight -> "Super_R" Minus -> "minus" NonConvert -> "Muhenkan" NumLock -> "Num_Lock" Numpad0 -> "KP_Insert" Numpad1 -> "KP_End" Numpad2 -> "KP_Down" Numpad3 -> "KP_Next" Numpad4 -> "KP_Left" Numpad5 -> "KP_Begin" Numpad6 -> "KP_Right" Numpad7 -> "KP_Home" Numpad8 -> "KP_Up" Numpad9 -> "KP_Prior" NumpadAdd -> "KP_Add" NumpadBackspace -> "NumpadBackspace" NumpadClear -> "NumpadClear" NumpadClearEntry -> "NumpadClearEntry" NumpadComma -> "KP_Decimal" NumpadDecimal -> "KP_Delete" NumpadDivide -> "KP_Divide" NumpadEnter -> "KP_Enter" NumpadEqual -> "KP_Equal" NumpadMemoryAdd -> "NumpadMemoryAdd" NumpadMemoryClear -> "NumpadMemoryClear" NumpadMemoryRecall -> "NumpadMemoryRecall" NumpadMemoryStore -> "NumpadMemoryStore" NumpadMemorySubtract -> "NumpadMemorySubtract" NumpadMultiply -> "KP_Multiply" NumpadParenLeft -> "parenleft" NumpadParenRight -> "parenright" NumpadSubtract -> "KP_Subtract" Open -> "XF86Open" PageDown -> "Next" PageUp -> "Prior" Paste -> "XF86Paste" Pause -> "Pause" Period -> "period" Power -> "XF86PowerOff" PrintScreen -> "Print" Props -> "Props" Quote -> "apostrophe" Resume -> "Resume" ScrollLock -> "Scroll_Lock" Select -> "SunFront" SelectTask -> "NoSymbol" Semicolon -> "semicolon" ShiftLeft -> "Shift_L" ShiftRight -> "Shift_R" ShowAllWindows -> "XF86LaunchA" Slash -> "slash" Sleep -> "XF86Sleep" Space -> "space" Super -> "Super" Suspend -> "Suspend" Tab -> "Tab" Turbo -> "Turbo" Undo -> "Undo" WakeUp -> "XF86WakeUp" ZoomToggle -> "NoSymbol" Modifiers: Ctrl + Shift + Alt + Super + ```
With quertz layout ``` Finished dev [unoptimized + debuginfo] target(s) in 0.05s Running `target/debug/examples/all_keys` Abort -> "Abort" Again -> "Redo" AltLeft -> "Alt_L" AltRight -> "ISO_Level3_Shift" ArrowDown -> "Down" ArrowLeft -> "Left" ArrowRight -> "Right" ArrowUp -> "Up" AudioVolumeDown -> "XF86AudioLowerVolume" AudioVolumeMute -> "XF86AudioMute" AudioVolumeUp -> "XF86AudioRaiseVolume" Backquote -> "dead_circumflex" Backslash -> "numbersign" Backspace -> "BackSpace" BracketLeft -> "udiaeresis" BracketRight -> "plus" BrightnessDown -> "XF86MonBrightnessDown" BrightnessUp -> "XF86MonBrightnessUp" BrowserBack -> "XF86Back" BrowserFavorites -> "XF86Favorites" BrowserForward -> "XF86Forward" BrowserHome -> "XF86HomePage" BrowserRefresh -> "XF86Reload" BrowserSearch -> "XF86Search" BrowserStop -> "Cancel" CapsLock -> "Caps_Lock" Comma -> "comma" ContextMenu -> "Menu" ControlLeft -> "Control_L" ControlRight -> "Control_R" Convert -> "Henkan_Mode" Copy -> "XF86Copy" Cut -> "XF86Cut" Delete -> "Delete" Digit0 -> "0" Digit1 -> "1" Digit2 -> "2" Digit3 -> "3" Digit4 -> "4" Digit5 -> "5" Digit6 -> "6" Digit7 -> "7" Digit8 -> "8" Digit9 -> "9" DisplayToggleIntExt -> "XF86Display" Eject -> "XF86Eject" End -> "End" Enter -> "Return" Equal -> "dead_acute" Escape -> "Escape" F1 -> "F1" F10 -> "F10" F11 -> "F11" F12 -> "F12" F13 -> "XF86Tools" F14 -> "XF86Launch5" F15 -> "XF86Launch6" F16 -> "XF86Launch7" F17 -> "XF86Launch8" F18 -> "XF86Launch9" F19 -> "NoSymbol" F2 -> "F2" F20 -> "XF86AudioMicMute" F21 -> "XF86TouchpadToggle" F22 -> "XF86TouchpadOn" F23 -> "XF86TouchpadOff" F24 -> "NoSymbol" F3 -> "F3" F4 -> "F4" F5 -> "F5" F6 -> "F6" F7 -> "F7" F8 -> "F8" F9 -> "F9" Find -> "Find" Fn -> "Fn" FnLock -> "FnLock" Help -> "Help" Home -> "Home" Hyper -> "Hyper" Insert -> "Insert" IntlBackslash -> "less" IntlHash -> "IntlHash" IntlRo -> "NoSymbol" IntlYen -> "NoSymbol" KanaMode -> "Hiragana_Katakana" KeyA -> "A" KeyB -> "B" KeyC -> "C" KeyD -> "D" KeyE -> "E" KeyF -> "F" KeyG -> "G" KeyH -> "H" KeyI -> "I" KeyJ -> "J" KeyK -> "K" KeyL -> "L" KeyM -> "M" KeyN -> "N" KeyO -> "O" KeyP -> "P" KeyQ -> "Q" KeyR -> "R" KeyS -> "S" KeyT -> "T" KeyU -> "U" KeyV -> "V" KeyW -> "W" KeyX -> "X" KeyY -> "Z" KeyZ -> "Y" KeyboardLayoutSelect -> "NoSymbol" Lang1 -> "Hangul" Lang2 -> "Hangul_Hanja" Lang3 -> "Katakana" Lang4 -> "Hiragana" Lang5 -> "NoSymbol" LaunchApp1 -> "XF86Explorer" LaunchApp2 -> "XF86Calculator" LaunchAssistant -> "NoSymbol" LaunchControlPanel -> "NoSymbol" LaunchMail -> "XF86Mail" LaunchScreenSaver -> "NoSymbol" MailForward -> "XF86MailForward" MailReply -> "XF86Reply" MailSend -> "XF86Send" MediaFastForward -> "XF86AudioForward" MediaPlay -> "XF86AudioPlay" MediaPlayPause -> "XF86AudioPlay" MediaRecord -> "XF86AudioRecord" MediaRewind -> "XF86AudioRewind" MediaSelect -> "XF86Tools" MediaStop -> "XF86AudioStop" MediaTrackNext -> "XF86AudioNext" MediaTrackPrevious -> "XF86AudioPrev" MetaLeft -> "Super_L" MetaRight -> "Super_R" Minus -> "ssharp" NonConvert -> "Muhenkan" NumLock -> "Num_Lock" Numpad0 -> "KP_Insert" Numpad1 -> "KP_End" Numpad2 -> "KP_Down" Numpad3 -> "KP_Next" Numpad4 -> "KP_Left" Numpad5 -> "KP_Begin" Numpad6 -> "KP_Right" Numpad7 -> "KP_Home" Numpad8 -> "KP_Up" Numpad9 -> "KP_Prior" NumpadAdd -> "KP_Add" NumpadBackspace -> "NumpadBackspace" NumpadClear -> "NumpadClear" NumpadClearEntry -> "NumpadClearEntry" NumpadComma -> "KP_Decimal" NumpadDecimal -> "KP_Delete" NumpadDivide -> "KP_Divide" NumpadEnter -> "KP_Enter" NumpadEqual -> "KP_Equal" NumpadMemoryAdd -> "NumpadMemoryAdd" NumpadMemoryClear -> "NumpadMemoryClear" NumpadMemoryRecall -> "NumpadMemoryRecall" NumpadMemoryStore -> "NumpadMemoryStore" NumpadMemorySubtract -> "NumpadMemorySubtract" NumpadMultiply -> "KP_Multiply" NumpadParenLeft -> "parenleft" NumpadParenRight -> "parenright" NumpadSubtract -> "KP_Subtract" Open -> "XF86Open" PageDown -> "Next" PageUp -> "Prior" Paste -> "XF86Paste" Pause -> "Pause" Period -> "period" Power -> "XF86PowerOff" PrintScreen -> "Print" Props -> "Props" Quote -> "adiaeresis" Resume -> "Resume" ScrollLock -> "Scroll_Lock" Select -> "SunFront" SelectTask -> "NoSymbol" Semicolon -> "odiaeresis" ShiftLeft -> "Shift_L" ShiftRight -> "Shift_R" ShowAllWindows -> "XF86LaunchA" Slash -> "minus" Sleep -> "XF86Sleep" Space -> "space" Super -> "Super" Suspend -> "Suspend" Tab -> "Tab" Turbo -> "Turbo" Undo -> "Undo" WakeUp -> "XF86WakeUp" ZoomToggle -> "NoSymbol" Modifiers: Ctrl + Shift + Alt + Super + ```

However, when I tried it with Hyperspeedcube (which is where I originally encountered this bug. If I should open a separate issue over there, do tell me), while with v1.3.0 it seems to do the right things but showing me the wrong lables, with v1.2.0 it shows me the right things (according to the selected keyboard layout on startup) it "presses" (according to the keybinds reference showing them) the opposite garbled key.

E.g.: With v1.3.0: I press U (Dvorak = F Querty), it shows it in the correct place, does the right thing (select R face with Default Keybinds), but displays L. With v1.2.0: I press U (Dvorak = F Querty), it shows it in the place of L (Dvorak = P Querty), and also does the thing that is at that position ("yx", rotate in z axis), but correctly displays U.

HactarCE commented 1 year ago

Thank you so much for investigating further! There's a few things going on here:

There are two solutions I can think of:

  1. Find a way to query the keyboard mapping using evdev scancodes. This would be ideal.
  2. Hard-code a mapping between evdev scancodes and XKB scancodes. This is ugly, but would definitely work.

I don't have a Linux install to test this on nor the time to devote to it, but if you want to open a PR doing either of those I would be happy to merge it and include it in the next release of HSC. If not, that's totally understandable.