2020-12-19 15:09:24 +00:00
# Usage
To open the UI to modify the mappings, look into your applications menu
2022-01-01 12:00:49 +00:00
and search for 'Input Remapper'. You should be prompted for your sudo password
2020-12-24 00:26:34 +00:00
as special permissions are needed to read events from `/dev/input/` files.
2022-01-01 12:00:49 +00:00
You can also start it via `input-remapper-gtk` .
2020-12-19 15:09:24 +00:00
2020-12-26 16:09:52 +00:00
< p align = "center" >
< img src = "usage_1.png" / >
< img src = "usage_2.png" / >
< / p >
2022-02-03 16:31:37 +00:00
First, select your device (like your keyboard) from the large dropdown on the top.
Then you can already edit your keys, as shown in the screenshots.
2020-12-26 16:09:52 +00:00
2022-02-12 10:10:19 +00:00
In the text input field, type the key to which you would like to map this key.
More information about the possible mappings can be found [below ](#key-names-and-macros ).
2021-07-09 09:03:08 +00:00
2021-03-21 13:42:35 +00:00
Changes are saved automatically. Afterwards press the "Apply" button.
2020-12-26 16:09:52 +00:00
2022-01-10 19:37:22 +00:00
To change the mapping, you need to use the "Stop Injection" button, so that
2020-12-19 15:49:07 +00:00
the application can read the original keycode. It would otherwise be
invisible since the daemon maps it independently of the GUI.
2020-12-26 16:09:52 +00:00
## Troubleshooting
2020-12-19 15:49:07 +00:00
2022-01-01 12:00:49 +00:00
If stuff doesn't work, check the output of `input-remapper-gtk -d` and feel free
to [open up an issue here ](https://github.com/sezanzeb/input-remapper/issues/new ).
2020-12-25 14:19:01 +00:00
Make sure to not post any debug logs that were generated while you entered
private information with your device. Debug logs are quite verbose.
2020-12-19 15:09:24 +00:00
2022-01-01 12:00:49 +00:00
If input-remapper or your presets prevents your input device from working
2021-03-21 18:15:20 +00:00
at all due to autoload, please try to unplug and plug it in twice.
No injection should be running anymore.
2021-02-07 14:00:36 +00:00
2021-01-01 02:46:38 +00:00
## Combinations
2022-01-14 18:01:00 +00:00
Change the key of your mapping (`Change Key` - Button) and hold a few of your
device keys down. Releasing them will make your text cursor jump into the
mapping column to type in what you want to map it to.
2021-01-01 02:46:38 +00:00
2021-07-26 10:28:52 +00:00
Combinations involving Modifiers might not work. Configuring a combination
of two keys to output a single key will require you to push down the first
key, which of course ends up injecting that first key. Then the second key
will trigger the mapping, because the combination is complete. This is
not a bug. Otherwise every combination would have to automatically disable
all keys that are involved in it.
2021-01-01 02:46:38 +00:00
2022-02-12 10:51:42 +00:00
For example a combination of `LEFTSHIFT + a` for `b` would write "B" instead,
2021-07-26 10:28:52 +00:00
because shift will be activated before you hit the "a". Therefore the
environment will see shift and a "b", which will then be capitalized.
2021-01-01 02:46:38 +00:00
2022-01-14 18:01:00 +00:00
Consider using a different key for the combination than shift. You could use
`KP1 + a` and map `KP1` to `disable` .
2021-01-01 02:46:38 +00:00
2021-09-03 14:39:43 +00:00
The second option is to release the modifier in your combination by writing
2022-01-14 18:01:00 +00:00
the modifier one more time. This will write lowercase "b" characters. To make
this work shift has to be injected via key-mappers devices though, which just
means it has to be forwarded. So the complete mapping for this would look like:
2021-08-31 08:40:34 +00:00
2022-01-14 18:01:00 +00:00
- `Shift L + a` -> `key(Shift_L).hold(b)`
- `Shift L` -> `Shift_L`
2021-08-31 08:40:34 +00:00
2021-02-12 20:43:40 +00:00
## Writing Combinations
2021-04-02 11:42:42 +00:00
You can write `Control_L + a` as mapping, which will inject those two
2021-02-12 20:43:40 +00:00
keycodes into your system on a single key press. An arbitrary number of
names can be chained using ` + ` .
< p align = "center" >
< img src = "plus.png" / >
< / p >
2021-03-17 20:08:15 +00:00
## UI Shortcuts
2021-04-02 13:08:36 +00:00
- `ctrl` + `del` stops the injection (only works while the gui is in focus)
2021-03-17 20:08:15 +00:00
- `ctrl` + `q` closes the application
2021-04-02 13:08:36 +00:00
- `ctrl` + `r` refreshes the device list
2021-03-17 20:08:15 +00:00
2021-11-22 13:38:22 +00:00
## Key Names
2020-12-19 15:09:24 +00:00
Check the autocompletion of the GUI for possible values. You can also
2022-01-01 12:00:49 +00:00
obtain a complete list of possiblities using `input-remapper-control --symbol-names` .
2020-12-19 15:09:24 +00:00
2022-01-01 12:00:49 +00:00
Input-remapper only recognizes symbol names, but not the symbols themselfes. So for
example, input-remapper might (depending on the system layout) know what a `minus` is, but
2021-11-27 22:02:54 +00:00
it doesn't know `-` .
Key names that start with `KEY_` are keyboard layout independent constants that might
not result in the expected output. For example using `KEY_Y` would result in "z"
if the layout of the environment is set to german. Using `y` on the other hand would
correctly result in "y" to be written.
## Limitations
2022-01-01 12:00:49 +00:00
**If your fingers can't type it on your keyboard, input-remapper can't inject it.**
2021-11-27 22:02:54 +00:00
2021-11-21 22:33:15 +00:00
The available symbols depend on the environments keyboard layout, and only those that
don't require a combination to be pressed can be used without workarounds (so most
2021-11-22 13:38:22 +00:00
special characters need some extra steps to use them). Furthermore, if your configured
keyboard layout doesn't support the special character at all (not even via a
2022-01-01 12:00:49 +00:00
combination), then it also won't be possible for input-remapper to map that character at
2021-11-22 13:38:22 +00:00
all.
2021-11-21 22:33:15 +00:00
For example, mapping a key to an exclamation mark is not possible if the keyboard
layout is set to german. However, it is possible to mimic the combination that would
2021-11-22 13:38:22 +00:00
be required to write it, by writing `Shift_L + 1` into the mapping.
2022-01-01 12:00:49 +00:00
This is because input-remapper creates a new virtual keyboard and injects numeric keycodes,
2021-11-22 13:38:22 +00:00
and it won't be able to inject anything a usb keyboard wouldn't been able to. This has
2021-11-27 22:02:54 +00:00
the benefit of being compatible to all display servers, but means the environment will
ultimately decide which character to write.
2021-10-21 11:20:56 +00:00
2022-03-12 20:15:17 +00:00
# External tools
Repositories listed here are made by input-remappers users. Feel free to extend. Beware,
that I can't review their code, so use them at your own risk (just like everything).
- input-remapper-xautopresets: https://github.com/DreadPirateLynx/input-remapper-xautopresets
2021-02-07 14:00:36 +00:00
# Advanced
2020-12-19 20:50:27 +00:00
## Configuration Files
2021-04-25 17:28:02 +00:00
If you don't have a graphical user interface, you'll need to edit the
configuration files.
2022-01-01 12:00:49 +00:00
The default configuration is stored at `~/.config/input-remapper/config.json` ,
2021-04-25 17:28:02 +00:00
which doesn't include any mappings, but rather other parameters that
2021-10-20 21:05:50 +00:00
are interesting for injections. The current default configuration as of 1.2.1
2021-04-25 17:28:02 +00:00
looks like, with an example autoload entry:
2020-12-19 20:50:27 +00:00
```json
{
2020-12-19 22:01:36 +00:00
"autoload": {
"Logitech USB Keyboard": "preset name"
},
2020-12-19 20:50:27 +00:00
"macros": {
"keystroke_sleep_ms": 10
},
"gamepad": {
"joystick": {
"non_linearity": 4,
"pointer_speed": 80,
2021-04-03 21:50:07 +00:00
"left_purpose": "none",
"right_purpose": "none",
2021-01-01 02:46:38 +00:00
"x_scroll_speed": 2,
"y_scroll_speed": 0.5
2020-12-19 20:50:27 +00:00
}
}
}
```
2022-01-01 12:00:49 +00:00
`preset name` refers to `~/.config/input-remapper/presets/device name/preset name.json` .
The device name can be found with `sudo input-remapper-control --list-devices` .
2020-12-19 22:01:36 +00:00
2020-12-19 20:50:27 +00:00
Anything that is relevant to presets can be overwritten in them as well.
Here is an example configuration for preset "a" for the "gamepad" device:
2022-01-01 12:00:49 +00:00
`~/.config/input-remapper/presets/gamepad/a.json`
2020-12-19 20:50:27 +00:00
```json
{
"macros": {
"keystroke_sleep_ms": 100
},
"mapping": {
2020-12-31 20:46:57 +00:00
"1,315,1+1,16,-1": "1",
2020-12-19 20:50:27 +00:00
"1,307,1": "k(2).k(3)"
}
}
```
Both need to be valid json files, otherwise the parser refuses to work. This
2020-12-31 20:46:57 +00:00
preset maps the EV_KEY down event with code 307 to a macro and sets the time
2021-04-04 10:55:44 +00:00
between injected events of macros to 100 ms. Note that a complete keystroke
consists of two events: down and up. The other mapping is a key combination,
2021-10-02 19:47:22 +00:00
chained using `+` .
2020-12-31 20:46:57 +00:00
2021-04-04 10:55:44 +00:00
Other than that, it inherits all configurations from
2022-01-01 12:00:49 +00:00
`~/.config/input-remapper/config.json` . If config.json is missing some stuff,
2020-12-31 20:46:57 +00:00
it will query the hardcoded default values.
2020-12-19 20:53:32 +00:00
2020-12-19 22:01:36 +00:00
The event codes can be read using `evtest` . Available names in the mapping
2022-01-01 12:00:49 +00:00
can be listed with `input-remapper-control --symbol-names` .
2020-12-24 00:26:34 +00:00
## CLI
2022-01-01 12:00:49 +00:00
**input-remapper-control**
2020-12-24 10:00:28 +00:00
2020-12-24 00:26:34 +00:00
`--command` requires the service to be running. You can start it via
2022-01-01 12:00:49 +00:00
`systemctl start input-remapper` or `sudo input-remapper-service` if it isn't already
2020-12-24 00:26:34 +00:00
running (or without sudo if your user has the appropriate permissions).
2021-02-07 14:00:36 +00:00
Examples:
2021-04-23 09:51:21 +00:00
| Description | Command |
|-----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|
2022-01-01 12:00:49 +00:00
| Load all configured presets for all devices | `input-remapper-control --command autoload` |
| If you are running as root user, provide information about the whereabouts of the input-remapper config | `input-remapper-control --command autoload --config-dir "~/.config/input-remapper/"` |
| List available device names for the `--device` parameter | `sudo input-remapper-control --list-devices` |
| Stop injecting | `input-remapper-control --command stop --device "Razer Razer Naga Trinity"` |
| Load `~/.config/input-remapper/presets/Razer Razer Naga Trinity/a.json` | `input-remapper-control --command start --device "Razer Razer Naga Trinity" --preset "a"` |
| Loads the configured preset for whatever device is using this /dev path | `/bin/input-remapper-control --command autoload --device /dev/input/event5` |
2020-12-24 10:00:28 +00:00
**systemctl**
2021-04-23 09:51:21 +00:00
Stopping the service will stop all ongoing injections
2020-12-24 10:00:28 +00:00
```bash
2022-01-01 12:00:49 +00:00
sudo systemctl stop input-remapper
sudo systemctl start input-remapper
systemctl status input-remapper
2020-12-24 10:00:28 +00:00
```
2020-12-25 14:19:01 +00:00
## Testing your Installation
The following commands can be used to make sure it works:
```bash
2022-01-01 12:00:49 +00:00
sudo input-remapper-service &
input-remapper-control --command hello
2020-12-25 14:19:01 +00:00
```
should print `Daemon answered with "hello"` . And
```bash
2022-01-01 12:00:49 +00:00
sudo input-remapper-control --list-devices
2020-12-25 14:19:01 +00:00
```
should print `Found "...", ...` . If anything looks wrong, feel free to [create
2022-01-01 12:00:49 +00:00
an issue](https://github.com/sezanzeb/input-remapper/issues/new).