Как подключить джойстик к linux

Содержание
  1. Управляем приложениями при помощи геймпада
  2. Введение
  3. Установка QJoyPad
  4. Ручная сборка пакета QJoyPad
  5. Настройка QJoyPad
  6. Пример файла конфигурации
  7. Gamepad
  8. Contents
  9. Installation
  10. Loading the modules for analogue devices
  11. USB gamepads
  12. Configuration
  13. Testing
  14. Joystick API
  15. evdev API
  16. HTML5 Gamepad API
  17. Setting up deadzones and calibration
  18. Wine deadzones
  19. Xorg deadzones
  20. Joystick API deadzones
  21. evdev API deadzones
  22. Configuring curves and responsiveness
  23. Disable joystick from controlling mouse
  24. Using gamepad to send keystrokes
  25. Xorg configuration example
  26. Remapping of Gamepad buttons and more
  27. Specific devices
  28. Dance pads
  29. Logitech Thunderpad Digital
  30. Nintendo Gamecube Controller
  31. Nintendo Switch Pro Controller and Joy-Cons
  32. Using the kernel Nintendo HID driver
  33. Dolphin (GameCube controller emulation)
  34. Steam
  35. iPEGA-9017s and other Bluetooth gamepads
  36. iPEGA-9068 and 9087
  37. Defender X7
  38. Stadia Controller
  39. Steam Controller
  40. Xbox 360 controller
  41. xboxdrv
  42. Using generic/clone controllers
  43. Xbox Wireless Controller / Xbox One Wireless Controller
  44. Connect Xbox Wireless Controller with usb cable
  45. Connect Xbox Wireless Controller with Bluetooth
  46. Connect Xbox Wireless Controller with Microsoft Xbox Wireless Adapter
  47. Logitech Dual Action
  48. PlayStation 2 controller via USB adapter
  49. PlayStation 3 controller
  50. Pairing via USB
  51. Pairing via Bluetooth
  52. PlayStation 4 controller
  53. Pairing via USB
  54. Pairing via Bluetooth
  55. Button mapping
  56. Fix Motion control conflict (gamepad will not work on some applications)
  57. Disable touchpad acting as mouse
  58. Playstation 5 (Dualsense) controller
  59. PlayStation 3/4 controller
  60. Connecting via Bluetooth
  61. Using generic/clone controllers
  62. Tips and Tricks
  63. Gamepad over network
  64. Troubleshooting
  65. Device permissions
  66. Joystick moving mouse
  67. Gamepad is not working in FNA/SDL based games
  68. Gamepad is not recognized by all programs
  69. Vibration does not work in certain Windows games
  70. Steam Controller
  71. Steam Controller not pairing
  72. Steam Controller makes a game crash or not recognized
  73. Xbox One and 360 controllers
  74. Xbox One Wireless Gamepad detected but no inputs recognized
  75. PlayStation 4 Controllers

Управляем приложениями при помощи геймпада

В данной статье мы подробно рассмотрим как реализовать управление любыми приложениями, запущенными под GNU/Linux, при помощи геймпада.

Введение

Большинство обычных приложений не поддерживают управление геймпадом, поэтому нам потребуется программа, которая будет назначать действия на события геймпада. Таких программ несколько, но мы рассмотрим QJoyPad (форк, портированный на Qt5) как самую простую из них.

Полностью поддерживаются как проводные, так и беспроводные геймпады, совместимые со стандартом XInput. Для тестов мы использовали проводной геймпад Logitech F310, а также беспроводной Xbox 360.

Установка QJoyPad

Утилита QJoyPad уже доступна в репозиториях Russian Fedora и может быть установлена штатно если они подключены:

Пользователи дистрибутива Fedora со стандартным набором репозиториев могут установить данный пакет из нашего COPR:

Ручная сборка пакета QJoyPad

Пользователи других RPM-based дистрибутивов должны самостоятельно собрать RPM пакет из исходников по заготовленному SPEC-файлу (для сборки потребуется Qt5 SDK):

Результат можно найти в каталоге

/rpmbuild/RPMS/`uname -m`/, а затем установить штатным для используемого дистрибутива способом.

Настройка QJoyPad

Сразу после запуска программа разместит свой значок в системном трее (или его заменителе). При нажатии на него появится графический конфигуратор.

Главное окно утилиты QJoyPad

Программа поддерживает импорт и экспорт настроек, а также создание неограниченного числа профилей. Профили можно переключать на лету либо в главном окне, либо из контекстного меню значка в системном трее. Ненужные можно удалять соответствующей кнопкой.

Привязка действия событию

Чтобы начать назначение действий, просто нажмите на соответствующую кнопку геймпада или триггер и программа подсветит её в главном окне синим. Теперь достаточно её нажать и задать привязку к клавиатуре или мыши. Допускается указать чувствительность, а для мыши — скорость перемещения указателя.

Как только все настройки будут произведены, жмём кнопку Save, чтобы они сохранились в файл конфигурации и были немедленно применены.

Если что-то сделано неправильно, можно нажать Revert для отката к предыдущей версии настроек, либо Clear для их полного сброса.

Пример файла конфигурации

Пример нашего файла конфигурации для Logitech F310 (режим XInput):

Данный файл можно импортировать при помощи пункта Import в главном окне.

Источник

Gamepad

Many gamepads are working out-of-the-box nowadays, but there are still many potential problems and sources for errors since gamepad support in applications varies by a lot.

This article or section needs expansion.

Linux has two different input systems for Gamepads – the original Joystick interface and the newer evdev-based interface.

/dev/input/jsX maps to the Joystick API interface and /dev/input/event* maps to the evdev ones (this also includes other input devices such as mice and keyboards). Symbolic links to those devices are also available in /dev/input/by-id/ and /dev/input/by-path/ where the legacy Joystick API has names ending with -joystick while the evdev have names ending with -event-joystick .

Most new games will default to the evdev interface as it gives more detailed information about the buttons and axes available and also adds support for force feedback.

While SDL1 defaults to evdev interface you can force it to use the old Joystick API by setting the environment variable SDL_JOYSTICK_DEVICE=/dev/input/js0 . This can help many games such as X3. SDL2 supports only the new evdev interface.

Contents

Installation

Unless you are using very old joystick that uses Gameport or a proprietary USB protocol, you will need just the generic USB Human Interface Device (HID) modules.

For an extensive overview of all joystick related modules in Linux, you will need access to the Linux kernel sources — specifically the Documentation section. Unfortunately, official kernel packages do not include what we need. If you have the kernel sources downloaded, have a look at Documentation/input/joydev/ . You can browse the kernel source tree at kernel.org by clicking the «browse» (cgit — the git frontend) link for the kernel that you are using, then clicking the «tree» link near the top. Alternatively, see documentation from the latest kernel.

Some joysticks need specific modules, such as the Microsoft Sidewinder controllers ( sidewinder ), or the Logitech digital controllers ( adi ). Many older joysticks will work with the simple analog module. If your joystick is plugging in to a gameport provided by your soundcard, you will need your soundcard drivers loaded — however, some cards, like the Soundblaster Live, have a specific gameport driver ( emu10k1-gp ). Older ISA soundcards may need the ns558 module, which is a standard gameport module.

As you can see, there are many different modules related to getting your joystick working in Linux, so everything is not covered here. Please have a look at the documentation mentioned above for details.

Loading the modules for analogue devices

You need to load a module for your gameport ( ns558 , emu10k1-gp , cs461x , etc. ), a module for your joystick ( analog , sidewinder , adi , etc. ), and finally the kernel joystick device driver ( joydev ). Add these to a new file in /etc/modules-load.d/ , or simply modprobe them. The gameport module should load automatically, as this is a dependency of the other modules.

USB gamepads

You need to get USB working, and then modprobe your gamepad driver, which is usbhid , as well as joydev . If you use a usb mouse or keyboard, usbhid will be loaded already and you just have to load the joydev module.

Configuration

Testing

Once the modules are loaded, you should be able to find a new device: /dev/input/js0 and a file ending with -event-joystick in /dev/input/by-id directory. You can simply cat those devices to see if the joystick works — move the stick around, press all the buttons — you should see mojibake printed when you move the sticks or press buttons.

If you get a permission error, see #Device permissions.

Both interfaces are also supported in wine and reported as separate devices. You can test them (including vibration feedback) with wine control joy.cpl .

Joystick API

There are a lot of applications that can test this old API, jstest from the joyutils package is the simplest one. If the output is unreadable because the line printed is too long you can also use graphical tools. KDE Plasma has a built in one in System Settings -> Input Devices -> Game Controller. There is jstest-gtk-git AUR as an alternative.

Use of jstest is fairly simple, you just run jstest /dev/input/js0 and it will print a line with state of all the axes (normalised to <-32767,32767>) and buttons.

After you start jstest-gtk , it will just show you a list of joysticks available, you just need to select one and press Properties.

evdev API

The new ‘evdev’ API can be tested using the SDL2 joystick test application or using evtest from community repository. Install sdl2-jstest-git AUR and then run sdl2-jstest —test 0 . Use sdl2-jstest —list to get IDs of other controllers if you have multiple ones connected.

To test force feedback on the device, use fftest from linuxconsole package:

HTML5 Gamepad API

Go to https://gamepad-tester.com/. To test vibration, click on the word Vibration. Vibration and gamepad image are currently supported in Chromium browser, but not in Firefox.

Setting up deadzones and calibration

If you want to set up the deadzones (or remove them completely) of your analog input you have to do it separately for the xorg (for mouse and keyboard emulation), Joystick API and evdev API.

Wine deadzones

Add the following registry entry and set it to a string from 0 to 10000 (affects all axes):

Xorg deadzones

Add a similar line to /etc/X11/xorg.conf.d/51-joystick.conf (create if it does not exist):

1000 is the default value, but you can set anything between 0 and 30 000. To get the axis number see the «Testing Your Configuration» section of this article. If you already have an option with a specific axis just type in the deadzone=value at the end of the parameter separated by a space.

Joystick API deadzones

The easiest way is using jstest-gtk from jstest-gtk-git AUR . Select the joystick you want to edit, click the Properties button. On this new window, click the Calibration button (do not click Start Calibration after that). You can then set the CenterMin and CenterMax values, which control the center deadzone, and RangeMin and RangeMax , which control the end of throw deadzones. Note that the calibration settings are applied when the application opens the device, so you need to restart your game or test application to see updated calibration settings.

READ  Как вызвать fastboot на windows

After you set the deadzones, you also can create an udev rule to make all changes permanent:

First, grab the vendor id of your joystick (replace X with your joystick’s number, it’s usually 0 ):

Also rab the model id:

If the commands above give you an empty output, it could be because your controller is connected via Bluetooth, making these unique attributes only visible on the parent device(s). To mitigate this, you could try finding other unique attributes by running:

This will list all available attributes from your device (and parent devices). So, for example, if the parent device of your joystick has the attribute ATTRS==»a0:b1:c2:d3:e4:f5″ , or maybe both ATTRS==»054c» and ATTRS==»09cc» , then you can use these instead of ENV and ENV in the udev rule below.

You can also have both rules at the same time, just separate them with a new line.

Anyway, now use jscal to dump the new calibration settings of your joystick:

Now, modify this udev rule with the values you got:

This rule will automatically run /usr/bin/jscal -s 1,1,1,1 /dev/input/js%n whenever you connect a joystick with vendor id 054c and model id 09cc . The /dev/input/js%n part is required to automatically determine the correct joystick, so do not remove it.

Finally, load this new udev rule.

evdev API deadzones

The evdev-joystick tool from the linuxconsole package can be used to view and change deadzones and calibration for evdev API devices.

To view your device configuration:

To change the deadzone for a particular axis, use a command like:

To set the same deadzone for all axes at once, omit the —axis 0 option.

Use udev rules file to set them automatically when the controller is connected.

Note that inside the kernel, the value is called flatness and is set using the EVIOCSABS ioctl .

Default configuration will look like similar to this:

While a more reasonable setting would be achieved with something like this (repeat for other axes):

Configuring curves and responsiveness

In case your game requires just limited amount of buttons or has good support for multiple controllers, you may have good results with using xboxdrv to change response curves of the joystick.

Below are example setups for Saitek X-55 HOTAS:

this maps the EV_ABS event with id of 40 and 41 (use xboxdrv with —evdev-debug to see the events registered), which is the normally inaccessible «mouse pointer» on the throttle, to first gamepad joystick and throttles to second joystick, it also clamps the top and lower ranges as they not always register fully.

A bit more interesting is the setup for the stick:

this maps the 3 joystick axes to gamepad axes and changes the calibration (min value, centre value, max value), dead zones (negative side, positive side, flag to turn smoothing) and finally change of response curve to a more flat one in the middle.

You can also modify the responsiveness by setting the ‘sen’ (sensitivity). Setting it to value of 0 will give you a linear sensitivity, value of -1 will give very insensitive axis while value of 1 will give very sensitive axis. You can use intermediate values to make it less or more sensitive. Internally xboxdrv uses a quadratic formula to calculate the resulting value, so this setting gives a more smooth result than ‘resp’ shown above.

Nice thing about xboxdrv is that it exports resulting device as both old Joystick API and new style evdev API so it should be compatible with basically any application.

Disable joystick from controlling mouse

If you want to play games with your gamepad, you might want to disable its joystick control over mouse cursor. To do this, edit /etc/X11/xorg.conf.d/51-joystick.conf (create if it does not exists) so that it looks like this:

