I recently bought a gamepad off eBay, and it doesn't work correctly on Proton. The problem is that Proton is confused about the axis of the right analog stick. The easiest way to reproduce this is using the Proton control panel. Run these commands to launch the control panel (you'll need to replace the user name and game ID, but any game will do):
export STEAM_COMPAT_DATA_PATH=/home/matthias/.local/share/Steam/steamapps/compatdata/24740/pfx
"/home/matthias/.local/share/Steam/steamapps/common/Proton 5.0/proton" run control
Click on the game controller icon and then select the "test joystick" tab. There are four squares here that are labelled (X, Y), (Rx, Ry), (Z, Rz) and (POV) respectively. There's a dot in each of these that represents the position of the corresponding analog stick. When I move the left analog stick, the dot in the (X, Y) box moves accordingly, e. g. I push it up and the dot will move up. So the left analog stick works fine. However, when I push the right analog stick up and down, it will move the dot in the (Rx, Ry) box left and right. When I push it left and right, it will move the dot in the (Z, Rz) box left and right. This is not correct, a single analog stick should always control the dot in a single box and move it in the corresponding direction.
By contrast, this seems to work fine in Wine. When I run wine control and I go to the same "test joystick" tab, the right analog stick controls only the dot in the (Z, Rz) box and everything works like it's supposed to: I push the analog stick up and the dot moves up, I push it right and the dot moves right etc.
This bug isn't limited to the control panel. In the game "Burnout Paradise", one is supposed to be able to control the camera with the right analog stick. Pushing it up and down should tilt the camera, while pushing it left and right should rotate it. However in Proton, pushing it left and right will do nothing, and pushing it up and down will rotate the camera instead of tilting it.
Another interesting fact is that my gamepad shows up twice in the wine control panel: once as "Microntek USB Joystick (event)" and once as "Microntek USB Joystick (js)". The former works correctly, while the latter shows the same buggy behaviour as in the Proton control panel. This is probably related to the fact that the Linux kernel offers two different ways to interface with game controllers: the evdev interface and the legacy joydev interface. When I rmmod joydev, the (js) device doesn't show up in the wine control panel any longer.
In Proton, the device only shows up once and it doesn't have an (event) or (js) suffix. My first thought was that Proton might be using the joydev interface and thus get it wrong in the same way as the (js) device in Wine, since the behaviour is the same. However that doesn't seem to be the case, because the device doesn't go away when I rmmod joydev. So I'm not quite sure what to make of all that, but perhaps it helps you to fix this issue.
Hi,
I recently bought a gamepad off eBay, and it doesn't work correctly on Proton. The problem is that Proton is confused about the axis of the right analog stick. The easiest way to reproduce this is using the Proton control panel. Run these commands to launch the control panel (you'll need to replace the user name and game ID, but any game will do):
Click on the game controller icon and then select the "test joystick" tab. There are four squares here that are labelled (X, Y), (Rx, Ry), (Z, Rz) and (POV) respectively. There's a dot in each of these that represents the position of the corresponding analog stick. When I move the left analog stick, the dot in the (X, Y) box moves accordingly, e. g. I push it up and the dot will move up. So the left analog stick works fine. However, when I push the right analog stick up and down, it will move the dot in the (Rx, Ry) box left and right. When I push it left and right, it will move the dot in the (Z, Rz) box left and right. This is not correct, a single analog stick should always control the dot in a single box and move it in the corresponding direction.
By contrast, this seems to work fine in Wine. When I run
wine controland I go to the same "test joystick" tab, the right analog stick controls only the dot in the (Z, Rz) box and everything works like it's supposed to: I push the analog stick up and the dot moves up, I push it right and the dot moves right etc.This bug isn't limited to the control panel. In the game "Burnout Paradise", one is supposed to be able to control the camera with the right analog stick. Pushing it up and down should tilt the camera, while pushing it left and right should rotate it. However in Proton, pushing it left and right will do nothing, and pushing it up and down will rotate the camera instead of tilting it.
Another interesting fact is that my gamepad shows up twice in the wine control panel: once as "Microntek USB Joystick (event)" and once as "Microntek USB Joystick (js)". The former works correctly, while the latter shows the same buggy behaviour as in the Proton control panel. This is probably related to the fact that the Linux kernel offers two different ways to interface with game controllers: the
evdevinterface and the legacyjoydevinterface. When Irmmod joydev, the(js)device doesn't show up in the wine control panel any longer.In Proton, the device only shows up once and it doesn't have an
(event)or(js)suffix. My first thought was that Proton might be using thejoydevinterface and thus get it wrong in the same way as the(js)device in Wine, since the behaviour is the same. However that doesn't seem to be the case, because the device doesn't go away when Irmmod joydev. So I'm not quite sure what to make of all that, but perhaps it helps you to fix this issue.I bought it here:
https://www.ebay.de/itm/Verkabelte-XBOX-Controller-USB-Joypad-Für-Microsoft-PC-Windows-7-Gamepad-st/283600551915?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
lsusb -videntifies it as follows: