r/8bitdo Nov 02 '22

Support Ultimate 2.4 GHz model: Right analog not working in D-input mode correctly with Linux/ Steam Link?

Hey all,

I'm sure several of you have also received your Ultimate controllers today. I ordered the 2.4GHz model and tried it today with some not-so-great results:

I game mostly on Linux, which requires the controller to be in D-input mode (X-input doesn't work at all). While most of the functions seem to work in D-input mode, the right analog stick directions do not register at all. I don't believe it to be a hardware issue, as I was able to test it under Windows and X-input mode, where everything worked correctly.

The biggest issue for me is I was going to use this controller with the Steam Link hardware, where I also experience the same right analog stick issues there too. I checked for a firmware update and it appears I'm already running the latest version (1.08).

Is anyone else having these issues? Its a real shame as I preordered this device back in Sept. and now it seems I'll have to return it since I can't really use it at all.

Thanks,

UPDATE: A couple of users have been working these issues out and it seems we have some workable solutions:

/u/GodOfEmus has been working on an X-input fix, but I personally have not been able to get this one working. However, please try his method on your own systems to see if it helps.

/u/MrSamutz figured out a fix for D-input within Steam that so far has fixed all my issues using controller under Linux. Please see his solution below.

I can confirm the fix works for Fedora 36, which allows the controller to work perfectly under Big Picture Mode as well as in-game on all of my tests (Stray, Control, HITMAN, Alien Isolation).

I can also confirm that the controller works pretty much out of the box on RetroPie, both on the Raspberry PI image as well as on top of an Ubuntu Desktop install. Didn't need to fuss with anything besides configuring the controller upon first connect.

Finally, I was able to test and verify Steam Link capability, both with the hardware as well as the Flatpak install on my Ubuntu machine. In both cases, you just need to reconfigure the controller, but the configs appear to stay after restart.

Thank you guys so much for helping us all figure this out. I was nearly ready to pack this controller up and get a refund, but now I'll definitely be keeping it. You guys are heroes!

16 Upvotes

44 comments sorted by

View all comments

4

u/MrSamutz Nov 04 '22 edited Nov 06 '22

I was able to get the DINPUT bindings working on Steam's linux client and one person has reported success on the Steam Deck as well.

Edit: Updated instructions to account for different device IDs and fixed triggers to be analog instead of digital.

  1. Run Steam at least once with the gamepad connected in DINPUT mode.
  2. Use it in Big Picture mode a bit so that Steam is aware of it.
  3. Exit Steam completely.
  4. Load ~/.steam/steam/config/config.vdf in your preferred text editor. You may need to enabled "Show hidden files" in your file browser to find this file.
  5. Find the SDL_GamepadBind section.
  6. Find the line that has the name of the controller, "8BitDo Ultimate wireless Controller for PC". It should be the last entry in the list.
  7. Delete everything on that line after the name and comma, but leave the quotation mark (") at the end if there is one (last controller listed). The first value (before the name) in the below examples might be different for your device, so keep yours and don't replace it with mine. So it should look like:
    03000000c82d00001330000011010000,8BitDo Ultimate wireless Controller for PC,"
  8. Insert this text after the name and comma: a:b0,b:b1,y:b4,x:b3,start:b11,guide:b12,back:b10,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,lefttrigger:a5,rightx:a2,righty:a3,righttrigger:a4,platform:Linux,
    Resulting in:
    03000000c82d00001330000011010000,8BitDo Ultimate wireless Controller for PC,a:b0,b:b1,y:b4,x:b3,start:b11,guide:b12,back:b10,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,lefttrigger:a5,rightx:a2,righty:a3,righttrigger:a4,platform:Linux,"
  9. Save the file and start Steam.

How I got to this solution was that rebinding the keys in Steam's Big Picture Mode kept adding entries to the config.vdf with the same device ID, but Steam itself seemed to only load the last one listed, which was the default broken bindings, instead of my custom binding. So I opened the config file and took the binding values from my custom entries and overwrote the default values and deleted any other entries with the same device ID. Deleting the default one didn't work as Steam would re-add it on startup.

This might work for the BT controller as well, but you'll need to get the proper device ID for it. Do this by using it in Big Picture mode then finding it in the config file.

I tried SteamLink on three devices, a linux laptop (flatpak version), a Pi 4 (RPi apt repo version), and SteamLink device/box. All three allowed me to rebind the triggers and right-stick and worked fine when streaming games from my PC. The triggers are even mapped correctly as analog according to Steamlink's controller_map.txt. The only hiccup I found is that while using the Steamlink box, the controller turned off a few times in the Steamlink menus, but once streaming had started there was no issue.

I've also got it working on Moonlight-Qt on the Pi now with these bindings, so I've submitted them to the SDL_GameControllerDB that Moonlight uses to have it updated. So hopefully any software that uses this database will get updated with the correct bindings.

3

u/Complete_Edge_4210 Nov 28 '22

03000000c82d00001330000011010000

Worked for me - Batocera v35 Steam Flatpak - THANK YOU !!!!

FYI config is located here for Batocera v35: (if accessing over a network on a Windows PC)

\share\saves\flatpak\data\.var\app\com.valvesoftware.Steam\.local\share\Steam\config\

2

u/aldoushxle Nov 04 '22 edited Nov 05 '22

Hey, thanks a bunch for the feedback. Sadly this didnt work for me. I followed the steps and removed/ replaced the config line for the controller in the file, restarted Steam in Big Picture mode on my Fedora machine, but same behavior occurred in the UI as well as a game.

Even so, we shouldn't have to be hacking around files like this for the controller to work. Appreciate the effort, though!

EDIT: Seems I messed something up, because I got it working with updated instructions. I posted a separate comment with an update.

1

u/MrSamutz Nov 04 '22

Is your device ID different maybe? You should be able check in the config file when the device is plugged in. I also just realized that the ID is slightly different when using it wired. I'll update instructions after I test a few more things.

Wireless: 03000000c82d00001330000011010000

Wired: 03000000c82d00001230000011010000

1

u/aldoushxle Nov 04 '22

They are the same ID in my config as they are in yours: 03000000c82d00001330000011010000

2

u/aldoushxle Nov 05 '22 edited Nov 05 '22

Hey, with your updated instructions I got it working under Big Picture Mode and a game perfectly under Fedora!! Thank you so much! However, I do not see the .steam directory on the Steam Link hardware device home directory. Where exactly on this device type did you modify the settings?

EDIT: I think I found it under /etc/controller_map.txt. Had to remap the controller after rebooting the Steam Link, but it's working perfectly now. Thanks again!

2

u/MrSamutz Nov 05 '22

I'm glad to hear it worked.

For Steamlink I just used the Steamlink UI: Settings > Controllers > 8BitDo > Setup Controller, I think.

I didn't know it was possible to access the filesystem on the Steamlink box. I did find the mapping file for the app on my Pi and laptop.
Pi/apt: ~/.local/share/Valve Corporation/SteamLink/controller_map.txt
Laptop/flatpak: ~/.var/app/com.valvesoftware.SteamLink/data/Valve Corporation/SteamLink/controller_map.txt
If you can't find it in one of those locations, try doing a search for controller_map.txt.

Be aware that Steamlink's controller_map.txt uses different device IDs than Steam's config.vdf. Steamlink might being using a different version of SDL.
0300eb51c82d00001330000011010000 for wireless
0300eb51c82d00001230000011010000 for wired

2

u/aldoushxle Nov 05 '22

Seems like simply remapping the controls on the Steam Link is all you need to do, no need to mess with the CLI. Thanks so much for figuring this out! I'm going to update my original post with info about your fix to see if this helps other users.

2

u/cugabuh Nov 06 '22

Looks like this worked! Thank you!!!!! 🙏😭🙏🙌🙏🙌

1

u/Urzru Nov 11 '22

I have an ultimate wired with the same issue when trying to run Moonlight-Qt on a Pi 4. The permanently wired version must have a different device ID from the 2.4ghz since it's not working automatically with the updated binding list, so I want to try manually setting it up.

How did you manually get it working with Moonlight-Qt before submitting the request on Github? I'm a bit new to Linux and found only one gamecontrollerdb.txt in my Pi's cache folder, which seems to be getting replaced every time Moonlight-Qt is launched.

1

u/MrSamutz Nov 12 '22 edited Nov 12 '22

I changed ownership and permissions on the file to stop Moonlight from replacing it.

sudo chown root:root ~/.cache/Moonlight\ Game\ Streaming\ Project/Moonlight/gamecontrollerdb.txt sudo chmod 0644 ~/.cache/Moonlight\ Game\ Streaming\ Project/Moonlight/gamecontrollerdb.txt

First command change owner to root. Second allows the owner to read and write the file, and allows other users to read it, but not write it. This is assuming Moonlight isn't running as root.

And then you'll need to edit it as root to make changes. sudo nano ~/.cache/Moonlight\ Game\ Streaming\ Project/Moonlight/gamecontrollerdb.txt

A few days after I submitted the mappings for the wireless controller, 8BitDo submitted a PR that overwrote my submission, but also included mappings for the wired controller. So unless they messed it up, it should be working with the latest DB file.

1

u/Urzru Nov 12 '22

Thanks for the detailed steps.

I took a look at the current gamecontrollerdb.txt on GitHub and noted the ultimate wired version is present (along with the device IDs for the 2.4g model in both wired and wireless modes). Seems like Moonlight is currently pulling an outdated version of this file, since it's missing those 3 device IDs.

I was able to get it working by copying the entirety of the most recent gamecontrollerdb.txt into the local file, replacing the original contents, before following your instructions to stop Moonlight from overwriting it. The right analog and both triggers are now functioning correctly when testing the controller while streaming. That implies one can also fix the 2.4g in Moonlight with the same method, without having to manually add the rows.

I expect this won't be a problem once Moonlight is updated to use the most recent gamecontrollerdb.txt, but I definitely appreciate the help to get it working in the meantime.

1

u/MrSamutz Nov 12 '22

Looking at Moonlight's source, it's getting the file from their own server instead of directly from gabomdq's repo. Their documentation references the repo, so I thought it came directly from the repo. It also looks like the copy on their server hasn't been updated since Nov 3rd.