此主题已被锁定
florean 2020 年 12 月 24 日 下午 3:45
10
3
32
2
5
4
6
3
4
2
33
Fix for game controllers on Big Sur!!! (but not M1/Apple Silicon)
TL;DR
Valve’s driver is getting automatically blocked, so we need to boot into Recovery mode and manually accept it (unfortunately, this doesn't apply to new Apple Silicon processors, which never had a working driver to begin with). To do that, we’ll add their Apple Developer Team ID to a list of allowed developers. This is very targeted and extremely safe, the opposite of doing something like disabling System Integrity Protection for the whole computer.

  • Boot into Recovery mode (hold ⌘-R at boot).
  • Open Terminal (Utilities -> Terminal).
  • Type
    spctl kext-consent add MXGJJ98X76
    and press return.
  • Type
    kmutil trigger-panic-medic --volume-root "/Volumes/Macintosh HD"
    (replace “Macintosh HD” with whatever your drive is named; press Tab at the end of typing "/Volumes/" to get a hint).
  • Reboot.

The Details
This nerd sniped me for a few hours and I’m really disappointed in Valve. This is 100% on them. Apple has very clearly signaled they don’t care about Mac games, but this is making it very apparent Valve doesn’t, either. Personally, I’m moving most of my gaming to PS4/5. End of venting.


The problem is that Valve’s SteamInput kernel extensions, which they use to standardize controls across games, aren’t getting loaded under Big Sur. The reason we’re told to install an “update” from 2018 is because Valve is using the answer to the question “are my extensions running?” as if it is the answer to the question “have you installed the game controller extensions?”. So it just puts you in a continuous loop of installing the extensions, but it’s completely irrelevant.

Why aren’t the extensions loading? The OS thinks they should work. If we run
kmutil print-diagnostics -p /Library/Extensions/SteamInput.kext
we get
Kext at: /Library/Extensions/SteamInput.kext appears valid and loadable.
However, if we try to load it with
sudo kmutil load -p /Library/Extensions/SteamInput.kext
we get the error
Extension with identifiers com.valvesoftware.SteamInput-DS4v1,com.valvesoftware.SteamInput not approved to load. Please approve using System Preferences.
And when we go to System Preferences, it isn’t in the list for approval. I found out that is because it is getting automatically blocked, which we can see if we reset the extension approvals. I’m not sure why, I didn’t pour over the logs. Most of the other examples I have of blocked extensions are 32-bit ones that can’t run. It’s possible Valve is doing something dumb; there’s a careless bug in their installer’s post-install script that tries to modify the extremely-read-only system partition, so maybe the driver is doing something that deserves an automatic ban. Or maybe it’s an OS bug that Valve never bothered to raise with Apple (it is definitely a bug that kmutil reports it as loadable when it isn’t).


Luckily, there is a way to automatically accept Valve’s extensions. Apple has a tool that allows you to add Apple Developer Team IDs to an accept list. But to prevent abuse, you can only make changes to the list when you’re in Recovery mode. First we’ll run
codesign --display --verbose /Library/Extensions/SteamInput.kext
to get Valve’s Team ID, which is `MXGJJ98X76`. Now we can reboot and add it to the list. When we do, any kernel extension that is signed with one of Valve’s certificates that is installed will be allowed to run. So the security risk we are creating by doing this is that a hacker gets you to download and install a kernel extension that they’ve signed with a stolen Valve cert, which… ¯\_(ツ)_/¯ You’ve already lost at “download and install”. On to the fix!

  • Boot into Recovery mode (hold ⌘-R at boot).
  • Open the Terminal (Utilities -> Terminal).
  • Type
    spctl kext-consent add MXGJJ98X76
    and press return. Now any extension from Valve will run automatically with no consent required. Except, Apple checks the naughty (blocked) list before it checks the nice (accept) list and Valve's extensions are already on the naughty list, so we need to reset that.
  • Type
    kmutil trigger-panic-medic --volume-root "/Volumes/Macintosh HD"
    The "Macintosh HD" part is the default name of your boot drive, but you can change it. You can hit Tab after typing "Mac" and it should auto-complete. If it doesn't, backspace to just "/Volumes/" and hit Tab a couple of times to see what the options are.
    This also can only be run from Recovery mode. It is typically used when an extension is causing your computer to crash ("panic") immediately and puts you in a reboot loop. This resets that status of all third party extensions. You'll get a warning from the OS about a third party extension causing problems when you login and you'll have to re-approve all of your third party extensions, but otherwise it is completely harmless.
  • Reboot out of Recovery mode.

That’s it. You can test this in the Terminal by running the command
sudo kmutil load -p /Library/Extensions/SteamInput.kext
It should return nothing (success!), but it might say you have to reboot before the extension can be loaded. Or you can just go play something like Hades again.

Merry Christmas!

Edit 1: Made "trigger-panic-medic" mandatory per Charmander's feedback.

Edit 2: Made it clear this doesn't work with Apple Silicon/M1 computers (ARM64), which requires at a minimum for Valve to rebuild their driver. This is only for Intel (x86_64) processors, which already had working drivers.
最后由 florean 编辑于; 2021 年 1 月 31 日 下午 12:10
< >
正在显示第 1 - 15 条,共 234 条留言
RiKi 2020 年 12 月 24 日 下午 6:22 
I tested your way to fix bug on my m1 macbook pro,but didn't work.
florean 2020 年 12 月 24 日 下午 8:00 
No, it won't on Apple Silicon. Rosetta 2 doesn't translate kernel extensions and Valve has never released an ARM64 driver. This only fixes x86_64 computers that were working and broke after upgrading to Big Sur. Sorry if I got your hopes up. I hate to say it, but after seeing this debacle, I don't think we'll see a native Steam on AS. :(
RiKi 2020 年 12 月 24 日 下午 8:37 
引用自 florean
No, it won't on Apple Silicon. Rosetta 2 doesn't translate kernel extensions and Valve has never released an ARM64 driver. This only fixes x86_64 computers that were working and broke after upgrading to Big Sur. Sorry if I got your hopes up. I hate to say it, but after seeing this debacle, I don't think we'll see a native Steam on AS. :(
does ps5 gamepad support m1 mac when play steam game?
florean 2020 年 12 月 24 日 下午 8:52 
Sigh. I have to say no. It's going to technically be on a game-by-game basis, but most games are going to be using Steam Input to talk to the controllers, which is what is broken (and never worked for M1s). Your PS5 controller can play Apple Arcade games, games from the Mac Store, or games you buy elsewhere. But Steam doesn't support using a game controller on M1s (or any new Macs until they get this fixed).
bernie 2020 年 12 月 24 日 下午 9:34 
I gave up and downgraded to macOS Catalina and my DS4 controller works now
Charmander 2020 年 12 月 25 日 上午 5:14 
This is amazing, thanks Florean! A merry Christmas indeed :) I tried playing with just the first step (spctl kext-consent add), which doesn't work. So the optional step doesn't seem optional to me.

Some feedback for others:
- big picture mode, installed the drivers, the typical installation pop-up that always popped up didn't occur anymore after a few reboots and taking all the steps
- Tested in Cuphead and Don't starve, Baba is you, Slay the spire. All work with a PS4 bluetooth connectedcontroller! Albeit the last one simulates the mouse rather than working like a controller. but that's just how the game is :)
Teh SoTo 2020 年 12 月 25 日 上午 5:23 
First ot all @florean thanks for going through this rabbit hole..

unfortunately this did not work for me on Big Sur.
Extension loads correctly:
https://imgur.com/a/Kewy1of

But a game like Vagante still doesn't register when i tap the buttons, oddly enough it did work fine with SIP disabled, so i was eager to try this option.

Castle Crashers and Overcooked 2 also not registering the taps,
any idea what could it be?
Paradroid 2020 年 12 月 25 日 上午 6:36 
Some games might have their own driver for the controler try starting it directly from the folder.
Big T 2020 年 12 月 25 日 上午 7:33 
I don't know how but somehow it worked, thank you so much! Really appreciate the work you put in it! Such a shame, that Valve just choose to ignore it. Merry Christmas my man!
florean 2020 年 12 月 25 日 上午 10:10 
Charmander, thanks for the feedback! I've updated the instructions based on it.

Teh SoTo: Steam says Vagante is 32-bit and shouldn't even work on Catalina, much less Big Sur. So that's odd. Also, it is really annoying that Steam released a controller named the Steam Controller when you are trying to talk about Steam controllers. I don't own a The Steam Controller, I am just referring to getting generic (Switch Pro and DualShock 4) controllers to work with Steam games (Hades). Since it's such a weird controller, there may be another piece of software that is getting blocked. Which would be why it would work with SIP turned off. Maybe a driver that is using a different Team ID? Seems unlikely, I would have thought they'd put it all in SteamInput, but there is a SteamInput-DS4v1 (which could be either DS4 or all game controllers), so maybe there is a SteamInput-TheSteamController. Good luck!
Clefable 2020 年 12 月 25 日 下午 5:11 
thank you SO MUCH!! i get to play with my controller again AND i feel like i'm actually smart while doing this?? best of both worlds. i appreciate it!! thanks for finding such a simple and safe solution:steamhappy:
Mr Damage 2020 年 12 月 25 日 下午 6:04 
Hi Florean. Your process seems to work, however, my DualShock still does not work for American Truck Simulator after following the process. Dirt 4 has always worked, strangely enough.
florean 2020 年 12 月 25 日 下午 7:22 
Mr Damage, did you try the verification step? If not, you can search in Spotlight for "Terminal", open the app, and type "sudo kmutil load -p /Library/Extensions/SteamInput.kext". It'll ask for your password and then run the command. If it just goes to the next line, then it worked and I'm not sure why American Truck Simulator still wouldn't work. If it outputs any kind of text, paste it here and we'll try to figure it out.

As to why Dirt has worked, I think it isn't only using Steam for controller input (since it is sold on a bunch of platforms besides Steam), so it was probably connecting to the controller through the OS and ignoring Steam.
florean 2020 年 12 月 25 日 下午 7:25 
As an aside, after Teh SoTo's comment I went back and tried a bunch of games that Steam says won't work because they are 32-bit and about half of them *did* work. So don't take Steam's word for it. My guess is some of them uploaded 64-bit builds at some point after Steam checked and Steam just never updates. :/
Teh SoTo 2020 年 12 月 26 日 上午 4:24 
Hey @florean, i might expressed myself incorrectly, what i am using is a normal PS4 Controller, i do not own a Steam controller, however, when SIP is disabled, the PS4 controller never maps correctly, but it does work with the driver of the Steam controller, so in the games, i select Steam Controller and use my PS4 controller, since Big Sur, i never got it to work as a PS4 one.
< >
正在显示第 1 - 15 条,共 234 条留言
每页显示数: 1530 50

发帖日期: 2020 年 12 月 24 日 下午 3:45
回复数: 234