protonscr

Gamepad issues with Big Picture

steamclosed reviewedGeneral controller / Steam Input
ValveSoftware/steam-for-linux#3622 · opened 2014-12-07 by vniksic · updated 2025-07-05 · 2 comments · github
Vvniksic 2014-12-07 github

I'll try to be as brief and as concise as possible. I've bought a nice gamepad, here is what dmesg reports:
[13521.756756] input: MY-POWER CO.,LTD. 2In1 USB Joystick as /devices/pci0000:00/0000:00:13.0/usb2/2-5/2-5:1.0/0003:0E8F:0003.0005/input/input19
[13521.757446] pantherlord 0003:0E8F:0003.0005: input,hidraw3: USB HID v1.10 Joystick [MY-POWER CO.,LTD. 2In1 USB Joystick] on usb-0000:00:13.0-5/input0
[13521.757479] pantherlord 0003:0E8F:0003.0005: Force feedback for PantherLord/GreenAsia devices by Anssi Hannula [email protected]
$ sudo lsmod | grep usb
usbhid 48595 0
hid 102220 3 hid_pl,hid_generic,usbhid
usbcore 199381 5 ohci_hcd,ohci_pci,ehci_hcd,ehci_pci,usbhid
usb_common 12440 1 usbcore

$ sudo lsmod | grep joy
joydev 17063 0

Non-steam games on linux work without problems with the controller, like emulators, X-Moto etc. Steam and games under it are the issue.

OK, so far so good. I started steam, went on to configure the gamepad. Here's where the trouble begins. It asks me to assign all the buttons, and I do, one by one. But when I get to the one where it's the simple up/down/left/right, I can only assign two of them, and they are marked Axis 0 and Axis 1.

For example, I set UP = Axis 0 (I simply press it on the gamepad, to be clear), LEFT = Axis 1, DOWN = (here I press the down button of course) but it's assigned as Axis 0, and the UP is overwritten!! The same goes for setting the RIGHT, the LEFT gets overwritten. Of course, the game(s) are unplayable.
I took a look at what symlink is in /dev/input/by-id... on /dev/input/event15:

Testing ... (interrupt to exit)

PRESSED UP

Event: time 1417885238.782739, type 3 (EV_ABS), code 17 (ABS_HAT0Y), value -1
Event: time 1417885238.782739, -------------- EV_SYN ------------
Event: time 1417885238.886742, type 3 (EV_ABS), code 17 (ABS_HAT0Y), value 0
Event: time 1417885238.886742, -------------- EV_SYN ------------

PRESSED LEFT

Event: time 1417885239.782716, type 3 (EV_ABS), code 16 (ABS_HAT0X), value -1
Event: time 1417885239.782716, -------------- EV_SYN ------------
Event: time 1417885239.902729, type 3 (EV_ABS), code 16 (ABS_HAT0X), value 0
Event: time 1417885239.902729, -------------- EV_SYN ------------

PRESSED DOWN

Event: time 1417885240.806705, type 3 (EV_ABS), code 17 (ABS_HAT0Y), value 1
Event: time 1417885240.806705, -------------- EV_SYN ------------
Event: time 1417885240.894721, type 3 (EV_ABS), code 17 (ABS_HAT0Y), value 0
Event: time 1417885240.894721, -------------- EV_SYN ------------

PRESSED RIGHT

Event: time 1417885241.270709, type 3 (EV_ABS), code 16 (ABS_HAT0X), value 1
Event: time 1417885241.270709, -------------- EV_SYN ------------
Event: time 1417885241.350716, type 3 (EV_ABS), code 16 (ABS_HAT0X), value 0
Event: time 1417885241.350716, -------------- EV_SYN ------------

The values received from the joystick ARE NOT the same for left/right for example.

OK, moving on, I searched the files that were modified last, and this is what I found:
~/.local/share/Steam/config/config.vdf:

"SDL_GamepadBind_PendingUpload_Map" "030000008f0e00000300000010010000,jjj,a:b2,b:,y:b0,x:,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpdown:a1,dpright:a0,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,dpup:,dpleft:,leftx:h0.8,lefty:h0.2,rightx:b3,righty:b1,"
"SDL_GamepadBind_PendingUpload_Name" "jjj"
"SDL_GamepadBind_PendingUpload_GUID" "030000008f0e00000300000010010000"
"SDL_GamepadBind" "030000008f0e00000300000010010000,jjj,a:b2,b:,y:b0,x:,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpdown:a1,dpright:a0,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,dpup:,dpleft:,leftx:h0.8,lefty:h0.2,rightx:b3,righty:b1,"

As you can see, this is a standard SDL mapping of some sort, but some of the controls are simply not entered. So it goes, GUID, profile_name, PHYSICAL_KEY:MAPPING. Out of frustration after trying 5 or 6 times, I simply saved this as "jjj". Anyway, I googled the GUID to see if I can find anything and I stumble upon this:
https://github.com/gabomdq/SDL_GameControllerDB/blob/master/gamecontrollerdb.txt
If you search for the big GUID, you'll find my GreenAsia controller. I think this is mapped as it should be mapped.

So, after "jjj', I inserted: a:b2,b:b1,y:b0[...]

Started up steam and the game again, no effect. I take a look at the file again, I see it's been overwritten with the same half-missing config. So I make the file read only, perms 444, and it's not overwritten anymore, but unfortunately, still the same. I can only move right, and I can only go up (or jump in games). The ones on the left, the A, B, C, D seem to be working fine. Obviously it didn't do the trick, I'm unfamiliar with SDL and its inner workings to know exactly how is this communication done in accordance with Steam etc.

Any ideas? How can I be more verbose with debugging info. I feel this is something minor to fix. This is very frustrating. :)

MManagor 2025-05-26 github

Is this still an issue with the modern Steam client?

Kkisak-valve maintainer 2025-07-05 github

Closing pending feedback.

Launch options