Gamepads on Linux: Overview

Introduction

As a Linux gamer, more than likely you have a preferred gamepad of choice lying on your desk that you snuggle up to when using emulation, playing certain games on Steam, or you might even have a dedicated box set up for 10-foot gaming. It could be that old, yet re-knowned Xbox 360 controller. It could be the latest controller from Sony. You might even have a Wiimote and Nunchuk that you’ve used time-to-time for emulating Wii games on Dolphin. You might have yourself a steering wheel dedicated to the various racing simulators out there.

There’s a lot of options out there. In actuality, the general design of the controller hasn’t changed much since the invention of the Dualshock in 1997. Nintendo added trigger sensitivity and “click” with the shoulder buttons on the GameCube controller, but many controllers today still have the same sort of schematic, with:

  • A four-button face
  • Twin analog sticks
  • A D-pad
  • Left and right shoulder buttons
  • Left and right triggers
  • A Guide button
  • Select and Start buttons

Valve really tried to make their Steam controller unique with the twin touchpads instead of a D-pad or a right analog stick, and though it took everybody some time to adjust to, they found it was a great middleground between using a gamepad and a keyboard and mouse, thanks to the built-in gyroscope. Unfortunately, Valve scrapped production of the controller in the last quarter of 2019 to dedicate more resources to their VR avenue, but the controller they made just goes to show they’re not afraid of breaking out of the typical cycle everybody else uses and come up with things nobody has ever tried.

Enough of the history; I’m sure you’re here to find out which gamepad is the best for each particular situation on Linux. As my fellow editors will tell you, I seem to be a bit of a nutcase when it comes to controllers. I own the following:

  • Sony DualSense
  • Xbox Series X pad
  • Sony DS4
  • Logitech G29 racing wheel
  • Official and third-party joycons
  • Third-party Switch Pro controller
  • Steam Controller
  • (Broken) USB GameCube controller
  • Valve Knuckles (for VR)

Which is the right one? That’s like asking whether you want mayonaise or horseradish on your chicken cutlet. There’s no right answer here. Every person has their own tastes, and these opinions are just mine, but hopefully I can help you make the right choice if you’re in the market for a controller.

To get this out of the way, before I begin, you may want to check out some of these articles that we’ve had in times past about getting controllers to work nicely on Linux, regardless of what vendor they come from:

Now, if you want a more in-depth review on any particular controller, we have those as well:

  • DualSense — a bit outdated since I wrote that back in November; the official driver is available in the AUR and Steam has most of its features baked in
  • Xbox Series X pad — this suffers from Bluetooth connectivity issues. Even with the official adapter, connectivity can be a bit unstable at times
  • DS4 — a very reliable controller that most distros have support for
  • Steam controller — don’t even know what I was talking about when I wrote this; it has a lot of features that I didn’t cover in the review, so you’re probably better off reading my description of it below
  • Knuckles controllers — patola took a deep crash course explaining all the aspects of VR on Linux, in particular the Valve Index. In it he mentions that VR without the controllers “is like being at the top of a mountain and looking at the landscape: you can admire, you can feel the distance between you and all the elements in the landscape, but you can’t touch them, you can’t properly interact…Conversely, when you extend your arms and feel the haptic feedback of ‘touching’ something, or when you can infer the position of something via the 3D sound, that makes you a part of the scene.”

Alright, now let’s di-sect these gamepads and see which one is right for you!

Options for Gamepads

Sony DualSense

Gamepads: Sony DualSense

I listed this first as it’s probably my favorite of them all. It feels very solid in the hands and brings a few improvements over the DS4. The LED is more subtle and it has a longer-lasting battery. The built-in mic is of great quality; if you lack any microphones, you’ll probably look like an idiot talking to the controller during video conferencing, but at least you’ll have something to talk with. The DS also uses XInput, so you’ll no longer need to force Steam Input on games that don’t support DirectInput.

Unfortunately, Linux won’t currently be able to reap the more advanced features: haptic feedback and adaptive triggers. Only the PS5 supports these. The driver maintainer mentioned this:

These features require a large amount of data and complex data structures. It is not clear how to expose these. The current Evdev and FF frameworks are too limiting. We hope to have a dialog on how to expose these over time in a generic way.

So who knows, maybe we actually will be able to see game engines incorporate this as time goes on. As for the haptic feedback, there’s already a semi-solution that vibrates the controller based on audio output. Plug the controller in via USB, then enable simultaneous sound output in your sound settings. On PulseAudio, this is possible using PulseAudio Preferences.

Speaking of the driver, Phoronix has reported that it will be integrated with kernel 5.12, so if you’re not on Arch and you don’t want to risk adding the patches and compiling the kernel yourself, you won’t have to do that. Installing the driver will allow the controller to work on games outside of Steam; it will also give you battery info, gyroscope, and basic vibration support.