Using gamepad to send keystrokes

A couple of programs exist to map gamepad buttons to keyboard keys, including:

All work well without the need for additional X.org configuration.

Xorg configuration example

This is a good solution for systems where restarting Xorg is a rare event because it is a static configuration loaded only on X startup. The example runs on a Kodi media PC, controlled with a Logitech Cordless RumblePad 2. Due to a problem with the d-pad (a.k.a. «hat») being recognized as another axis, Joy2key was used as a workaround. Since kodi version 11.0 and joy2key AUR 1.6.3-1, this setup no longer worked and the following was created for letting Xorg handle joystick events.

First, install the xf86-input-joystick AUR package. Then, create /etc/X11/xorg.conf.d/51-joystick.conf like so:

Remapping of Gamepad buttons and more

With some programs you can also configure your gamepad further, including the following potential features:

  • Remapping buttons and axes.
    • Assigning mapping profiles to different games.
  • Emulating a different type of gamepad. As noted in #Mimic Xbox 360 controller, software can often behave better when seemingly given an Xbox 360 Controller, as this is a very common controller that many games have been tested with.
  • Additional functionality such as Macros, On-Screen-Displays etc.

List of software:

  • SC Controller — Open-source software supporting button remapping and Xbox 360 Controller emulation.

https://github.com/Ryochan7/sc-controller || sc-controllerAUR

  • xboxdrv — Xbox 360 controller driver which supports emulating the controller from a different input controller. Even if you don’t have or need a 360 controller, this is still flexible option for performing remapping.

https://xboxdrv.gitlab.io/ || xboxdrvAUR

  • Steam — Proprietary storefront whose client supports rebinding gamepad inputs via Steam Input. When enabled, Steam exposes a Steam Controller to games that opt into the Steam Input API, as well as an emulated Xbox 360 Controller to games using traditional gamepad APIs. See Steam#Steam Input for further details.

https://store.steampowered.com/about/ || steam

Specific devices

While most gamepads, especially USB based ones should just work, some may require (or give better results) if you use alternative drivers. If it does not work the first time, do not give up, and read the following sections thoroughly!

Dance pads

Most dance pads should work. However some pads, especially those used from a video game console via an adapter, have a tendency to map the directional buttons as axis buttons. This prevents hitting left-right or up-down simultaneously. This behavior can be fixed for devices recognized by xpad via a module option:

