I would suggest that the G13 is an ideal example of the type of peripheral input-remapper exists to support -- something so unusual that it can't easily be mapped to more common input peripherals.
{
('EV_SYN', 0): [('SYN_REPORT', 0), ('SYN_CONFIG', 1)],
('EV_KEY', 1): [
('KEY_LIGHTS_TOGGLE', 542),
('KEY_MACRO1', 656), ('KEY_MACRO2', 657), ('KEY_MACRO3', 658), ('KEY_MACRO4', 659),
('KEY_MACRO5', 660), ('KEY_MACRO6', 661), ('KEY_MACRO7', 662), ('KEY_MACRO8', 663),
('KEY_MACRO9', 664), ('KEY_MACRO10', 665), ('KEY_MACRO11', 666), ('KEY_MACRO12', 667),
('KEY_MACRO13', 668), ('KEY_MACRO14', 669), ('KEY_MACRO15', 670), ('KEY_MACRO16', 671),
('KEY_MACRO17', 672), ('KEY_MACRO18', 673), ('KEY_MACRO19', 674), ('KEY_MACRO20', 675),
('KEY_MACRO21', 676), ('KEY_MACRO22', 677),
('KEY_MACRO_RECORD_START', 688), ('KEY_MACRO_PRESET1', 691), ('KEY_MACRO_PRESET2', 692), ('KEY_MACRO_PRESET3', 693),
('KEY_KBD_LCD_MENU1', 696), ('KEY_KBD_LCD_MENU2', 697), ('KEY_KBD_LCD_MENU3', 698), ('KEY_KBD_LCD_MENU4', 699), ('KEY_KBD_LCD_MENU5', 700)
]
}
$ input-remapper-gtk -d
20:26:46.234194 3419361 GUI INFO logger.py:104: input-remapper-gtk 2.2.0 https://github.com/sezanzeb/input-remapper
20:26:46.234298 3419361 GUI INFO logger.py:112: python-evdev 1.9.3
20:26:46.234350 3419361 GUI WARNING logger.py:115: Debug level will log all your keystrokes! Do not post this output in the internet if you typed in sensitive or private information with your device!
20:26:46.234394 3419361 GUI DEBUG input_remapper_gtk.py:80: Using locale directory: /usr/share/input-remapper/lang
20:26:46.234755 3419361 GUI INFO paths.py:81: Creating dir "/tmp/input-remapper-/home/ewhac"
20:26:46.234844 3419361 GUI DEBUG paths.py:48: Chown "/tmp/input-remapper-", "ewhac"
20:26:46.234993 3419361 GUI DEBUG paths.py:48: Chown "/tmp/input-remapper-/home", "ewhac"
20:26:46.235090 3419361 GUI DEBUG paths.py:48: Chown "/tmp/input-remapper-/home/ewhac", "ewhac"
20:26:46.235199 3419361 GUI DEBUG pipe.py:70: Creating new pipes ('/tmp/input-remapper-/home/ewhac/reader-resultsr', '/tmp/input-remapper-/home/ewhac/reader-resultsw')
20:26:46.235268 3419361 GUI DEBUG paths.py:48: Chown "/proc/3419361/fd/12", "ewhac"
20:26:46.235353 3419361 GUI DEBUG paths.py:48: Chown "/proc/3419361/fd/13", "ewhac"
20:26:46.235524 3419361 GUI DEBUG pipe.py:70: Creating new pipes ('/tmp/input-remapper-/home/ewhac/reader-commandsr', '/tmp/input-remapper-/home/ewhac/reader-commandsw')
20:26:46.235587 3419361 GUI DEBUG paths.py:48: Chown "/proc/3419361/fd/16", "ewhac"
20:26:46.235669 3419361 GUI DEBUG paths.py:48: Chown "/proc/3419361/fd/17", "ewhac"
20:26:46.235854 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.terminate: <function ReaderClient.attach_to_events.<locals>.<lambda> at 0x7f84ea359080>
20:26:46.281607 3419361 GUI DEBUG reader_service.py:155: Running `pkexec input-remapper-control --command start-reader-service -d`
20:26:53.130281 3419388 control DEBUG input_remapper_control.py:94: Call for "['/usr/bin/input-remapper-control', '--command', 'start-reader-service', '-d']"
20:26:53.141875 3419388 control DEBUG input_remapper_control.py:330: System is booted
20:26:53.141969 3419388 control DEBUG input_remapper_control.py:294: Running `input-remapper-reader-service -d &`
20:26:53.143518 3419388 control INFO input_remapper_control.py:136: Done
20:26:53.182589 3419361 GUI INFO daemon.py:246: Starting the service
20:26:53.182675 3419361 GUI DEBUG daemon.py:257: Running `pkexec input-remapper-control --command start-daemon -d`
20:26:53.444793 3419561 reader-service DEBUG pipe.py:87: Using existing pipes ('/tmp/input-remapper-/home/ewhac/reader-resultsr', '/tmp/input-remapper-/home/ewhac/reader-resultsw')
20:26:53.444986 3419561 reader-service DEBUG pipe.py:87: Using existing pipes ('/tmp/input-remapper-/home/ewhac/reader-commandsr', '/tmp/input-remapper-/home/ewhac/reader-commandsw')
20:26:53.445392 3419561 reader-service DEBUG reader_service.py:165: Discovering initial groups
20:26:53.446025 3419561 reader-service DEBUG groups.py:353: Discovering device paths
20:26:53.446952 3419561 reader-service DEBUG groups.py:403: Found gamepad "SpaceTec SpaceBall 4000FLX Lefty" at "/dev/input/event6", hash "5dfe3766e369d1bdf49ab45c47645dd6", key "19_27_9__ttyUSB0"
20:26:53.499829 3419561 reader-service DEBUG groups.py:403: Found mouse "ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM" at "/dev/input/event5", hash "7b9ae06eaec522afbe3ff081941e062f", key "3_6940_7051__-"
20:26:53.531914 3419561 reader-service DEBUG groups.py:403: Found keyboard "ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vKB" at "/dev/input/event4", hash "73caf6ea0c8db1152d8e54b3d18ac484", key "3_6940_7051__-"
20:26:53.563648 3419561 reader-service DEBUG groups.py:403: Found mouse "ckb1: Corsair K95 RGB Gaming Keyboard vM" at "/dev/input/event3", hash "f20c8dc46f3725e123389a26b02dfaf6", key "3_6940_6929__-"
20:26:53.595873 3419561 reader-service DEBUG groups.py:403: Found keyboard "ckb1: Corsair K95 RGB Gaming Keyboard vKB" at "/dev/input/event2", hash "ae45da95d313c33bb8e5689344c515dd", key "3_6940_6929__-"
20:26:53.631683 3419561 reader-service DEBUG groups.py:396: "Eee PC WMI hotkeys" is denylisted
20:26:53.671568 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Front Headphone" has no useful capabilities
20:26:53.731582 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Line Out CLFE" has no useful capabilities
20:26:53.799574 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Line Out Surround" has no useful capabilities
20:26:53.839573 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Line Out Front" has no useful capabilities
20:26:53.915585 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Line" has no useful capabilities
20:26:53.975577 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Front Mic" has no useful capabilities
20:26:54.027548 3419561 reader-service DEBUG groups.py:392: "HDA Intel PCH Rear Mic" has no useful capabilities
20:26:54.071546 3419561 reader-service DEBUG groups.py:392: "HDA Digital PCBeep" has no useful capabilities
20:26:54.119536 3419561 reader-service DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=9" has no useful capabilities
20:26:54.171547 3419561 reader-service DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=8" has no useful capabilities
20:26:54.211537 3419561 reader-service DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=7" has no useful capabilities
20:26:54.251547 3419561 reader-service DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=3" has no useful capabilities
20:26:54.287575 3419561 reader-service DEBUG groups.py:392: "PC Speaker" has no useful capabilities
20:26:54.315628 3419561 reader-service DEBUG groups.py:403: Found gamepad "Logitech G13 Thumbstick" at "/dev/input/event12", hash "280fe2071146336f50ebfc14aaa843d3", key "3_1133_49692__usb-0000:00:14.0-5"
20:26:54.347639 3419561 reader-service DEBUG groups.py:403: Found unknown "Logitech G13 Gaming Keypad" at "/dev/input/event11", hash "122b094dd73b36f77809e6a0307c0a01", key "3_1133_49692__usb-0000:00:14.0-5"
20:26:54.379949 3419561 reader-service INFO groups.py:482: Found "SpaceTec SpaceBall 4000FLX Lefty", "ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM", "ckb1: Corsair K95 RGB Gaming Keyboard vM", "Logitech G13 Thumbstick"
20:26:54.380048 3419561 reader-service DEBUG reader_service.py:176: Sending groups
20:26:54.380247 3419561 reader-service DEBUG reader_service.py:208: Waiting for commands
20:26:58.437885 3419563 control DEBUG input_remapper_control.py:94: Call for "['/usr/bin/input-remapper-control', '--command', 'start-daemon', '-d']"
20:26:58.449574 3419563 control DEBUG input_remapper_control.py:330: System is booted
20:26:58.449657 3419563 control DEBUG input_remapper_control.py:294: Running `input-remapper-service --hide-info -d &`
20:26:58.451153 3419563 control INFO input_remapper_control.py:136: Done
20:26:58.684804 3419361 GUI DEBUG daemon.py:267: Attempt 1 to reach the service failed:
20:26:58.685022 3419361 GUI DEBUG daemon.py:268: "g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name inputremapper.Control was not provided by any .service files (2)"
20:26:58.747869 3419697 service DEBUG daemon.py:200: Creating daemon
20:26:58.748463 3419697 service INFO global_config.py:117: Loaded config from "/home/ewhac/.config/input-remapper-2/config.json"
20:26:58.748584 3419697 service DEBUG shared_dict.py:57: Starting SharedDict process
20:26:58.754062 3419705 service DEBUG shared_dict.py:63: SharedDict process started
20:26:58.759191 3419697 service DEBUG daemon.py:293: Running daemon
20:26:58.886490 3419361 GUI DEBUG daemon.py:276: Telling service about "/home/ewhac/.config/input-remapper-2"
20:26:58.887826 3419697 service INFO global_config.py:117: Loaded config from "/home/ewhac/.config/input-remapper-2/config.json"
20:26:58.888159 3419361 GUI DEBUG global_uinputs.py:91: creating fake UInput device: "input-remapper keyboard"
20:26:58.888236 3419361 GUI DEBUG global_uinputs.py:91: creating fake UInput device: "input-remapper gamepad"
20:26:58.888289 3419361 GUI DEBUG global_uinputs.py:91: creating fake UInput device: "input-remapper mouse"
20:26:58.888335 3419361 GUI DEBUG global_uinputs.py:91: creating fake UInput device: "input-remapper keyboard + mouse"
20:26:58.888457 3419361 GUI INFO global_config.py:117: Loaded config from "/home/ewhac/.config/input-remapper-2/config.json"
20:26:58.888530 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.groups: <bound method Controller._on_groups_changed of <inputremapper.gui.controller.Controller object at 0x7f84ce69d400>>
20:26:58.888588 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method Controller._on_preset_changed of <inputremapper.gui.controller.Controller object at 0x7f84ce69d400>>
20:26:58.888635 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.init: <bound method Controller._on_init of <inputremapper.gui.controller.Controller object at 0x7f84ce69d400>>
20:26:58.888690 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method Controller._publish_mapping_errors_as_status_msg of <inputremapper.gui.controller.Controller object at 0x7f84ce69d400>>
20:26:58.888735 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method Controller._publish_mapping_errors_as_status_msg of <inputremapper.gui.controller.Controller object at 0x7f84ce69d400>>
20:26:58.889127 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.terminate: <function UserInterface.__init__.<locals>.<lambda> at 0x7f84ce6b04a0>
20:26:59.068661 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.groups: <bound method DeviceGroupSelection._on_groups_changed of <inputremapper.gui.components.device_groups.DeviceGroupSelection object at 0x7f84ce78fe00>>
20:26:59.068797 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.group: <bound method DeviceGroupSelection._on_group_changed of <inputremapper.gui.components.device_groups.DeviceGroupSelection object at 0x7f84ce78fe00>>
20:26:59.068891 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.group: <bound method PresetSelection._on_group_changed of <inputremapper.gui.components.presets.PresetSelection object at 0x7f84ce69c050>>
20:26:59.068950 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method PresetSelection._on_preset_changed of <inputremapper.gui.components.presets.PresetSelection object at 0x7f84ce69c050>>
20:26:59.069307 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method MappingListBox._on_preset_changed of <inputremapper.gui.components.editor.MappingListBox object at 0x7f84ce69d6a0>>
20:26:59.069374 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method MappingListBox._on_mapping_changed of <inputremapper.gui.components.editor.MappingListBox object at 0x7f84ce69d6a0>>
20:26:59.069458 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.uinputs: <bound method TargetSelection._on_uinputs_changed of <inputremapper.gui.components.editor.TargetSelection object at 0x7f84ce69d7f0>>
20:26:59.069511 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method TargetSelection._on_mapping_loaded of <inputremapper.gui.components.editor.TargetSelection object at 0x7f84ce69d7f0>>
20:26:59.069589 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.group: <bound method Breadcrumbs._on_group_changed of <inputremapper.gui.components.common.Breadcrumbs object at 0x7f84ce69d940>>
20:26:59.069639 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method Breadcrumbs._on_preset_changed of <inputremapper.gui.components.common.Breadcrumbs object at 0x7f84ce69d940>>
20:26:59.069684 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method Breadcrumbs._on_mapping_changed of <inputremapper.gui.components.common.Breadcrumbs object at 0x7f84ce69d940>>
20:26:59.070018 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.group: <bound method Breadcrumbs._on_group_changed of <inputremapper.gui.components.common.Breadcrumbs object at 0x7f84ce7a6fd0>>
20:26:59.070081 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method Breadcrumbs._on_preset_changed of <inputremapper.gui.components.common.Breadcrumbs object at 0x7f84ce7a6fd0>>
20:26:59.070128 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method Breadcrumbs._on_mapping_changed of <inputremapper.gui.components.common.Breadcrumbs object at 0x7f84ce7a6fd0>>
20:26:59.070410 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.do_stack_switch: <bound method Stack._do_stack_switch of <inputremapper.gui.components.main.Stack object at 0x7f84ce69da90>>
20:26:59.070534 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.recording_finished: <bound method RecordingToggle._on_recording_finished of <inputremapper.gui.components.editor.RecordingToggle object at 0x7f84ce69dbe0>>
20:26:59.070635 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method RequireActiveMapping._on_preset of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce69dd30>>
20:26:59.070689 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method RequireActiveMapping._on_mapping of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce69dd30>>
20:26:59.071590 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.status_msg: <bound method StatusBar._on_status_update of <inputremapper.gui.components.main.StatusBar object at 0x7f84ce69de80>>
20:26:59.071685 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.recording_started: <bound method RecordingStatus._on_recording_started of <inputremapper.gui.components.editor.RecordingStatus object at 0x7f84ce69dfd0>>
20:26:59.071750 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.recording_finished: <bound method RecordingStatus._on_recording_finished of <inputremapper.gui.components.editor.RecordingStatus object at 0x7f84ce69dfd0>>
20:26:59.072146 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method AutoloadSwitch._on_preset_changed of <inputremapper.gui.components.editor.AutoloadSwitch object at 0x7f84ce69e120>>
20:26:59.072273 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method ReleaseCombinationSwitch._on_mapping_changed of <inputremapper.gui.components.editor.ReleaseCombinationSwitch object at 0x7f84ce69e270>>
20:26:59.072383 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method CombinationListbox._on_mapping_changed of <inputremapper.gui.components.editor.CombinationListbox object at 0x7f84ce69e3c0>>
20:26:59.072467 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.selected_event: <bound method CombinationListbox._on_event_changed of <inputremapper.gui.components.editor.CombinationListbox object at 0x7f84ce69e3c0>>
20:26:59.072595 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.selected_event: <bound method AnalogInputSwitch._on_event of <inputremapper.gui.components.editor.AnalogInputSwitch object at 0x7f84ce69e510>>
20:26:59.073647 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.selected_event: <bound method TriggerThresholdInput._on_event of <inputremapper.gui.components.editor.TriggerThresholdInput object at 0x7f84ce69e660>>
20:26:59.074943 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method RelativeInputCutoffInput._on_mapping_message of <inputremapper.gui.components.editor.RelativeInputCutoffInput object at 0x7f84ce69e7b0>>
20:26:59.076163 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method OutputAxisSelector._on_mapping_message of <inputremapper.gui.components.editor.OutputAxisSelector object at 0x7f84ce69e900>>
20:26:59.076267 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.uinputs: <bound method OutputAxisSelector._on_uinputs_message of <inputremapper.gui.components.editor.OutputAxisSelector object at 0x7f84ce69e900>>
20:26:59.076404 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method KeyAxisStackSwitcher._on_mapping_message of <inputremapper.gui.components.editor.KeyAxisStackSwitcher object at 0x7f84ce69ea50>>
20:26:59.076541 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method ReleaseTimeoutInput._on_mapping_message of <inputremapper.gui.components.editor.ReleaseTimeoutInput object at 0x7f84ce69eba0>>
20:26:59.076863 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method TransformationDrawArea._on_mapping_message of <inputremapper.gui.components.editor.TransformationDrawArea object at 0x7f84ce69ecf0>>
20:26:59.078678 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method Sliders._on_mapping_message of <inputremapper.gui.components.editor.Sliders object at 0x7f84ce69ee40>>
20:26:59.078837 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method RequireActiveMapping._on_preset of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce7a7110>>
20:26:59.078923 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method RequireActiveMapping._on_mapping of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce7a7110>>
20:26:59.079024 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method RequireActiveMapping._on_preset of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce7a7d90>>
20:26:59.079099 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method RequireActiveMapping._on_mapping of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce7a7d90>>
20:26:59.079200 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.preset: <bound method RequireActiveMapping._on_preset of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce627a80>>
20:26:59.079278 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method RequireActiveMapping._on_mapping of <inputremapper.gui.components.editor.RequireActiveMapping object at 0x7f84ce627a80>>
20:26:59.080221 3419361 GUI WARNING utils.py:196: HandlerDisabled entry failed: "nothing connected to <bound method CodeEditor._on_gtk_changed of <inputremapper.gui.components.editor.CodeEditor object at 0x7f84ce69f0e0>>"
20:26:59.080505 3419361 GUI WARNING utils.py:202: HandlerDisabled exit failed: "nothing connected to <bound method CodeEditor._on_gtk_changed of <inputremapper.gui.components.editor.CodeEditor object at 0x7f84ce69f0e0>>"
20:26:59.080653 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method CodeEditor._on_mapping_loaded of <inputremapper.gui.components.editor.CodeEditor object at 0x7f84ce69f0e0>>
20:26:59.080736 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.recording_finished: <bound method CodeEditor._on_recording_finished of <inputremapper.gui.components.editor.CodeEditor object at 0x7f84ce69f0e0>>
20:26:59.083290 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method Autocompletion._on_mapping_changed of <autocompletion.Autocompletion object at 0x7f84ce6dae80 (Autocompletion at 0x12259960)>>
20:26:59.083394 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.uinputs: <bound method Autocompletion._on_uinputs_changed of <autocompletion.Autocompletion object at 0x7f84ce6dae80 (Autocompletion at 0x12259960)>>
20:26:59.083970 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.mapping: <bound method UserInterface.update_combination_label of <inputremapper.gui.user_interface.UserInterface object at 0x7f84ce69d550>>
20:26:59.084074 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.injector_state: <bound method UserInterface.on_injector_state_msg of <inputremapper.gui.user_interface.UserInterface object at 0x7f84ce69d550>>
20:26:59.084159 3419361 GUI DEBUG message_broker.py:92: adding new Listener for MessageType.user_confirm_request: <bound method UserInterface._on_user_confirm_request of <inputremapper.gui.user_interface.UserInterface object at 0x7f84ce69d550>>
20:26:59.179052 3419361 GUI DEBUG reader_client.py:138: received {'type': 'status', 'message': 'ready'}
20:26:59.179149 3419361 GUI DEBUG reader_client.py:138: received {'type': 'groups', 'message': '["{\\"paths\\": [\\"/dev/input/event6\\"], \\"names\\": [\\"SpaceTec SpaceBall 4000FLX Lefty\\"], \\"types\\": [\\"gamepad\\"], \\"key\\": \\"SpaceTec SpaceBall 4000FLX Lefty\\"}", "{\\"paths\\": [\\"/dev/input/event5\\", \\"/dev/input/event4\\"], \\"names\\": [\\"ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM\\", \\"ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vKB\\"], \\"types\\": [\\"keyboard\\", \\"mouse\\"], \\"key\\": \\"ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM\\"}", "{\\"paths\\": [\\"/dev/input/event3\\", \\"/dev/input/event2\\"], \\"names\\": [\\"ckb1: Corsair K95 RGB Gaming Keyboard vM\\", \\"ckb1: Corsair K95 RGB Gaming Keyboard vKB\\"], \\"types\\": [\\"keyboard\\", \\"mouse\\"], \\"key\\": \\"ckb1: Corsair K95 RGB Gaming Keyboard vM\\"}", "{\\"paths\\": [\\"/dev/input/event12\\", \\"/dev/input/event11\\"], \\"names\\": [\\"Logitech G13 Thumbstick\\", \\"Logitech G13 Gaming Keypad\\"], \\"types\\": [\\"gamepad\\"], \\"key\\": \\"Logitech G13 Thumbstick\\"}"]'}
20:26:59.179693 3419361 GUI DEBUG groups.py:353: Discovering device paths
20:26:59.180513 3419361 GUI DEBUG groups.py:403: Found gamepad "SpaceTec SpaceBall 4000FLX Lefty" at "/dev/input/event6", hash "5dfe3766e369d1bdf49ab45c47645dd6", key "19_27_9__ttyUSB0"
20:26:59.227512 3419361 GUI DEBUG groups.py:403: Found mouse "ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM" at "/dev/input/event5", hash "7b9ae06eaec522afbe3ff081941e062f", key "3_6940_7051__-"
20:26:59.259858 3419361 GUI DEBUG groups.py:403: Found keyboard "ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vKB" at "/dev/input/event4", hash "73caf6ea0c8db1152d8e54b3d18ac484", key "3_6940_7051__-"
20:26:59.295541 3419361 GUI DEBUG groups.py:403: Found mouse "ckb1: Corsair K95 RGB Gaming Keyboard vM" at "/dev/input/event3", hash "f20c8dc46f3725e123389a26b02dfaf6", key "3_6940_6929__-"
20:26:59.315861 3419361 GUI DEBUG groups.py:403: Found keyboard "ckb1: Corsair K95 RGB Gaming Keyboard vKB" at "/dev/input/event2", hash "ae45da95d313c33bb8e5689344c515dd", key "3_6940_6929__-"
20:26:59.343631 3419361 GUI DEBUG groups.py:396: "Eee PC WMI hotkeys" is denylisted
20:26:59.355557 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Front Headphone" has no useful capabilities
20:26:59.407514 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Line Out CLFE" has no useful capabilities
20:26:59.447507 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Line Out Surround" has no useful capabilities
20:26:59.495608 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Line Out Front" has no useful capabilities
20:26:59.535603 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Line" has no useful capabilities
20:26:59.607596 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Front Mic" has no useful capabilities
20:26:59.675599 3419361 GUI DEBUG groups.py:392: "HDA Intel PCH Rear Mic" has no useful capabilities
20:26:59.739575 3419361 GUI DEBUG groups.py:392: "HDA Digital PCBeep" has no useful capabilities
20:26:59.799568 3419361 GUI DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=9" has no useful capabilities
20:26:59.843544 3419361 GUI DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=8" has no useful capabilities
20:26:59.907512 3419361 GUI DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=7" has no useful capabilities
20:26:59.971511 3419361 GUI DEBUG groups.py:392: "HDA NVidia HDMI/DP,pcm=3" has no useful capabilities
20:27:00.047603 3419361 GUI DEBUG groups.py:392: "PC Speaker" has no useful capabilities
20:27:00.103681 3419361 GUI DEBUG groups.py:403: Found gamepad "Logitech G13 Thumbstick" at "/dev/input/event12", hash "280fe2071146336f50ebfc14aaa843d3", key "3_1133_49692__usb-0000:00:14.0-5"
20:27:00.167689 3419361 GUI DEBUG groups.py:403: Found unknown "Logitech G13 Gaming Keypad" at "/dev/input/event11", hash "122b094dd73b36f77809e6a0307c0a01", key "3_1133_49692__usb-0000:00:14.0-5"
20:27:00.244027 3419361 GUI INFO groups.py:482: Found "SpaceTec SpaceBall 4000FLX Lefty", "ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM", "ckb1: Corsair K95 RGB Gaming Keyboard vM", "Logitech G13 Thumbstick"
20:27:00.247349 3419361 GUI DEBUG message_broker.py:71: from reader_client.py:279: Signal=groups: GroupsData(groups={'SpaceTec SpaceBall 4000FLX Lefty': [<DeviceType.GAMEPAD: 'gamepad'>], 'ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM': [<DeviceType.KEYBOARD: 'keyboard'>, <DeviceType.MOUSE: 'mouse'>], 'ckb1: Corsair K95 RGB Gaming Keyboard vM': [<DeviceType.KEYBOARD: 'keyboard'>, <DeviceType.MOUSE: 'mouse'>], 'Logitech G13 Thumbstick': [<DeviceType.GAMEPAD: 'gamepad'>]})
20:27:00.247784 3419361 GUI INFO data_manager.py:299: Loading group "Logitech G13 Thumbstick"
20:27:00.249579 3419361 GUI INFO data_manager.py:317: Loading preset "new preset"
20:27:00.249672 3419361 GUI INFO preset.py:146: Loading preset from "/home/ewhac/.config/input-remapper-2/presets/Logitech G13 Thumbstick/new preset.json"
20:27:00.249763 3419361 GUI DEBUG preset.py:283: got empty file
20:27:00.249995 3419361 GUI DEBUG device_groups.py:102: adding SpaceTec SpaceBall 4000FLX Lefty to device selection
20:27:00.251047 3419361 GUI DEBUG device_groups.py:102: adding ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM to device selection
20:27:00.251441 3419361 GUI DEBUG device_groups.py:102: adding ckb1: Corsair K95 RGB Gaming Keyboard vM to device selection
20:27:00.251774 3419361 GUI DEBUG device_groups.py:102: adding Logitech G13 Thumbstick to device selection
20:27:00.252328 3419361 GUI DEBUG message_broker.py:71: from data_manager.py:99: Signal=group: GroupData(group_key='Logitech G13 Thumbstick', presets=('new preset',))
20:27:00.252585 3419361 GUI DEBUG message_broker.py:71: from data_manager.py:157: Signal=injector_state: InjectorStateMessage(state='UNKNOWN')
20:27:00.252768 3419361 GUI DEBUG message_broker.py:71: from data_manager.py:110: Signal=preset: PresetData(name='new preset', mappings=[], autoload=False)
20:27:00.254290 3419361 GUI DEBUG message_broker.py:71: from controller.py:166: Signal=status_msg: StatusData(ctx_id=5, msg=None, tooltip=None)
20:27:00.254402 3419361 GUI DEBUG message_broker.py:71: from controller.py:155: Signal=mapping: {'target_uinput': 'keyboard'}
20:27:00.257186 3419361 GUI DEBUG message_broker.py:71: from controller.py:166: Signal=status_msg: StatusData(ctx_id=5, msg=None, tooltip=None)
20:27:00.316709 3419361 GUI DEBUG message_broker.py:71: from input_remapper_gtk.py:118: Signal=init: Signal: MessageType.init
20:27:00.316910 3419361 GUI DEBUG message_broker.py:71: from reader_client.py:279: Signal=groups: GroupsData(groups={'SpaceTec SpaceBall 4000FLX Lefty': [<DeviceType.GAMEPAD: 'gamepad'>], 'ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM': [<DeviceType.KEYBOARD: 'keyboard'>, <DeviceType.MOUSE: 'mouse'>], 'ckb1: Corsair K95 RGB Gaming Keyboard vM': [<DeviceType.KEYBOARD: 'keyboard'>, <DeviceType.MOUSE: 'mouse'>], 'Logitech G13 Thumbstick': [<DeviceType.GAMEPAD: 'gamepad'>]})
20:27:00.316998 3419361 GUI DEBUG controller.py:131: A group is already active
20:27:00.317549 3419361 GUI DEBUG device_groups.py:102: adding SpaceTec SpaceBall 4000FLX Lefty to device selection
20:27:00.318089 3419361 GUI DEBUG device_groups.py:102: adding ckb3: CORSAIR SCIMITAR RGB ELITE Gaming Mouse vM to device selection
20:27:00.318514 3419361 GUI DEBUG device_groups.py:102: adding ckb1: Corsair K95 RGB Gaming Keyboard vM to device selection
20:27:00.318927 3419361 GUI DEBUG device_groups.py:102: adding Logitech G13 Thumbstick to device selection
20:27:00.319638 3419361 GUI DEBUG message_broker.py:71: from data_manager.py:139: Signal=uinputs: UInputsData(uinputs={'keyboard': {1: [0, ... 701]}, 'gamepad': {1: [304, ... 318], 3: [(0, AbsInfo(value=0, min=-32768, max=32768, fuzz=0, flat=0, resolution=0)), (1, AbsInfo(value=0, min=-32768, max=32768, fuzz=0, flat=0, resolution=0)), (2, AbsInfo(value=0, min=-32768, max=32768, fuzz=0, flat=0, resolution=0)), (3, AbsInfo(value=0, min=-32768, max=32768, fuzz=0, flat=0, resolution=0)), (4, AbsInfo(value=0, min=-32768, max=32768, fuzz=0, flat=0, resolution=0)), (5, AbsInfo(value=0, min=-32768, max=32768, fuzz=0, flat=0, resolution=0)), (16, AbsInfo(value=0, min=-1, max=1, fuzz=0, flat=0, resolution=0)), (17, AbsInfo(value=0, min=-1, max=1, fuzz=0, flat=0, resolution=0))]}, 'mouse': {1: [272, ... 279], 2: [0, ... 12]}, 'keyboard + mouse': {1: [0, ... 279], 2: [0, ... 12]}})
20:27:32.952801 3419361 GUI DEBUG controller.py:783: Closing Application
20:27:32.952914 3419361 GUI DEBUG preset.py:181: Not saving unchanged preset
20:27:32.953039 3419361 GUI DEBUG message_broker.py:71: from controller.py:785: Signal=terminate: Signal: MessageType.terminate
20:27:32.953116 3419361 GUI DEBUG reader_client.py:117: Sending "terminate" to ReaderService
20:27:32.953203 3419361 GUI DEBUG reader_client.py:182: Stopping recorder.
20:27:32.953257 3419361 GUI DEBUG reader_client.py:117: Sending "stop-reading" to ReaderService
20:27:32.953358 3419361 GUI DEBUG reader_client.py:191: No recording generator existed
20:27:32.953357 3419561 reader-service DEBUG reader_service.py:210: Received command "terminate"
20:27:32.953439 3419561 reader-service DEBUG reader_service.py:214: Terminating
20:27:32.953568 3419361 GUI DEBUG user_interface.py:373: Closing window
20:27:32.954005 3419361 GUI DEBUG message_broker.py:71: from reader_client.py:193: Signal=recording_finished: Signal: MessageType.recording_finished
20:27:32.954197 3419361 GUI DEBUG controller.py:786: Quitting
20:27:32.960739 3419361 GUI DEBUG controller.py:783: Closing Application
20:27:32.960968 3419361 GUI DEBUG preset.py:181: Not saving unchanged preset
20:27:32.961125 3419361 GUI DEBUG message_broker.py:71: from controller.py:785: Signal=terminate: Signal: MessageType.terminate
20:27:32.961196 3419361 GUI DEBUG reader_client.py:117: Sending "terminate" to ReaderService
20:27:32.961278 3419361 GUI DEBUG reader_client.py:182: Stopping recorder.
20:27:32.961356 3419361 GUI DEBUG reader_client.py:117: Sending "stop-reading" to ReaderService
20:27:32.961460 3419361 GUI DEBUG reader_client.py:191: No recording generator existed
20:27:32.961688 3419361 GUI DEBUG user_interface.py:373: Closing window
20:27:32.961776 3419361 GUI DEBUG message_broker.py:71: from reader_client.py:193: Signal=recording_finished: Signal: MessageType.recording_finished
20:27:32.961862 3419361 GUI WARNING utils.py:196: HandlerDisabled entry failed: "nothing connected to <bound method RecordingToggle._on_gtk_toggle of <inputremapper.gui.components.editor.RecordingToggle object at 0x7f84ce69dbe0>>"
20:27:32.961924 3419361 GUI WARNING utils.py:202: HandlerDisabled exit failed: "nothing connected to <bound method RecordingToggle._on_gtk_toggle of <inputremapper.gui.components.editor.RecordingToggle object at 0x7f84ce69dbe0>>"
20:27:32.961974 3419361 GUI DEBUG controller.py:786: Quitting
This is basically an escalation of this discussion topic: #1142.
Kernel support for the Logitech G13 gaming keypad landed in kernel v6.19. It exposes itself as two devices -- one device as a joystick with three buttons (representing the thumbstick and its neighboring buttons), and the other as a keypad with 28 macro buttons. This split was done because some libraries (*cough*SDL*cough*) don't recognize input devices that don't "look like" joysticks.
Input-remapper sees the joystick device, but classifies the macropad as
DeviceType.UNKNOWN, and refuses to handle it.I would suggest that the G13 is an ideal example of the type of peripheral input-remapper exists to support -- something so unusual that it can't easily be mapped to more common input peripherals.
My first thought would be to create a way to expose devices identified as
DeviceType.UNKNOWNand create a way for them to be accessed and mapped.The events from the G13 are as follows: