Automatically changes the active input-remapper preset for each connected device based on active window's class, with optional support for further differentiating between different windows of the same class based on the window's title. Devices can be configured individually, otherwise they will default to the global configuration. input-remapper-xautopresets
makes use of input-remapper-control
to track devices, so it's aware when devices are connected/disconnected. The configuration file also support live-editing, so no need to restart after making changes; just save the file and xautopresets will know about the changes.
- Use your preferred method to download either the release or project folder
- Unzip the package as necessary
- Run
/path/to/download/input-remapper-xautopresets/install
The installer will copy all necessary files to their correct locations, and enable/start the required service
It is safe to run install
over any previously installed/currently running version. If an update is incompatible with previous configuration files, install
will automatically import and convert them without modifying the original files.
Use systemctl --user [enable|disable|restart|start|status|stop] input-remapper-xautopresets.service
to change service state
Alternatively, input-remapper-xautopresets
can be used directly as an interface for systemctl
:
input-remapper-xautopresets v1.1.5
Automatic input-remapper preset manager for systems with access to xdotool
Valid options:
-h Display this table
-v Display version number
Valid arguments:
[enable|disable|restart|start|status|stop]:
runs systemctl --user [command] input-remapper-xautopresets.service
getwindowinfo:
Select a window with the mouse and print the window's class and title
Example useage:
input-remapper-xautopresets start
input-remapper-xautopresets getwindowinfo
Either provide a vaild argument or envoke 'systemctl' directly.
input-remapper-xautopresets
will not allow you to run it directly. It must be controlled through systemctl
, either directly, or through the interface provided by input-remapper-xautopresets
Currently only capable of creating a new xautopresets.ini file, generating it from imported .conf data from previous versions if it exists, or else generating a default one if not.
xautopresets-config v0.1.5
Configuration file manipulator for xautopresets
Valid options:
-h Display this table
-n Generate new default xautopresets.ini file,
importing data from previous versions if available
/path/to/download/input-remapper-xautopresets/uninstall
input-remapper-xautopresets uninstaller
Uninstaller MUST be passed one or more options; it will only remove what you tell it
-c Remove configuration file, 'xautopresets.ini'
-h Display this menu
-l Remove all log files
-s Remove script and service files
-o Remove all configuration files from old (pre-1.0) versions
uninstall
requires additional confirmation for each category in case you made a mistake. uninstall -clso
will remove everything
Once installed, input-remapper-xautopresets uses the following file tree:
~/
|-> .config/
| |-> input-remapper/
| | |-> logs/
| | | |-> .active (Temporary record of currently active profiles on all devices)
| | | |-> [Device Name].log (Device-specific log file)
| | | |-> xautopresets.log (Global log file)
| | |
| | |-> xautopresets.ini (Configuration file)
| |
| |-> systemd/user/
| |-> input-remapper-xautopresets.service (systemd user service file)
|
|-> .local/bin/
|-> input-remapper-xautopresets (#!/bin/bash core script)
|-> xautopresets-config (#!/bin/bash config-file manipulation script)
_DEFAULT
is a window class used internally by the script. The preset assigned to this class will be loaded any time no other preset is configured, or if the configured preset cannot be located.
_STOP
is a preset name used internally by the script. This is the preset that will disable input-remapper
injection.
_IGNORE
is a preset name used internally by the script. This preset tells xautopresets
to ignore the window change and do nothing.
Typical .ini format with section headers in square brackets ('[]'), and semicolon comments (';')
For every window change, there are a total of four (4) configuration sections that may be relevant to each device should they exist: [GLOBAL]
, [GLOBAL:<CLASSNAME>]
, [<DEVICENAME>]
, & [<DEVICENAME>:<CLASSNAME>]
. For each device it is managing, xautopresets
will:
- Grab these four sections
- Order them in a list of increasing priority
[GLOBAL]
is the lowest priority and read first.[<DEVICENAME>:<CLASSNAME>]
is the highest and read last.- The priority of the other two sections is controlled with the
_SECTIONPRIORITY
setting in the[PROGRAM]
section.
- Trim the list to include only
_DEFAULT
,<CLASSNAME>
and<WINDOWWTITLE>
matches. - Sort it based on the
_DEFAULTPRIORITY
setting. - Reverse the list.
- Check it for the first preset that exists on disk (including the internal presets,
_STOP
and_IGNORE
). - Invoke
input-remapper-control
to set the device to it (or ignore the change if appropriate).
; These settings control the behavior of xautopresets.
; Valid settings shown in parentheses; first shown is default.
_EXECUTION=_PARALLEL
; ( _PARALLEL | _SERIAL )
; Controls whether device configuration occurs in parallel or in series.
; Parallel processing has increased overhead, so depending on the number
; of devices you're controlling, it may be quicker to disable it.
_NOTSET=_STOP
; ( _STOP | _IGNORE )
; Final fallback behaivor if appropriate preset can't be found
_SECTIONPRIORITY=_DEVICE
; ( _DEVICE | _CLASS )
; Controls whether '[<DEVICENAME>]' or '[GLOBAL:<CLASSNAME>]'
; section has higher priority
_DEFAULTPRIORITY=_SECTION
; ( _SECTION | _CLASS )
; Controls whether xautopresets applies a default preset from a higher
; priority section before a class-name match from a lower one.
; Setting this to _CLASS means a <CLASSNAME> match in [GLOBAL] will be
; preferred over a _DEFAULT match in [<DEVICENAME>:<CLASSNAME>]
Uncommented devices listed in this section will not be managed by xautopresets
These sections contain a list of window classes paired with a list of input-remapper preset names. Preset names should not include the .json
extension.
exampleWindowclass1=Example Preset Name 1
exampleWindowclass2=Example Preset Name 1
*xampleWindowclass3=Example Pr?set Name 2
*
/?
wildcard characters and spaces are valid. Quotation marks, as well as leading and trailing spaces should only be included if actually part of the class/file name. Entries lower in the list will override earlier ones, so you can use wildcards early for more general matches, and get more specific the further into the configuration file you go for special cases as follows:
example*=preset1
*Window*=preset2
exampleWindow*=preset3
*WindowClass4=preset4
exampleWindowClass?=preset5
exampleWindowClass8=preset6
A default global file is generated during installation or if it can't be found. It contains the following, unless data from previous version .conf files was imported:
_DEFAULT=_STOP
Input-remapper-gtk=_STOP
Input-remapper-gtk
is the window class name for input-remapper
's gui configuration tool. Injection needs to be stopped to make changes, so this seemed appropriate. Feel free to change.
Use input-remapper-xautopresets getwindowinfo
to get window class names for your applications. It is highly recommended that you copy and paste from here into your .ini file.
These sections contain a list of window titles paried with a list of input-remapper preset names. It is intended to give the user the ability to have more than one configured preset for a given application, and change between them based on the window's name as shown in the title bar. Same basic syntax as [GLOBAL]
and [<DEVICENAME>]
, except:
example Window Title=Example Preset Name
Use input-remapper-xautopresets getwindowinfo
to get window titles, and once again, copy/pasting from here is advised. Wildcards and spaces supported just like with xautopresets.conf
.
_DEFAULT=FireDragon
*- YouTube -*=Media
In this example, when using the FireDragon web browser (Class Name firedragon
), any time a browser tab whose title includes the string - YouTube -
is active, Media.json
will be enabled on this device. For all other tabs, FireDragon.json
will be enabled
You can modify Environment=DISPLAY=:0
to limit which displays the service monitors. Avoid other modifications unless you know what you're doing.
Use systemctl --user daemon-reload
every time you make changes to input-remapper-xautopresets.service