

As absurd as it might seem, the Steam Controller is technically not compatible with Linux.
What I mean by this: officially, it only works with Steam Input, which only works for Games you launch from Steam. It is not fully recognized and supported by Linux yet, and perhaps it never will.
EDIT: alright. This comment was obviously partially driven by frustration, I apologize for my tone. Since this comment received a low upvote/downvote ratio, I decided to educate myself a bit more on the topic. Here are my findings and understandings…
There are a lot of controllers. Some of them have a somewhat standard layout (think Xbox, Play Station, Switch), and some of them are just special (think controllers with special buttons or trackpads like the Steam Controller).
Computers and controllers can communicate through various protocols, such as XInput, DirectInput, “Switch mode”, or other less common ones. Some of these protocols expect a fixed layout with an exact number of buttons, joysticks, triggers, etc (such as XInput), some are more flexible. Some of these protocols support gyro, some don’t. Some of these protocols have a higher bandwidth, and thus can offer lower latency.
Option 1 (ideal): Linux can support some of these protocols through drivers. Unfortunately some of these drivers do not work very well with non-standard controllers. They might not see some buttons, they might not see some features such as gyro, or even worse (this is what I personally experienced) they can map buttons incorrectly. These inconsistencies can make a controller unusable without some tinkering, or they might limit the set of supported features for a specific controller.
Option 2 (per-game fallback): SDL is FOSS application-level layer to communicate with controllers. If a game makes use of SDL, it can support all controllers that its specific SDL version supports. Even if the operating system doesn’t fully recognize it. But this only works if the game does make use of SDL. If it doesn’t, you are out of luck.
Option 3 (user fallback): Steam Input is a proprietary (i.e. non-FOSS) way to try to bring some order in this mess. It takes any random controller, and allows the user to remap buttons to make it behave consistently, in a way that all games can understand. Even games that were never designed to be played with a controller can be coerced to work.
Basically, if Linux supports the controller fully and maps all features correctly (option 1, this is the ideal situation), it will work with every game that supports it. Otherwise, (option 2) games that implement SDL can try to make it work anyway. Otherwise (option 3) if the game doesn’t use SDL, or if its SDL version doesn’t recognize the controller, Steam Input can still make it work with some help from the user.
So… Why am I upset with Valve? That’s because, as far as I understand, Valve decided to make their controller only compatible with Steam Input. Some volunteers adapted it to make it work with SDL, but that only works for games that make use of an SDL layer. And what about Linux? Does Linux have a driver for this controller? No. As far as I understand, this controller doesn’t make use of any of the standard protocols, so a new ad-hoc driver would have to be developed just for this controller. Valve decided to reinvent the wheel.
There would be an “Option 0”, which some controllers support: protocol-switching. When you buy an Xbox controller, it runs as XInput. When you buy a Switch controller, it runs in “Switch mode”. When you buy a third party controller, it usually implements one or multiple of these, and allows the user to switch on-demand. This way the system is more likely to recognize it correctly using at least one mode.
As far as I understand, the newest Steam Controller does not support any of these. This is why I am upset with Valve. Hopefully they will eventually release a firmware update to add XInput or another standard protocol, then Linux will recognize this controller natively. But right now, the Steam Controller is technically not compatible with Linux.
(This is my understanding of the situation, some of my findings may be incorrect. Please correct me if this is the case!)








SDL is at the application layer though. Each individual game has to support it.