P.S.: check out the DualSense LED configurator if you want to customize the LEDs!

Xbox Series X Pad

Gamepads: Xbox Series X Controller

You’re honestly better off keeping the Xbox One controller if you have that. There’s not much of a point getting the Series X version. It’s slightly smaller, has a different D-pad, padded shoulder buttons, and a Share button, that’s it (the Share button doesn’t even work on Linux right now).

It works much the same as its predecessor. Good luck getting this controller to connect through Bluetooth. You’ll need a low energy Bluetooth adapter and the third-party xpadneo driver. Don’t get me started on how much frustration I had trying to get this to work on my end.

Fortunately, there’s a different wireless capability built-in to the controller that works better. You’ll need a wireless adapter that connects to an available USB port on your computer. Then, you’ll need to use xow to get communication to work. My only issue so far with this is the controller will quickly disconnect if there’s no input in, say, less than five minutes. You’ll constantly need to be tapping buttons or moving the analog sticks if you’re in the middle of watching an in-game cutscene to keep the connection alive. If the controller disconnects, it will take a few seconds to re-connect.

Maybe you’re the old-fashioned type that prefers a wired connection through USB. This connection works out of the box on most Linux distributions, vibration and all that included. Another benefit of having a wired connection is the controller will have the least amount of latency, if you care about that. Not that I’ve really seen a difference with wireless.

One benefit that some may prefer is this controller still uses AA batteries as its power source. You can also use a battery pack, but that tacks on another $25. Easily replace the batteries with a fresh pair to keep your wireless gaming sessions going with minimal downtime. AA batteries also keep the weight of the gamepad down; it’s definitely lighter than the DualSense, if that matters to you.

As most games uses Xbox-style button prompts, the Xbox controller has sort of been the de-facto standard for PC gaming. The problem that I have with the new Series X controller is not only hasn’t Microsoft provided official drivers for it on Linux, but there’s practically no difference with this over the Xbox One pad. Microsoft didn’t even go so far as to include a gyroscope or LED customization. Upgrading your existing Xbox controllers is a waste of money.

Sony DualShock 4

Gamepads: Sony Dual Shock 4

Ah… the good ol’ DualShock 4 from Sony. It’s been a long, great staple in the Linux community, and for good reason. Most distros will have a kernel with baked-in driver support, meaning you should easily be able to monitor battery life from the taskbar if the DS4 is connected via Bluetooth, as well as have support for vibration and gyroscope.

There’s two issues here, however:

  1. Some games only support Xbox-style button icons
  2. The DS4 uses DirectInput, the older standard versus the newer XInput, meaning some games don’t support it

The good thing is I’m seeing more and more games over time have support for both Xbox and PlayStation-style button prompts, and you can easily switch between the two in the game’s Options menu (an example being Dragon Ball Z: Kakarot). If the game doesn’t have PS icons and you were really desparate, you could 3D print some ABXY buttons and engineer them to fit inside the shell, get some ABXY stickers to slap over the buttons, or just take a marker and write the letter over the symbol. Not that I’d recommend doing any of that though.

As for DirectInput, fortunately Steam has a built-in function that forces the game to use Steam Input, or XInput. Just right-click the game you’re looking to play on Steam, select “Properties…” and under the “Controller” tab, select “Enable Steam Input” from the drop-down menu:

Force Steam Input example

If you’re playing a game that isn’t on Steam, you’ll have to add that game as a shortcut on Steam to use Steam Input.

At the current price of $60 for an official controller from Amazon, you’re probably better off getting a third-party alternative or getting the DualSense. The DualSense may be $10 more, but I think the extra features are worth it. On the other hand, if you already have a DS4, it will still fill your gamepad needs for a long time without needing to get the next-gen controller.

Xbox 360 Controller

Gamepads: Xbox 360 controller

One of the oldest controllers available on the market (since the release of the Xbox360 console), it is also the one with the best compatibility and support across the board. Its design may feel a little old now, but it is still plenty functional and considered the standard when it comes to controls in most games, as controllers that came after it more or less followed the same design. You should not need to install any kind of driver to have it properly supported, whether it’s the wired version (USB) or the wireless version (which require a proprietary wireless adapter, no BT here). It uses regular batteries so it’s easy to swap new ones in the middle of a game if required.

Steam Controller

Gamepads: Steam Controller

This controller was met with a lot of criticism when it first launched late 2015, simply because of the fact Valve went above and beyond the ordinary and integrated some unique measures, such as back paddle buttons and circular trackpads. What people didn’t take into account, however, was how precise it was when it came to gyroscopic aiming (some didn’t even know it had a gyroscope!). Technically, gyroscopes were introduced in prior game controllers like the Wii Remote Plus as well as the Playstation Move years before, but not really into the more regular shaped-controllers that we are used to play with.