If that did not work, you can try axisfix-git AUR or patching the joydev kernel module (https://github.com/adiel-mittmann/dancepad).

Logitech Thunderpad Digital

Logitech Thunderpad Digital will not show all the buttons if you use the analog module. Use the device specific adi module for this controller.

Nintendo Gamecube Controller

Dolphin Emulator has a page on their wiki that explains how to use the official Nintendo USB adapter with a Gamecube controller. This configuration also works with the Mayflash Controller Adapter if the switch is set to «Wii U».

Nintendo Switch Pro Controller and Joy-Cons

Using the kernel Nintendo HID driver

The hid-nintendo kernel HID driver was mainlined in kernel 5.16. If you are using an earlier kernel, you will need to install the DKMS module named hid-nintendo-dkms AUR . The driver provides support for rumble, battery level, and control of the player and home LEDs. It supports the Nintendo Switch Pro Controller over both USB and Bluetooth in addition to the Joy-Cons.

An alternate DKMS module named hid-nintendo-nso-dkms AUR patches in support for the Switch Online NES and SNES controllers.

Using joycond userspace daemon

The hid-nintendo kernel driver does not handle the combination of two Joy-Cons into one virtual input device. That functionality has been left up to userspace. joycond-git AUR is a userspace daemon that combines two kernel Joy-Con evdev devices into one virtual input device using uinput. An application can use two Joy-Cons as if they are a single controller. When the daemon is active, switch controllers will be placed in a pseudo pairing mode, and the LEDs will start flashing. Holding the triggers can be used to pair controllers and make them usable. To pair two Joy-Cons together, press one trigger on each Joy-Con.

Using hid-nintendo Pro Controller with Steam games (without joycond)

The hid-nintendo driver currently conflicts with steam using hidraw to implement its own pro controller driver. If you wish to use the Steam implementation, the hid-nintendo driver can be blacklisted. Alternatively if you want to use hid-nintendo with a Steam game directly, Steam can be started without access to hidraw using firejail:

An issue has been opened on the steam-for-linux github repo.

Using hid-nintendo Pro Controller with Steam games (with joycond)

A workaround has been added to joycond to have udev rules to block steam from accessing hidraw for the Pro Controller.

That alone is not enough though, since steam will not recognize the pro controller when access to hidraw is blocked. To get around that issue, joycond supports creating a virtual pro controller with a different product id. Steam will view this as a typical controller. This gives the best of both worlds, where hid-nintendo can be used both inside and outside of steam simultaneously.

To pair the pro controller in virtual mode, press the Plus and Minus buttons simultaneously (instead of using the triggers). You must be using a version of joycond including this commit.

Using hid-nintendo with SDL2 games

To add a mapping for the joy-cons or the pro controller to an SDL2 game, controllermap AUR can be run in the game’s directory of games which have their own gamecontrollerdb.txt file.

Alternatively, the mappings can be added to an environment variable:

Mimic Xbox 360 controller

For some games and emulators such as Stardew Valley and RetroArch, the controllers do not work unless you create a virtual Xbox 360 controller with xboxdrv. One possible sample configuration:

Dolphin (GameCube controller emulation)

Shinyquagsire23 made the HID Joy-Con Whispering repository, which contains a userspace driver for the Joy-Cons and the Switch Pro Controller over USB. Currently, it does not support rumble or gyroscope. For rumble support, see the hid-nintendo kernel driver section above.

READ  Как обновить bios под windows

After running make, load the uinput module:

Then to activate the driver:

Over on Dolphin’s controller configuration menu, there should be an entry for evdev/0/joycon (not Nintendo Switch Pro Controller). Select it, and you should now be able to configure the controls.

Steam

While the controller works for native Linux games, this controller is not detected by Steam. To fix this, we will need to add:

udev can be reloaded with the new configuration by executing

iPEGA-9017s and other Bluetooth gamepads

If you want to use one of the widely available bluetooth gamepads, such as iPEGA-9017s designed mostly for Android and iOS devices you would need xboxdrv AUR , bluez , bluez-plugins , and bluez-utils . You should connect it in gamepad mode (if there are different modes, choose the gamepad one). Technically it is ready to be used, but in most cases games would not recognize it, and you would have to map it individually for all application. The best way to simplify it and make it work with all applications is to mimic Microsoft X360 controller with xboxdrv AUR . Once connected you can create a udev rule to give it a persistent name, that would come in handy when setting it up.

Replace «Bluetooth Gampad» with your device name and «00:17:02:01:ae:2a» with your device’s address.

Next, create a configuration for xboxdrv AUR somewhere, for example:

Refer to [ dead link 2022-09-18 ⓘ] xboxdrv(1) to see all the options.

Now when you have the configuration and your device is connected you can start the xboxdrv AUR like so:

Your games will now work with bluetooth gamepad as long as xboxdrv is running.

iPEGA-9068 and 9087

For this model, use the same procedures as above, but with the configs:

Defender X7

For this model, use the same procedures as above, but with the configs:

Now when you have the configuration and your device is connected you can start the xboxdrv AUR like so:

Stadia Controller

The Stadia controller can also be mapped with xboxdrv:

Steam Controller

The Steam client will recognize the controller and provide keyboard/mouse/gamepad emulation while Steam is running. The in-game Steam overlay needs to be enabled and working in order for gamepad emulation to work. You may need to run udevadm trigger with root privileges or plug the dongle out and in again, if the controller does not work immediately after installing and running Steam. If all else fails, try restarting the computer while the dongle is plugged in.

If you are using the controller connected via Bluetooth LE, make sure the user is part of the input group.

If you cannot get the Steam Controller to work, see #Steam Controller not pairing.

Alternatively you can install python-steamcontroller-git AUR to have controller and mouse emulation without Steam or sc-controller AUR for a versatile graphical configuration tool simillar to what is provided by the Steam client.

python-steamcontroller-git AUR can also be used to make the Steam Controller work for games running under Wine. You need to find and download the application xbox360cemu.v.3.0 (e.g. from here). Then copy the files dinput8.dll , xbox360cemu.ini , xinput1_3.dll and xinput_9_1_0.dll to the directory that contains your game executable. Edit xbox360cemu.ini and only change the following values under [PAD1] to remap the Steam Controller correctly to a XBox controller.

Now start python-steamcontroller in Xbox360 mode ( sc-xbox.py start ). You might also want to copy XInputTest.exe from xbox360cemu.v.3.0 to the same directory and run it with Wine in order to test if the mappings work correctly. However neither mouse nor keyboard emulation work with this method.

Alternatively you can use sc-controller AUR for a similar graphical setup as Steam’s own configurator. As of writing, it is a bit buggy here and there but offers an easy click and go way of configuring the controller.

Xbox 360 controller

Both the wired and wireless (with the Xbox 360 Wireless Receiver for Windows) controllers are supported by the xpad kernel module and should work without additional packages. Note that using a wireless Xbox360 controller with the Play&Charge USB cable will not work. The cable is for recharging only and does not transmit any input data over the wire.

It has been reported that the default xpad driver has some issues with a few newer wired and wireless controllers, such as:

  • incorrect button mapping. (discussion in Steam bugtracker)
  • not-working sync. (discussion in Arch Forum)
  • all four LEDs keep blinking, but controller works. TLP’s USB autosuspend is one sure cause of this issue with wireless controllers. See below for fix.

If you use the TLP power management tool, you may experience connection issues with your Microsoft wireless adapter (e.g. the indicator LED will go out after the adapter has been connected for a few seconds, and controller connection attempts fail, four LEDs keep blinking but controller works). This is due to TLP’s USB autosuspend functionality, and the solution is to add the Microsoft wireless adapter’s device ID to TLP blacklist (to check device ID to blacklist, run tlp-stat -u ; for original MS wireless dongle just add USB_DENYLIST=»045e:0719″ to /etc/tlp.conf ), check TLP configuration for more details.

If you experience such issues, you can use #xboxdrv as the default xpad driver instead.

If you wish to use the controller for controlling the mouse, or mapping buttons to keys, etc. you should use the xf86-input-joystick AUR package (configuration help can be found using [ dead link 2022-09-18 ⓘ] joystick(4) ). If the mouse locks itself in a corner, it might help changing the MatchDevicePath in /etc/X11/xorg.conf.d/50-joystick.conf from /dev/input/event* to /dev/input/js* .

In order to connect via Bluetooth using KDE, add the following kernel parameter bluetooth.disable_ertm=1 .

xboxdrv

xboxdrv is an alternative to xpad which provides more functionality and might work better with certain controllers. It works in userspace and can be launched as system service.

Install it with the xboxdrv AUR package. Then start/enable xboxdrv.service .

If you have issues with the controller being recognized but not working in steam games or working but with incorrect mappings, it may be required to modify you configuration as such:

Multiple controllers

xboxdrv supports a multitude of controllers, but they need to be set up in /etc/default/xboxdrv . For each extra controller, add an next-controller = true line. For example, when using 4 controllers, add it 3 times:

Mimic Xbox 360 controller with other controllers

xboxdrv can be used to make any controller register as an Xbox 360 controller with the —mimic-xpad switch. This may be desirable for games that support Xbox 360 controllers out of the box, but have trouble detecting or working with other gamepads.

First, you need to find out what each button and axis on the controller is called. You can use evtest for this. Run evtest and select the device event ID number ( /dev/input/event* ) that corresponds to your controller. Press the buttons on the controller and move the axes to read the names of each button and axis.

Here is an example of the output:

In this case, BTN_THUMB , BTN_THUMB2 and BTN_PINKIE are buttons and ABS_RX is the X axis of the right analogue stick. You can now mimic an Xbox 360 controller with the following command:

The above example is incomplete. It only maps one axis and 3 buttons for demonstration purposes. Use xboxdrv —help-button to see the names of the Xbox controller buttons and axes and bind them accordingly by expanding the command above. Axes mappings should go after —evdev-absmap and button mappings follow —evdev-keymap (comma separated list; no spaces).

By default, xboxdrv outputs all events to the terminal. You can use this to test that the mappings are correct. Append the —silent option to keep it quiet.

Using generic/clone controllers

Some clone gamepads might require a specific initialization sequence in order to work (Super User answer). For that you should run the following python script as the root user:

Xbox Wireless Controller / Xbox One Wireless Controller

Connect Xbox Wireless Controller with usb cable

This is supported by the kernel and works any without additional packages.

Connect Xbox Wireless Controller with Bluetooth

Update controller firmware via Windows 10

The firmware of the Xbox Wireless Controller used to cause loops of connecting / disconnecting with Bluez. The best workaround for now is to plug (via a USB cord) the controller to a Windows 10 computer, download the xbox accessories application, and update the firmware of the controller.

xpadneo

A relatively new driver which does support the Xbox One S and Xbox Series X|S controller via Bluetooth is called xpadneo. In addition to these two models, it has also basic support for the Xbox Elite Series 2 Wireless controller. In exchange for fully supporting just two controllers so far, it enables one to read out the correct battery level, supports rumble (even the one on the trigger buttons — L2/R2), corrects the (sometimes wrong) button mapping and more.

Installation is done using DKMS: xpadneo-dkms-git AUR .

Connect Xbox Wireless Controller with Microsoft Xbox Wireless Adapter

xow is a project that allows connection with a wireless dongle. It is currently in very early stages of development. It can be installed via xow-git AUR

xone is a Linux kernel driver for Xbox One and Xbox Series X|S accessories. It serves as a modern replacement for xpad, supersedes xow. Currently working via wired or with the wireless dongle. This driver is still in active development.

Logitech Dual Action

The Logitech Dual Action gamepad has a very similar mapping to the PS2 pad, but some buttons and triggers need to be swapped to mimic the Xbox controller.

READ  Драйвера для мультимедийных кнопок

PlayStation 2 controller via USB adapter

To fix the button mapping of PS2 dual adapters and mimic the Xbox controller you can run the following command:

PlayStation 3 controller

Pairing via USB

If you own a PS3 controller and can connect with USB, plug it to your computer and press the PS button. The controller will power up and one of the four LEDs should light up indicating the controller’s number.

Pairing via Bluetooth

Install bluez bluez-utils bluez-plugins . Make sure bluetooth is working by following the first five steps of Bluetooth#Pairing and leave the bluetoothctl command running, then turn on the controller by pressing the middle ‘PS’ button(all 4 leds should be blinking quickly

4 hz) and connect to your computer using usb. Lastly, type yes in the bluetoothctl prompt when asked ‘ Authorize service 00001124-0000-1000-8000-00805f9b34fb (yes/no) ‘.

