Your planned procedure is possible. Your planned procedure is not that difficult. Your planned procedure is not the best option.
Why this route is suboptimal
MacBook Pros will and have to switch to discrete GPU (dGPU) once an external display is connected. Therefore, an installed but disabled dGPU takes away the option to use an external Monitor with that dGPU.
There are other options now, like using USB solutions or external GPUs (eGPU). But setting the EFI variable you are looking for will definitely disable direct output with one cable from the Thunderbolt port to an external monitor.
How you can disable the discrete GPU from EFI?
The command you mentioned in your update is almost correct. It just misses the proper identifier:
sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00
This writes the corresponding EFI variable to NVRAM and forces the MacBook Pro to always boot straight into integrated GPU (iGPU). The identifier is not only for AMD dGPUs but all dGPUs. This is confirmed to work with NVidia chips alike. It is also easily reversible with an NVRAM reset.
Disadvantages of this strategy in this situation
And now the downside: There are potentially two little problems with this:
After you force these NVRAM settings macOS might get "a little bit confused". The chip is still there, wired and powered.
To get this to boot you might need to disable the graphics drivers for your dGPU. Or at least the one kext that manages the actual graphics switching. The boot might hang when trying to initiate GPU switching otherwise.
Both newly arisen problems can be dealt with by moving either all NVidia kexts out of /System/Library/Extensions
to a safe backup place. This will boot the machine forced into accelerated iGPU mode. But setting an EFI variable might not be enough to get sensible power management. For that you will likely have to move back the NVidia kexts except those responsible for graphics switching.
Failing to do so will lead to needlessly high power on the dGPU. It will at least idle at "full power' (translated to >~60°C).
This high power idle will potentially be the great defeat for your plan to reduce fan noise and increase battery. Side note from the literature: It should be a truth universally acknowledged that moving kexts around also requires that you disable SIP on newer versions of OS X/macOS as long as you move things like this around.
General stratedy to find the kexts to experiment with: boot without the NVRAM variable in a stock system (with 'default' NVidia kexts). Then take note of which extensions your system actually loads with kextstat
. Then reboot with previously loaded NVidia/Geforce kexts moved away and the hack enabled. Get a detailed sensor monitor (iStatMenus, TGPro, etc…) and watch the temperature on and around the GPU. Now load one after the other of the relevant kexts back into the kernel with sudo kextload /path-to/NVDA***.kext
. Wait one or two minutes after each.
Since the method of this post – or the equally valid but looong way: manipulating EFIvars in Linux – is NVRAM, it will revert cleanly if you do an SMC/NVRAM reset. That NVRAM hacking is actually the only part of this post that for sure will not give you much trouble.
Doing this NVRAM reset restores a minimal set of factory settings to EFI variables/NVRAM. That factory setting will not be touched.
This can be done as often as you like.
In Linux the driver system is much better documented and imho implemented cleaner. There are many ways to achieve this with or booting into Linux. And a Linux (whether respecting this NVRAM/EFIvars setting or through other methods) will give you much less trouble with drivers (Who'd have thought). For other OSes, like Microsoft Windows, I have no data.
To repeat: Having the OS not recognise the dGPU properly does not mean it is powered off. That might lead to unwanted thermal side effects.
Take a look at this guide for 2011 MacBook Pros for a similar solution and a little bit more options; also to quickly undo and redo the NVRAM hack.
Multiple monitors and a disabled dGPU
Having said that all: gfxCardStatus (or try different versions of the original – they have different options/capabilities…) is imho the best option if you do not have real hardware issues to deal with. It's much more flexible and you can still switch back to dGPU or external monitors quite easily within a running system.
Whether via EFI/NVRAM or with gfxCardStatus: forcing a Mac with switchable graphics to integrated-only will disable external display modes using the built-in DisplayPort or Thunderbolt graphics output. This is a consequence of the hardware design which routes the display signal for external monitors through the dGPU. Using not discrete but external graphics adapters might be a workaround for that limitation.
The EFI setting to enable integrated on other operating systems
As should be clear by now, the EFI setting to allow other operating systems like Linux to "see" a switchable graphics setup is different from the above that disables the dGPU.
Tiny EFI program for unlocking the Intel IGD on the Macbook Pro 11,3 for Linux and Windows:
Tiny EFI program for unlocking the Intel IGD on the Macbook Pro 11,3 for Linux and Windows.
It has been made to be easily chainloaded by unmodified EFI bootloader like Grub, rEFInd etc.
The Macbook Pro 11,3 model's EFI is switching off the Intel GPU if you boot anything but Mac OS X.
So a little trick by faking the OS identifiction is required to make all hardware accessible.
All credits belong to Andreas Heider who originally discovered this hack:
https://lists.gnu.org/archive/html/grub-devel/2013-12/msg00442.html
currentYear
16" macBook v10.15.5 kernel panics: 1.) get gfx.io 2.) set to Integrated Only 3.) buy cody@codykrieger.com a coffee