For people who have never taken the time to use a keyboard and mouse for gaming, this was a good intermediary device for getting that headshot in a first-person-shooter. It was now possible to play these sort of games from the couch. The back paddle buttons made it that much faster and easier to reload or crouch, since they’re located closer to the player’s fingers.

You look at modern gamepads now, and you know for a fact the giants at Microsoft, Sony peaked over Valve’s shoulder when it came to their design. The Xbox Elite controllers incorporate back paddle buttons. The DS4/DualSense and the Switch Pro controller have baked-in gyroscope support. The Steam controller was ahead of its time. Even though the controller has been scrapped, its legacy lives on with Valve’s Knuckles controllers in terms of button design, and that other companies modeled their controllers following Valve’s.

It’s got the ABXY button layout, minimal latency with the wireless USB adapter they provided, and in the event you lost the adapter, you could use Bluetooth after upgrading the firmware. I don’t need to cover it’s compatibility on Linux; it works just fine. The rubber on my thumbstick wore off, and one of the shoulder buttons stopped working, but I was able to fix the bumper by taking the controller apart and super-gluing the broken piece of plastic back on. As for the thumbstick, I just used a stick cover.

One of the selling points of the Steam Controller was also that it was a programmable controller, using the Steam Controller API: buttons and haptic sensors could be remapped by gamers in myriads of ways, and Steam made it possible to save and exchange configurations for specific games: a kind of game controller layouts marketplace. Several years later, other controllers supported by Steam could also be remapped in the same way, albeit with less flexibility.

There’s a good video that goes into more detail concerning the life and death of the Steam controller if you are interested to know more.

Joycons (Official Vs. Third-Party)

Gamepads: Switch Joycons

I’m actually impressed at how easy it is to connect the official Joycons from the Nintendo Switch to Bluetooth on Linux. Just hold the sync button on the side, and it will start pairing mode. Then you can add the device under your Bluetooth device settings. The LEDs will continue to flicker once connected, but it will work just fine. I personally wouldn’t use these though — unless you don’t have any other gamepads — because:

  • the analog sticks suffer from horrible drift issues
  • the buttons are flat, small, and too close together
  • the triggers are flat, and as such, they have no sensitivity
  • you may not have enough buttons to use if you use a single Joycon

Steam will detect the joycon as a generic gamepad, so you may need to enable Switch Pro controller support in BPM and re-configure the button layout. I had to do so myself since the controls were off for Gang Beasts.

Is it possible to connect both the left and right Joycons and use as a single gamepad? Well, that I wouldn’t know…let’s just say I got carried away taking apart the left Joycon that I have and I’ve discovered it’s way too tedious to reconnect the tiny battery back into the tiny socket it belongs to. I was hoping I could replace the faulty analog sticks that I have but then that happened. That’s when I decided to get these third-party alternatives.

These are a really good pair of Joycons. There’s programmable LEDs by the sticks, a turbo function, adjustable vibration strength, two back buttons — which can be mapped to any button that you want, and the size of the joycons are big enough that when paired together, it feels like an actual controller. Surprisingly light as well. However, it does have a few drawbacks:

  • battery is 500 mAh; only lasts about three or four hours
  • vibration, even on the strongest setting, is pretty weak
  • mushy D-pad
  • with just the right amount of force, the Joycons can fling right out of the little rectangular thing that connects the Joycons together

There’s a problem getting these to work with Linux, however. While I was able to pair them through Bluetooth, neither Steam or jstest picked them up. So I got this USB wireless adapter by Mayflash. This little brick works wonders: you can pair virtually any type of gamepad to this, whether the adapter is connected to a Linux machine, your Switch, PS3, Neogeo Mini (if any of you actually own that), or PS Classic. After inserting the adapter into my Linux system, I could easily pair one of the joycons to it. For the best support, including vibration, I made the adapter use XInput mode.

What about getting both Joycons to connect though and make it act like a single gamepad? It was a little tricky, but it’s possible:

  1. Pair one of the Joycons to the adapter by holding the Sync button on the Joycon, then pressing the button on the adapter
  2. Change input mode on the adapter by holding the button on it for a few seconds
  3. The adapter will look for devices again, but your Joycon will still be connected. Pair the second Joycon, repeating the same steps for #1
  4. The second joycon should now be paired. Change input once more on the adapter until it’s the one that you want. For me, while virtually all the input modes worked, XInput worked the best, and it was the only one that supported vibration

Bingo! You got yourself working third-party Joycons on Linux! I don’t know why you’d go as far as I did though; you’d need to shell out an extra $20 for the adapter. Still, it just goes to show Joycons work if you really insisted on using them and you don’t like the default ones supplied with the Switch.