Alternative instructions: To connect your PS3 controller to your computer using Bluetooth, you first need to install bluez and bluez-plugins then connect your controller via USB. A pop-up should appear asking for pairing. Click on Trust & Authorize. You can now unplug your controller and press the PS button. The controller will connect and a LED will remain solid. You can now use it to play games. Connecting using the USB cable is only needed after the controller has been connected to another system.

PlayStation 4 controller

Pairing via USB

Connect your controller via USB and press the PS button.

Pairing via Bluetooth

If you want to use bluetooth mode, hold down the PS button and Share button together. The white LED of the controller should blink very quickly, and the wireless controller can be paired with your bluetooth manager (bluez, gnome-bluetooth).

Button mapping

To fix the button mapping of PS4 controller you can use the following command with xboxdrv (or try with the ds4drv program, ds4drv AUR ):

Fix Motion control conflict (gamepad will not work on some applications)

Dualshock 4 V1 and V2 are both like 3 devices, touchpad, motion control, and joypad.

With some software like Parsec and Shadow cloud gaming streaming applications, motion control is in conflict with joypad, you can disable touchpad and motion control by adding the following udev rule:

This should work in USB and Bluetooth mode.

Disable touchpad acting as mouse

This fixes conflicts with games that actually use touchpad as part of the gamepad, such as Rise of the Tomb Raider. This will work with both DualShock4 and DualSense controllers.

