Secure Method to Disable a GPU in a dual GPU setup for Apple Hardware for Zorin 18+

Dear Zorin Community,

I’m reaching out for expert assistance with a challenge affecting vintage Apple hardware running Zorin OS 18+. My goal is to achieve full compatibility with modern, secure kernels while preserving hardware functionality—without compromising security through outdated workarounds.

Context & Hardware

  • Device: MacBook Pro (Mid-2012)
  • Integrated GPU: Intel HD 4000 (fully compatible with modern kernels—no issues)
  • Discrete GPU: NVIDIA GK107M [GeForce GT 650M Mac Edition] (rev a1)
    • Current limitation: Only functions with kernel 5.15 + nvidia-driver-390 (last supported version).
    • Security concern: This driver/kernel combination lacks patches for critical vulnerabilities (e.g., CVE-2022-0995 DMA exploits, CVE-2023-2640 GPU memory corruption).

The Challenge

While the Intel HD 4000 GPU works flawlessly out-of-the-box on Zorin 18+’s modern kernel (6.8+), the presence of the NVIDIA GPU triggers initialization conflicts. Standard approaches like nomodeset or nouveau.blacklist=1 fail to prevent Xorg crashes, as the firmware still attempts to load NVIDIA components. Crucially:

  • BIOS/UEFI disable options are unavailable (Apple’s firmware restricts GPU control).
  • Downgrading kernels/drivers introduces unacceptable security risks for systems handling sensitive data.

Why This Matters Beyond My Setup

This isn’t merely a personal hurdle—it’s an opportunity to expand Zorin’s accessibility to vintage hardware while upholding its security ethos. I can only imagine that a significant amount of Apple owners face identical challenges with dual GPU designs where one of the GPU is dated and no longer supported. A clean, secure disable method would:

  1. Preserve Zorin’s modern security posture (no kernel downgrades, full CVE patching).
  2. Leverage Intel’s well-supported integrated graphics without hardware modifications.
  3. Establish a community-vetted blueprint for extending Zorin’s viability to legacy Apple hardware—aligning with Zorin’s mission of "a beautiful, powerful OS for all."

Request for Expert Guidance

I’d greatly appreciate your insights on permanently disabling only the NVIDIA GPU at the firmware/driver level, ensuring:

  • The Intel HD 4000 operates exclusively under kernel 6.8+.
  • Zero NVIDIA components load (firmware, modules, ACPI calls).
  • No security compromises (kernel remains fully patched).

Hardware Verification (for troubleshooting context)

lspci -k | grep -A 3 "VGA\|3D"  
01:00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GT 650M Mac Edition] (rev a1)  
    Subsystem: Apple Inc. Device 011a  
    Kernel driver in use: nouveau  
    Kernel modules: nvidiafb, nouveau  
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)  
    Subsystem: Apple Inc. Device 011a  
    Kernel driver in use: i915  
    Kernel modules: i915  

Community Impact

A robust solution would empower Zorin user base to:

  • Safely extend hardware lifespans without security trade-offs.
  • Contribute to Zorin’s sustainability narrative by making modern OSes viable on older devices.
  • Create a reference guide for similar NVIDIA-crippled Apple products (e.g., iMacs 2011–2013).

I open to any suggestions, command examples, or even partial leads to refine this approach.

Many thanks again for the great community and support.

The 5.15 Kernel is still supported and gets Updates. If You afraid of the 390 Driver and You want even use it, You can uninstall the Driver and let the Nvidia GPU run with the built-in Nouveau Drivers.

When You don't want use the Nvidia GPU, You could take it off of Your PC. Or is it a Laptop?

@Ponce-De-Leon - Thanks, but I'm seeking a solution through configuration and kernel setups to completely ignore and disable the Nvidia card. Removing the GPU isn't an option because it's soldered to the MacBook Pro's motherboard, and I'm not comfortable opening the device to do so. My goal with this thread is to develop a step-by-step process for Apple hardware users with dual GPU setups who want to use only one of the GPUs which are more compatible with more modern kernel versions and establish a bit of a step by step guide for those users.

This guide now starts with a "Phase 0" to ensure your MacBook's firmware is in a clean, default state before I began. It assumes that you have a USB installer of a Mac OS that is newer than High Sierra (10.13) where you will do most of the setting at the NVRAM level to have the hardware, since it is Apple hardware and there OS is the best in terms of compatibility with these low-level instructions.

As per usual, open to comments and edits and mileage my vary for Apple users but I tried to keep it as vanilla as possible to give people a sense of how.


Phase 0: System Resets (Recommended)

Before starting, it's best to reset the SMC and NVRAM to clear any old or conflicting settings. This ensures your Mac is a "blank slate."

1. Reset the SMC (System Management Controller)
The SMC handles low-level functions like power and fans.

  1. Shut down your MacBook Pro completely.
  2. With the lid open, press and hold the following keys on the built-in keyboard for 10 seconds:
    • Shift (left side)
    • Control (left side)
    • Option (left side)
    • Power button
  3. After 10 seconds, release all keys at the same time. The Mac should not have turned on.
  4. Press the Power button normally to turn the Mac on. (If it boots into an OS, just shut it down again).

