
Originally Posted by
elanthis
This is largely because the Linux gamepad drivers are very lacking. You see a similar problem on OS X, which does not really have any proper dedicated gamepad services or quality drivers.
Take the Linux xbox driver, for example. The last time I looked at it, the driver doesn't support audio/headsets at all. It doesn't support battery lifetime notification at all. It has no notion of which controller is 1st player, 2nd player, etc.*, so each individual app has to redefine which is which. The driver does support the LEDs on the device, but it doesn't enforce any player-oriented friendly use of those lights, but rather just lets apps do whatever random confusing inconsistent useless crap it wants to with them. Well, sort of, since the LED device and the input device are completely separate devices in the device tree, and actually correlating them together is non-trivial, requires deep Linux kernel knowledge and some voodoo, and isn't wrapped by any existing developer-oriented library.
Many of the other gamepads are just supported by the generic joystick driver and hence are also missing all the advanced features and proper system-integration necessary for a quality gamepad gaming experience, as supported by the consoles and Windows.
* Some people don't believe me about this one because the Linux kernel driver will set the player-indicator lights on controllers when plugged in, so if you plug in two controllers, one is lit up as player 1 and the second as player 2. The problem is two-fold: first, there's no way to read the status of the lights nor does the Linux driver expose any property as to which number it assigned the controller, so apps have no way to know which controller is which. Second, Linux doesn't actually assign a player number, but rather fakes it with a cheap hack. The driver just does a "indicator_light = (global_controller_counter++) % 4" when a controller is plugged in. You can see this by unplugging a controller and plugging it back in (it'll go to the next player indicator, rather than remain the same number); more damning, plug in two controllers, then unplug and replug just one of them several times, and you'll quickly get both controllers to have the same player indicator lit up.