And then paste the following and restart X11:

Playstation 5 (Dualsense) controller

Configure button mapping (thanks to yoyossef):

Some applications, for example, Steam inside Geforce NOW inside web browser, may be confused with original joystick events, which shadow the newly created event source. Simply deleting /dev/input/js0 works this around.

The PlayStation and mode buttons still do not work, however.

PlayStation 3/4 controller

The DualShock 3, DualShock 4 and Sixaxis controllers work out of the box when plugged in via USB (the PS button will need to be pushed to begin). They can also be used wirelessly via Bluetooth.

Steam properly recognizes it as a PS3 pad and Big Picture can be launched with the PS button. Big Picture and some games may act as if it was a 360 controller. Gamepad control over mouse is on by default. You may want to turn it off before playing games, see #Joystick moving mouse.

Connecting via Bluetooth

Install the bluez , bluez-plugins , and bluez-utils packages, which includes the sixaxis plugin. Then start the bluetooth service and ensure bluetooth is powered on. If using bluetoothctl start it in a terminal and then plug the controller in via USB. You should be prompted to trust the controller in bluetoothctl. A graphical bluetooth front-end may program your PC’s bluetooth address into the controller automatically. Hit the PlayStation button and check that the controller works while plugged in.

You can now disconnect your controller. The next time you hit the PlayStation button it will connect without asking anything else.

Alternatively, on a PS4 controller you can hold the share button and the PlayStation button simultaneously (for a few seconds) to put the gamepad in pairing mode, and pair as you would normally.

GNOME’s Settings also provides a graphical interface to pair sixaxis controllers when connected by wire.

Remember to disconnect the controller when you are done as the controller will stay on when connected and drain the battery.

Using generic/clone controllers

Using generic/clone Dualshock controllers is possible, however there is an issue that may require to install a patched package. The default Bluetooth protocol stack does not detect some of the clone controllers. The bluez-ps3 AUR package is a version patched to be able to detect them. bluez-plugins-ps3 AUR is another package that only patch the bluez-plugins may work for some controllers.

Tips and Tricks

Gamepad over network

If you want to use your gamepad with another computer over a network, you can use USB/IP or netstick-git AUR to do this.

Troubleshooting

Device permissions

Gamepad devices are affected by udev rules: unless they grant access to the device, it simply will not be readable by users. This section investigates the possibility of you already having a configuration file handling this.

Any gamepad device, regardless of whether it is over USB or Bluetooth, is handled by the «input» subsystem of the kernel, corresponding with /dev/input . It’s also common for udev rules to target the «hidraw» kernel module. Combining these, we can understand udev’s handling of these devices by inspecting the configuration shipped by packages:

Some examples of applications which ship noteworthy rules:

  • systemd’s default rules set the group of all input devices to input , and the mode of joystick devices to 664 .
  • Steam ships udev rules allowing access to a variety of controllers. See this Steam discussion for further info about the contents of the rules.
  • Dolphin emulator ships udev rules allowing access to controllers it supports.

If your system does not already happen to have a udev rule for the device you want to use, you can either write one yourself or install the game-devices-udev AUR package and restart your computer.

Joystick moving mouse

Sometimes USB gamepad can be recognized as HID mouse (only in X, it is still being installed as /dev/input/js0 as well). Known issue is cursor being moved by the joystick, or escaping to en edge of a screen right after plugin. If your application can detect gamepad by itself, you can remove the xf86-input-joystick AUR package.

A more gentle solution is described in #Disable joystick from controlling mouse.

Gamepad is not working in FNA/SDL based games

If you are using a generic non-widely used gamepad you may encounter issues getting the gamepad recognized in games based on SDL. Since 14 May 2015, FNA supports dropping a gamecontrollerdb.txt into the executable folder of the game, for example the SDL_GameControllerDB.

As an alternative and for older versions of FNA or for SDL you can generate a mapping yourself by downloading the SDL source code via https://libsdl.org/, navigating to /test/ , compile the controllermap.c program (alternatively install controllermap AUR ) and run the test. After completing the controllermap test, a GUID will be generated that you can put in the SDL_GAMECONTROLLERCONFIG environment variable which will then be picked up by SDL/FNA games. For example:

Gamepad is not recognized by all programs

Some software, Steam for example, will only recognize the first gamepad it encounters. Due to a bug in the driver for Microsoft wireless periphery devices this can in fact be the bluetooth dongle. If you find you have a /dev/input/js* and /dev/input/event* belonging to you keyboard’s bluetooth transceiver you can get automatically get rid of it by creating according udev rules. Create a / :

Correct the KERNELS==». » to match your device. The correct value can be found by running

Assuming the device in question is /dev/input/js0 . After you placed the rule reload the rules with

Then replug the device making you trouble. The joystick and event devices should be gone, although their number will still be reserved. But the files are out of the way.

Vibration does not work in certain Windows games

Some Windows games look for an Xbox 360 controller in particular, causing vibration to not work even with otherwise functional XInput gamepads. One example of such game is Inside.

As a work-around for these games:

  • Unload the xpad kernel module.
  • Launch xboxdrv , including Xbox 360 mimicking gamepad and with vibration support:

Steam Controller

Steam Controller not pairing

There are some unknown cases where the packaged udev rule for the Steam controller does not work (FS#47330). The most reliable workaround is to make the controller world readable. Copy the rule /usr/lib/udev/rules.d/70-steam-controller.rules to /etc/udev/rules.d with a later prioritiy and change anything that says MODE=»0660″ to MODE=»0666» e.g.

You may have to reboot in order for the change to take effect.

Steam Controller makes a game crash or not recognized

If your Steam Controller is working well in Steam Big Picture mode, but not recognized by a game or the game starts crashing when you plug in the controller, this may be because of the native driver that has been added to the Linux kernel 4.18. Try to unload it, restart Steam and replug the controller.

The module name of the driver is hid_steam , so to unload it you may perform:

Xbox One and 360 controllers

Xbox One Wireless Gamepad detected but no inputs recognized

This can occur when using a third party Xbox One controller with the xpad or #xboxdrv drivers. Try switching to #xpadneo.

PlayStation 4 Controllers

If using Dualshock 4 devices through bluetooth, install the ds4drv AUR package and run it with the hidraw ( ds4drv —hidraw ) backend parameter.

Источник