2. Reset the NVRAM (Non-Volatile RAM)
The NVRAM stores settings like volume and screen resolution.

  1. Ensure your Mac is shut down.
  2. Press the Power button to turn it on.
  3. Immediately press and hold these four keys together:
    • Option
    • Command (⌘)
    • P
    • R
  4. Keep holding these keys for about 20 seconds. You may hear the startup chime sound a second time or see the Apple logo flash.
  5. Release the keys. Your Mac will continue booting. (You'll be interrupting this boot in the next step, so it's fine to hold the power button to shut it off once you're sure the reset happened).

Phase 1: Firmware Preparation (via High Sierra Installer)

Now we will use the High Sierra installer to make our specific firmware changes.

  1. Boot from your High Sierra USB Installer.

    • Insert the USB drive into your MacBook Pro.
    • Restart the Mac and immediately press and hold the Option (⌥) key.
    • When the boot menu appears, select the orange USB icon, "Install macOS High Sierra."
  2. Disable System Integrity Protection (SIP).

    • Once the installer loads, do not click "Continue."
    • Go to the menu bar at the top of the screen and click Utilities > Terminal.
    • In the Terminal window, type the following and press Enter:
      csrutil disable
      
    • You will see a confirmation that SIP has been disabled.
  3. Reboot (Required).

    • This step is mandatory for the SIP change to take effect.
    • In the same Terminal window, type:
      reboot
      
  4. Boot from the USB Installer Again.

    • As the Mac reboots, press and hold the Option (⌥) key again.
    • Select the "Install macOS High Sierra" USB installer from the boot menu, just as you did before.
  5. Set the Permanent GPU NVRAM Variable.

    • Once the installer is back up, go to Utilities > Terminal again.
    • Type the following command exactly as shown (this NVRAM is for my MacBook Pro 10,1). This tells the firmware to force the integrated GPU on all subsequent boots.
      nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00
      
  6. (Optional) Disable the Startup Chime.

    • If you also want to mute the loud boot chime, you can set its NVRAM variable now, as I personally do not like it.
    • In the same Terminal window, type the following command:
      nvram BootAudio=%00
      
  7. Verify the Changes (Optional but Recommended).

    • To confirm the variables were set correctly, run this command:
      nvram -p | grep "gpu-power-prefs\|BootAudio"
      
    • The terminal should print the two lines you just entered.
  8. Shut Down.

    • You are now finished with the macOS installer.
    • In the Terminal, type:
      shutdown -h now
      
    • Remove the High Sierra USB installer.

Phase 2: Zorin OS Installation

  1. Boot from your Zorin OS USB Installer.

    • Insert your Zorin OS USB drive.
    • Power on the Mac and immediately press and hold the Option (⌥) key.
    • Select the yellow USB icon, typically labeled "EFI Boot."
  2. Install Zorin OS.

    • Follow the graphical installer. When you reach "Installation type," select "Erase disk and install Zorin" to wipe the drive.
    • Complete the installation and reboot into your new Zorin OS desktop.

Phase 3: Zorin OS Hardening (Final Terminal Commands)

This final step ensures the Zorin kernel never tries to load any drivers for the now-disabled NVIDIA GPU, preventing all potential conflicts.

  1. Open the Zorin Terminal.

    • Log in to your new Zorin desktop.
    • Click the Zorin menu (or press the Super key) and type Terminal.
  2. Create the Kernel Module Blacklist.

    • We will use a single tee command to write a new configuration file. This file tells the system to run a "do-nothing" command (/bin/false) instead of loading the NVIDIA drivers.
    • Copy and paste the entire block below into your terminal and press Enter. You will be prompted for your password.
    sudo tee /etc/modprobe.d/blacklist-hard-nvidia.conf <<'EOF'
    # Permanently disable all NVIDIA kernel modules
    # We use 'install' to override the module load with a do-nothing command.
    install nouveau /bin/false
    install nvidiafb /bin/false
    
    # As a fallback, also add the standard blacklist.
    blacklist nouveau
    blacklist nvidiafb
    EOF
    
  3. Update the Kernel Initramfs.

    • This critical step applies your new blacklist to the kernel's initial boot files.
      sudo update-initramfs -u
      
  4. Reboot Your System.

    • You are all finished.
      sudo reboot
      

Your MacBook Pro should now be running Zorin OS perfectly on the Intel HD 4000, with the NVIDIA GPU fully and securely disabled at both the firmware and kernel levels.

I have moved this to Tutorials & Guides as it is intended as a guide.

1 Like

Great idea, but I want to just ensure I am being transparent that this is very specific to my hardware and I am still tweaking for the most part. I also tweaked the title of the post as well since Seeking Guidance is not very Tutorials and Guides aligned :slight_smile:

Yes, I made the move as you formalized your steps - and also based on this:

1 Like