When your controller doesn't work, blame your keyboard

2025-12-11

I think it should be illegal for game companies and indie studios to drop so many nice games (and DLCs to games that I loved) during finals season, but my Linux machine tried to save my grades one last time by not letting me play with my controller.

More specifically, my Xbox One controller would pair fine with my Linux laptop, and Steam would detect it and launch Big Picture Mode when I hit the Xbox button. However, once I was actually in game, the controller wouldn’t work.

I tried enabling Steam Input, to see if having it go through Steam’s controller translation layer would maybe make the game detect it, but it wasn’t working. I wondered how controllers were represented in the Linux kernel and poked around in /dev/input, and sure enough, looking through that directory yielded me js0. Short for joystick-0, apparently.

So if I cat /dev/input/js0, I should see a bunch of gibberish printed to the console whenever I interacted with my controller, right? But I got absolutely nothing.

And then I noticed js1.

/dev/input, like other device folders, has a neat little by-id folder inside that maps devices via their identifier and not the order in which they connected to the system. And sure enough:

$ ls /dev/input/by-id/*joystick
/dev/input/by-id/usb-Keychron_Keychron_K2_Pro-if02-event-joystick

I unplugged my external keyboard from my laptop and restarted the game. And sure enough, my game started to pick up my controller input again.

Now to keep my self-preservation instincts until next Friday.