steam-runtime
steam-runtime copied to clipboard
Steam Linux Runtime does not recognize steering wheel for car games (layer of compatibility)
Hi,
I tried to play with DiRT Rally activating the layer of compatibility Steam Linux Runtime and the game recognize as input a gamepad but not a steering wheel (my wheel is logitech g29)
If I play on linux without this layer of compatibility the game recognize the wheel properly
For input issues, it is usually useful to use steam-runtime-input-monitor. This is a diagnostic tool that comes with the Steam Runtime.
Unplug the steering wheel, then run steam-runtime-input-monitor from a terminal as:
~/.steam/root/ubuntu12_32/steam-runtime/run.sh -- steam-runtime-input-monitor
You'll get lots of JSON describing your other input devices, which you can ignore, followed by {"all-for-now": true}.
Plug in your steering wheel, and you should see some more JSON appear. Press Ctrl+C to exit from the steam-runtime-input-monitor. Everything from {"all-for-now": true} down to the point where you pressed Ctrl+C will be a description of your steering wheel.
Please provide the output as an attachment, gist or code block.
Are you referring to DiRT Rally from 2015, or a later entry from the series?
Many games that were ported to Linux by Feral Interactive bundle their own version of SDL. I suspect that what's happening here might be that the game's bundled version of SDL is too old to have https://github.com/libsdl-org/SDL/issues/3889 and https://github.com/libsdl-org/SDL/pull/4098 included in it.
If that's the problem, then the Steam Runtime developers cannot fix it - only the game's developers can. However, you might be able to work around it by setting the launch options to
SDL_DYNAMIC_API=/usr/lib/x86_64-linux-gnu/libSDL-2.0.so.0 %command%
if it's a 64-bit game, or
SDL_DYNAMIC_API=/usr/lib/i386-linux-gnu/libSDL-2.0.so.0 %command%
if it's 32-bit.
Note that the compatibility report for Dirt 4 has it set to run under Proton (a specific version even). So the problems may lie with the title to begin with. (I can't confirm if this nugget is relevant without more information from @geluxred, but it seems intentionally switched from it's recommended default runtime)
Hi,
The game is DiRT Rally from 2015 and it was ported by feral interactive. The game works ok when I activate the layer of compatibility Steam Linux Runtime. The only problem is that the game does not recognize as input a steering wheel, although it recognize a gamepad correctly.
The reason for using Steam Linux Runtime is because the game has stopped working by default but it works fine if I activate Steam Linux Runtime. I have spoken with Feral support and they didn't know anything about Steam Linux Runtime and they have provided me a beta version to activate on Steam which has worked
However it is not the first time that a linux game breaks in some update (of the system or the game) and it works fine if I active Steam Linux Runtime. I also tried to use proton but the game does not start with the last version of proton (I only test with this). But in the protondb.com the comments says that online does not working.
That's why I think it would be interesting if there were no problems with any type of input because it seems that the games are more stable by not breaking so easily with Steam Linux Runtime. I can try to test other similar games like DiRT 5 or F2017 to see if the problem with wheel is only with DiRT Rally or if it's generic. I have no tried with others games with others devices (X4, Everspace..) to test it (pedals, joystick...), but I could.
The steering wheel does appear in the steam-runtime-input-monitor log, so perhaps nothing can be done by Steam developers. As I already mentioned, Feral support did not know anything about Steam Linux Runtime.
I have tried change the launch options (SDL_DYNAMIC_API) but the result is the same. The game works fine but it does not recognize as input the wheel.
The differences in the json off steam-runtime-input-monitor when I plug the wheel is the next text:
{
"added" : {
"interface_flags" : [
"raw-hid"
],
"type_flags" : [
],
"dev_node" : "/dev/hidraw10",
"subsystem" : "hidraw",
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F/hidraw/hidraw10",
"bus_type" : "0x0003",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"version" : "0x8900",
"udev_properties" : [
"DEVNAME=/dev/hidraw10",
"DEVPATH=/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F/hidraw/hidraw10",
"MAJOR=506",
"MINOR=10",
"SUBSYSTEM=hidraw"
],
"hid_ancestor" : {
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F",
"name" : null,
"bus_type" : "0x0003",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"uniq" : null
},
"usb_device_ancestor" : {
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"version" : "0x8900",
"manufacturer" : "Logitech",
"product" : "G29 Driving Force Racing Wheel",
"serial" : null
}
}
}
{
"added" : {
"interface_flags" : [
"event",
"readable",
"read-write"
],
"type_flags" : [
"joystick"
],
"dev_node" : "/dev/input/event19",
"subsystem" : "input",
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F/input/input40/event19",
"bus_type" : "0x0003",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"version" : "0x0111",
"evdev" : {
"types" : [
"SYN",
"KEY",
"ABS",
"MSC",
"FF"
],
"absolute_axes" : [
"X",
"Y",
"Z",
"RZ",
"HAT0X",
"HAT0Y"
],
"relative_axes" : [
],
"keys" : [
"BTN_TRIGGER",
"BTN_THUMB",
"BTN_THUMB2",
"BTN_TOP",
"BTN_TOP2",
"BTN_PINKIE",
"BTN_BASE",
"BTN_BASE2",
"BTN_BASE3",
"BTN_BASE4",
"BTN_BASE5",
"BTN_BASE6",
"BTN_DEAD",
"BTN_TRIGGER_HAPPY"
],
"input_properties" : [
]
},
"udev_properties" : [
"DEVLINKS=/dev/input/by-path/pci-0000:01:00.0-usb-0:4:1.0-event-joystick /dev/input/by-id/usb-Logitech_G29_Driving_Force_Racing_Wheel-event-joystick",
"DEVNAME=/dev/input/event19",
"DEVPATH=/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F/input/input40/event19",
"ID_BUS=usb",
"ID_FOR_SEAT=input-pci-0000_01_00_0-usb-0_4_1_0",
"ID_INPUT=1",
"ID_INPUT_JOYSTICK=1",
"ID_MODEL=G29_Driving_Force_Racing_Wheel",
"ID_MODEL_ENC=G29\\x20Driving\\x20Force\\x20Racing\\x20Wheel",
"ID_MODEL_ID=c24f",
"ID_PATH=pci-0000:01:00.0-usb-0:4:1.0",
"ID_PATH_TAG=pci-0000_01_00_0-usb-0_4_1_0",
"ID_REVISION=8900",
"ID_SERIAL=Logitech_G29_Driving_Force_Racing_Wheel",
"ID_TYPE=hid",
"ID_USB_DRIVER=usbhid",
"ID_USB_INTERFACES=:030000:",
"ID_USB_INTERFACE_NUM=00",
"ID_VENDOR=Logitech",
"ID_VENDOR_ENC=Logitech",
"ID_VENDOR_ID=046d",
"LIBINPUT_DEVICE_GROUP=3/46d/c24f:usb-0000:01:00.0-4",
"MAJOR=13",
"MINOR=83",
"SUBSYSTEM=input",
"TAGS=:snap_scummvm_daemon:seat:snap_scummvm_scummvm:snap_antstream-arcade_antstream-arcade:uaccess:",
"USEC_INITIALIZED=17499974563"
],
"hid_ancestor" : {
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F",
"name" : null,
"bus_type" : "0x0003",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"uniq" : null
},
"input_ancestor" : {
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4/1-4:1.0/0003:046D:C24F.000F/input/input40",
"name" : "Logitech G29 Driving Force Racing Wheel",
"bus_type" : "0x0003",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"version" : "0x0111"
},
"usb_device_ancestor" : {
"sys_path" : "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-4",
"vendor_id" : "0x046d",
"product_id" : "0xc24f",
"version" : "0x8900",
"manufacturer" : "Logitech",
"product" : "G29 Driving Force Racing Wheel",
"serial" : null
}
}
}
it seems that the games are more stable by not breaking so easily with Steam Linux Runtime
Yes, that's the idea. Unfortunately it isn't a straightforward "this is always better", because the Steam Linux Runtime needs to use containers to do what it does, and that can interfere with things like device detection, particularly if games bundle their own copy of libraries like SDL.
I have spoken with Feral support and they didn't know anything about Steam Linux Runtime
Please could you give them the address of this issue? It would be useful if I could to talk to someone at Feral, either here or by private email.
and they have provided me a beta version to activate on Steam which has worked
Did they tell you what was different in that beta? I'm hoping that the answer might be as simple as "we upgraded SDL" or something like that...
Hi, I can reply to the last email whit Support Feral ([email protected]) and I can write about this issue and put your email in copy or only sent your address, or I can write a new email only with the subject of layer of compatibility Steam Linux Runtime and Dirt Rally. I do not know what is the better way.
Anyway I think the Feral support people does not seem developers but more like front line customer support, so I don't think it's useful to you if they don't forward you to the developers.
They didn't give me any explanation about the differences, except that the beta version was older. In fact, I asked them if I could publish the solution for other users (I'm reading similar problems in the forums) and they told me that they prefer that each user contact them.
Feral Developer here. I think DiRT Rally includes SDL 2.0.5 as a shared library in the lib directory. I can't remember which SDL version introduced SDL_DYNAMIC_API and saw no mention of it in WhatsNew.txt, but if it is too old for that you can override it by replacing the .so file.
Feral Developer here.
Thanks for responding! I play several Feral-ported games myself, so I'd like to make sure they work nicely with the container runtime - particularly if there are things that we or Feral can do to make a whole category of similar ports work better.
I think the copy of SDL 2.0.5 that DiRT Rally uses by default should be the lib/x86_64/libSDL2-2.0.5.so listed in https://steamdb.info/depot/311365/, am I correct? Also, from the filename it looks like the Linux port of DiRT Rally is a 64-bit game. Is that right?
It looks like SDL_DYNAMIC_API was in SDL 2.0.2 and up, so it should work here. I don't have DiRT Rally in my Steam account, but I use the free/demo version of Hitman (2016) as one of my usual tests for new Steam Runtime versions, and that seems to have the same setup with (a Feral-modified version of?) SDL 2.0.5 in https://steamdb.info/depot/439876/.
However, looking back at my earlier comment, I think the problem is that I got the filename wrong (I wrote libSDL- where I should have said libSDL2-). The launch options that force use of a newer SDL in the Steam Linux Runtime, if this is a 64-bit game, should be:
SDL_DYNAMIC_API=/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 %command%
or maybe
SDL_DYNAMIC_API="$STEAM_RUNTIME/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0" %command%
@geluxred, please could you try one of those? (Or @jlegg0, if you have access to a steering wheel or other non-gamepad joystick to try this with.)
I'm hoping that one of those will work in the short term as a workaround to get the container-friendly device detection to be used, and then we can discuss a more long-term-supportable way to achieve the same thing.
I think the copy of SDL 2.0.5 that DiRT Rally uses by default should be the lib/x86_64/libSDL2-2.0.5.so listed in https://steamdb.info/depot/311365/, am I correct? Also, from the filename it looks like the Linux port of DiRT Rally is a 64-bit game. Is that right?
Yes, correct on both accounts.
Hi,
The request of support is 197301
I tried both options but the game does not recognize steering wheel. Only the version beta has worked .
Put the steering wheel in G27 mode using Oversteer or pyLinuxWheel. Feral ports don't support the G29.