Game Controller Support in Linux
Debian based distributions including Ubuntu and Mint will be referenced.
Steam support will be referenced
Contents
connect and test usb game controller
sudo joystick apt install jstest-gtk
If detected by the kernel joystick driver your game controller will appear as a device in /dev/input and will have a name in /dev/input/by-id.
- /dev/input/jsX maps to the Joystick API interface
- /dev/input/event* maps to the evdev legacy interface (this also includes other input devices such as mice and keyboards).
legacy Joystick API has names ending with -joystick while the evdev have names ending with -event-joystick
Utilities for Unsupported Games
There are a number of utilities that allow you to map keyboard and mouse actions to the controller. One that is highly effective and easy to configure is QJoyPad
QJoyPad:
sudo apt install qjoypad
There are limitations in using these utilities. Keyboard events mapped have the same limitations as playing with keyboard except the controller platform more readily exhibit these limitations. For example, multiple events simultaneously on the controller cannot be processed at the same time. So if you are pushing buttons to fire while trying jump, strafe, and duck you might notice some of these actions will not occur.
steam support
If Steam recognizes your controller you should not use QJoyPad also as both will interact with your game. Close QJoyPad to use the Steam game controller. If you wish to disable Steam from configuring your game controller and continue to use QJoyPad this is possible however simply disabling the controller within Steam settings is not effective. How to do this from the command line is discussed below.
Sony Playstation PS3 Sixaxis Support
Steam on Linux does not automatically recognize the controller.
You have different options to use the controller with games in Steam. The easiest is QJoyPad.
Success in game control achieved with QJoyPad
sudo apt install qjoypad
Steam Controller Family
Tested with the EasySMX controller designed to work with multiple gaming platforms including XBox and PS3. When connected it will automatically be recognized by Steam. This controller will be recognized as an XBox controller by Steam.
$ ls -laF /dev/input/by-id|grep -i game lrwxrwxrwx 1 root root 10 Dec 7 09:13 usb-HJC_Game_GAME_FOR_WINDOWS___00000000-event-joystick -> ../event14 lrwxrwxrwx 1 root root 6 Dec 7 09:13 usb-HJC_Game_GAME_FOR_WINDOWS___00000000-joystick -> ../js0
Note the two associated devices for the controller: event14 and js0
NOTE: Your assignments may be different. When reading substitute "event14" for eventXX representing the number for the device on your system. Also, you may have js1 instead of js0. The assumption here is only one controller is connected.
If you do not want Steam to recognize it so you can use QJoyPad then you must lock steam out of access to the device. When you use Steam settings to disable the controller many games still access the controller though Steam settings. The Steam game controller configuration is problematic and difficult to use. Sometimes it is necessary to prevent Steam from having any access to the device so you can use another utility such as QJoyPad.
- event14 - Steam recognizes the controller via event14 - if you lock steam out of /dev/input/event14 then Steam will not recognize the controller. This has to be done on every reboot.
- js0 - QJoyPad recognizes the controller via js0 - if you lock QJoyPad out of /dev/input/js0 then the utility will notify you it does not believe a controller is present.
Adjust file permissions to lock Steam out of access to the controller. Make sure Steam is closed.
$ sudo chmod 000 /dev/input/event14 $ ls -laF|grep event14 c---------+ 1 root input 13, 78 Dec 7 09:59 event14
We can now see that event14 file permissions do not permit access by any user.
Open QJoyPad and it will recognize the controller. Open Steam and Steam will be unaware of the controller, thus not interfering with its QJoyPad configuration.
If you disconnect and reconnect the controller, or if you reboot the computer the permissions will be restored and you will have to use console to execute the chmod command again.