Racing Wheels

Logitech G29 (Racing Wheel)

Gamepads: Logitech G29

I don’t use this very often, but it’s a great driving wheel that includes back paddles, gas/brake/clutch pedals, and even a stick shift. My wheel has PlayStation-style buttons on the wheel itself, and I can actually switch between PS3/PS4 modes (not like it had made any difference on my end though). The force feedback is tremendous as you turn the wheel and drift through a puddle of mud. If you’re on the edge of the circuit, the force feedback acts accordingly and makes it difficult to get back on track. It’s one of those things where you’d really have to try for yourself if you want to get an idea how it works.

No issues getting this to work on Linux. Here’s a few racing games we recommend to get you started using the G29 (or any other racing wheel, for that matter):

  • DRAG — this game got updated not too long ago to have official wheel support for the G29. Arguably the most realistic racing sim out there on the market
  • DIRT 4 — also pretty realistic, and like DRAG, there’s native Linux support for this title
  • DIRT Rally
  • F1 2017

If Proton isn’t much of an issue for you, you can try a game from the Project CARS series. All three games seem to work out of the box. While the G29 should work for the most part, there may not be as much customization to it compared to native Linux games. That’s where other software comes in:

  • Oversteer — steering wheel manager. Supports the G29 as well as many other models
  • pyLinuxWheel — mostly seems to be tailored for Logitech racing wheels, including the G29

As to what these applications can do for your wheel, well, they can change just about any setting: force feedback sensitivity, maximum rotation range, the ability to combine two pedals into one, you name it. So, you don’t need to worry about your racing wheel not being supported on Linux; there’s a ton of options available to us, thanks to these developers.

As for price, it’s going to hover around $300 with the shifter and $250 without it on Amazon. You can choose whether you want PlayStation-style buttons or Xbox-style. I have personally confirmed I have no issues with the PlayStation version, and I wouldn’t expect there to be any issue with the Xbox version either.

Other Controllers

There’s a lot of other gamepads we could cover, but aren’t necessarily suited to fit in their own subheading. The Knuckles controllers from Valve are apparently the only ones that work on Linux, so if you’re looking into VR, the Valve Index is the way to go. A YouTuber mentioned the triggers are flimsy and easy to break, so be very careful with your use of the Knuckles.

If you’re a Smash Brothers fan like cow_killer and enjoy playing such games via emulation or playing games with similar mechanics, such as Slap City, you may swear by the GameCube controller. There’s a ton of GameCube controller knockoffs that you can get on Amazon, including a few by Nintendo themselves. One cow_killer got the HORI pad that uses a USB connection and works on both the Switch and Linux. It was okay, but after some time the C-Stick wore out, and the left analog stick started drifting. Not something that he would personally recommend; you may want to try something else out of the many others out there.

Some games on Steam via Proton won’t run because of native GameCube controller support. Slap City comes to mind and, as such, you need to run a launch parameter to disable GC functionality. Not sure why it breaks Proton, but you experience with GC controllers may vary. Another instance of a game needing GC support disabled is Rushdown Revolt.

Cow_killer also has a third-party Switch Pro controller. It worked well for a while, but the same issue happened like with practically every other gamepad: the analog stick started drifting. On top of this, the battery life is horrible. But it works fine on Linux through USB (haven’t been able to pair it through Bluetooth). Here’s one thing to keep in mind: though first-party controllers are generally more expensive than third-party counterparts, they are often made of better quality and last much longer.

What’s Right For You?

Though this isn’t a complete guide by any means, we’ve tried to make it as comprehensive as possible to help you make the right choice when it comes to gamepads on Linux. Here’s a quick summary table:

ControllerCostWorks on Linux?Recommended?Other Notes
Sony DualSense$70YYFor best functionality, install the driver
Xbox Series X Pad$60MostlyNIntermittent wireless connectivity issues
Bluetooth support pretty much not there
Needs third-party driver support for wireless
Not worth upgrading if you have Xbox One pad
Xbox 360 Controller$20~50 (used)YYBoth wireless and wired work everywhere out of the box nowadays
Sony DS4$60YYMost distros have support for this and has long been a good choice
Switch
Official Joycons
~$70YNEasy Bluetooth connectivity
Controls will likely need to be configured in Steam BPM
Not very ergonomic
Knuckles (VR)$280YYApparently easy to break
Steam Controller~$50, Used only, DiscontinuedYYYou can find it on eBay, among other places.
Logitech G29 Racing Wheel~$300YYExcellent driving wheel

Of course, prices always fluctuate during COVID19, so take them with a grain of salt.

Our personal favorites?

  • Cow_killer: The DualSense.
  • Ekianjo: Xbox360 Controller
Uncategorized