How do I use a gamepad?

I'm planning on buying a game-pad for playing games on emulators (like ZSNES) and I have read a few articles on the net related to some game-pads not working in Linux especially when playing games via Wine. But that only for Wine, right? There are some questions in my mind, like:

  1. Does that mean that all native Ubuntu games work fine with any game-pads OR this too has specific game-pads? that work on Ubuntu(12.04).

  2. What if I buy a random game-pad say Unofficial/Fake, will it be recognize it as a game-pad or will Ubuntu ignore it?

  3. If it gets recognized how will I/it find the appropriate drivers required for using the hardware? OR will drivers not be necessary and I can start playing, right after I bought it and plugged it in?


Solution 1:

All gamepads/joysticks (5 or so) I have tried so far did work. For configuration install qjoypad or jstest-gtk. Qjoypad worked better if I remember correctly.

Solution 2:

Even though turbo has already mentioned qjoypad very briefly, it is worth providing a longer answer, as the very latest (and best) version needs compiling, as it is not in the repositories and there is currently no package available at the site either. Secondly, there are general older blog guides regarding qjoypad, but it would be useful to have an up-to-date one for Ubuntu.

Introduction

What I do with Wine and Dosbox when there are problems with games and controller support (which is most of the time) is to use a program such as qjoypad. This utility

Incorporates your gaming devices into any XWindows program. qjoyPad takes input from a gamepad or joystick and translates it into key strokes or mouse actions, letting you control any XWindows program with your game controller.

so that it doesn't matter whether wine or the actual game within wine supports the joypad, you will generally be able to use it.

Compilation

Install the dependencies (and build-essential if necessary) with:

sudo apt-get install libxtst6 libxtst-dev libx11-dev checkinstall build-essential

You will need the QT libraries to run the program, and the QT dev libraries to compile qjoypad, as noted on the official site, so you must also install the entire QT development kit with

sudo apt-get install libqt4-dev

This is very important as you are using the QT libraries to build the gui.

Download the latest version (currently 4.10) from Sourceforge and then extract it with

tar xzvf qjoypad-4.1.0.tar.gz

Then cd to that folder and then cd to the src folder and run

./configure
make
sudo checkinstall --pkgname=qjoypad --pkgversion=4.1.0 --provides=qjoypad

Setup

Now connect your joystick or gamepad and run from terminal qjoypad & or select it from the launcher menu.

When you load up qjoypad (screenshot one) you will see button numbers such as button 1, button 2, etc. If you wish to see what these correspond to on your joystick you could install evtest and run evtest and then select the device number of your gamepad to get the following information:

Input device ID: bus 0x3 vendor 0x45e product 0x7 version 0x100
Input device name: "Microsoft® Microsoft® SideWinder® Game Pad USB"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 304 (BTN_A)
    Event code 305 (BTN_B)
    Event code 306 (BTN_C)
    Event code 307 (BTN_X)
    Event code 308 (BTN_Y)
    Event code 309 (BTN_Z)
    Event code 310 (BTN_TL)
    Event code 311 (BTN_TR)
    Event code 312 (BTN_TL2)
    Event code 313 (BTN_TR2)

The button order here reflects that in qjoypad, so qjoypad's button 1 is BTN_A on the controller, etc.

(Your joypad layouts are stored in ~/.qjoypad3 if you want to back them up.)

The readme in the download with the source code also has some useful information about setting up and running qjoypad.

  1. Click add to create a new profile and name it, and then you can assign all the buttons available, but you must click update to save your settings.

    screenshot

  2. You can fully configure all the axis points, and both sidewinder type and dual analog devices seem to be configurable. More details on this are available in this article and on the useful readme included with the source code download.

    screenshot

Final Thoughts

Qjoypad needs to be running (with your correct joypad game profile selected) when dosbox or wine is launched.

You need to define your keyboard bindings first in the game in which you want to use qjoypad. Very often in your game itself the setting should be set to keyboard and not joystick. This is what I have found with Dosbox games, and it is probably the same for Wine games. Both for gaming and for controlling any program running in an X window, qjoypad is a very useful utility.

Solution 3:

Generally speaking, all USB gamepads that follow the HID spec work in Linux without a need for special drivers, which means pretty much all normal PC gamepads will work. Support might however be limited to basic features and things like rumble might not be supported.

Console gamepads like the Xbox360 gamepad, Wiimote or Dualshock will work in Linux as well, but require some additional work (i.e. drivers such as qtsixa, cwiid, xpad or xboxdrv).