Wootility - Configuring XInput support for the Wootings under Linux

Prerequisites: Different distributions can use different commands and tools, you need to check if the mentioned system inputs are supported by your distribution.

Background

The recommended way of using analog under Linux with a Wooting is by using DirectInput as the analog type on the profiles, but with a little bit of configuration, it's also possible to use XInput as the analog type. Under Linux, there isn't official support for XInput (the protocol for Xbox controllers) from Mircosoft. There are a few drivers like "xpad" or "xboxdrv" to support these controllers but they don't support the Xbox controller part from Wooting right out of the box. This guide describes the necessary configurations so that "xboxdrv" can be used as the driver for the XInput analog-type on the Wootings. By following this guide the driver will be started automatically every time a Wooting is connected or the driver can be loaded by a user manually.

Installing the Xbox Controller driver

Some Linux distributions already have "xboxdrv" installed, but if not you need to install that package first.

sudo apt-get install xboxdrv -y

Granting user access

There are two possible scenarios, one there the XInput driver is automatically applied every time when a Wooting is connected and another when the driver is applied manually by the user. For the first scenario, udev rules must be added so a special command will be started every time a Wooting is detected, for that case no rules for handling the privileges are necessary. But for the second scenario, other rules must be added instead of to grant dedicated group access to the device and the driver, so it can be started by a user without a higher privilege like root. It's possible to merge both rules together but this isn't necessary because it's only possible to use one of the scenarios at the same time because a device can only be accessed once.

If the system should automatically load the XInput driver every time a Wooting is connected then there is no need of adding the rules for handling the device with user privileges. But if you want to start the driver manually then you need to add them. To grant the user so he can access the Wooting device without the need to run it with higher privileges, the access rights must be set for the device and the XInput driver. This can be done with dedicated udev rules there a named group gets authorized to the device. Regardless of which method is used, the user needs to be in the group which is specified in the rules in order to grant him access. It's recommended to use the standard group 'input' for this, but you can use any existing group to limit the access to that group.

Creating the rules for automatically applying the driver

Create a new file called 'Wooting-XInput.rules' under the path '/etc/udev/rules.d/' with the following content. The name can be changed, but the file extension must be 'rules' otherwise it won't work.

'/etc/udev/rules.d/Wooting-XInput.rules'

# Starting the XInput driver "xboxdrv" when a Wooting is connected

ACTION=="add", SUBSYSTEM=="input", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff01", RUN+="/usr/bin/xboxdrv --type xbox360 --device-by-id 03eb:ff01 --silent --detach-kernel-driver --mimic-xpad"
ACTION=="add", SUBSYSTEM=="input", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff02", RUN+="/usr/bin/xboxdrv --type xbox360 --device-by-id 03eb:ff02 --silent --detach-kernel-driver --mimic-xpad"

These rules will provide every user in the group 'input' the ability to automatically load the XInput driver when a Wooting is connected.

Creating the rules for manually applying the driver

Create a new file called 'Wooting-XInput.rules' under the path '/etc/udev/rules.d/' with the following content. The name can be changed, but the file extension must be 'rules' otherwise it won't work.

'/etc/udev/rules.d/Wooting-XInput.rules'

# Granting all members of the group "input" user access the XInput driver "xboxdrv"  
KERNEL=="uinput", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput"

# Granting all members of the group "input" user access to the Wootings
SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff01", MODE="0660", GROUP="input"
SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff02", MODE="0660", GROUP="input"

These rules will provide every user in the group 'input' the ability to load the driver manually without the need of running the command with advanced privileges such as sudo. This is needed because xboxdrv needs access to the RAW data of the interfaces of the device.

Applying the new rules

To activate the rules they must be loaded and applied by the following command:

sudo udevadm control --reload-rules && sudo udevadm trigger

It can happen that this still doesn't apply and activate the rules, then a reboot of your whole system is required.

Loading the driver

If the rules are used for the automatic method it should work automatically, but if the rules for the manual method are used instead then you need to load the driver with these commands depending on the Wooting you have:

Wooting One

xboxdrv --type xbox360 --device-by-id 03eb:ff01 --silent --detach-kernel-driver --mimic-xpad

Wooting Two

xboxdrv --type xbox360 --device-by-id 03eb:ff02 --silent --detach-kernel-driver --mimic-xpad

The option "silent" suppresses the output of the controls of the device, "detach-kernel-driver" unloads any already used kernel driver for the device like if "xpad" is used and "mimic-xpad" forces the driver to use the same control names like xpad to provide compatibility for games.

Ensuring that the desired users are in the granted group

Only the users in the granted group of the rules have access to the function. So ensure that the group already exists and that the desired users are in it. The command to check if the group exists and to show its members is:

cat /etc/group | grep input

If the command doesn't list the group as an output than it doesn't exist yet and you must create it. The command to create the group is:

sudo groupadd input

If the group exists but the users aren't listed in that, then you must add them to it. The command to add the user 'TESTUSER' to the group is:

sudo usermod -a -G input TESTUSER

After the user was added to that group it can be that he is still not listed in it, if so it's necessary to logout the user or even to reboot the entire system in some cases in order to apply the changes.


Thanks to Rocky_4 (DEU) on Discord for the solution.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us