Skip to content

Instantly share code, notes, and snippets.

@ds17f
Last active January 15, 2026 15:20
Show Gist options
  • Select an option

  • Save ds17f/a6c056f52c812230e3a6beeeac484bc6 to your computer and use it in GitHub Desktop.

Select an option

Save ds17f/a6c056f52c812230e3a6beeeac484bc6 to your computer and use it in GitHub Desktop.
NVIDIA 470xx driver setup guide for MacBook Pro 11,3 (2014) on Fedora 42 - fixes video stability, suspend/resume, GDM issues

NVIDIA Proprietary Driver Setup for MacBook Pro 11,3 (2014)

Hardware

  • MacBook Pro 11,3 (Mid 2014, 15" Retina)
  • NVIDIA GeForce GT 750M (Kepler, GK107M)
  • Intel Iris Pro 5200 (NOT usable - see GPU Switching section)
  • Fedora 42, Kernel 6.17.11

Driver

  • nvidia-470xx (legacy driver - last to support Kepler GPUs)
  • Installed from RPM Fusion

Key Discoveries

1. DO NOT use nvidia-drm.modeset=1

This causes display corruption (scanlines, freezing) on this hardware. The legacy 470 driver has buggy kernel modesetting. X11 mode without KMS works fine.

2. Install X11 session files for GDM

Fedora defaults to Wayland, so X11 session files aren't installed by default:

sudo dnf install gnome-session-xsession -y

Without this, GDM crashes with "no session desktop files installed".

3. Intel GPU switching does NOT work

The gpu-switch tool sets an EFI variable, but this MacBook's firmware ignores it. The Intel Iris Pro 5200 cannot be activated - you're stuck with NVIDIA.

Installation Steps

1. Install the driver

sudo dnf install akmod-nvidia-470xx xorg-x11-drv-nvidia-470xx -y
sudo akmods --force

2. Install X11 session files (required for GDM)

sudo dnf install gnome-session-xsession -y

3. Blacklist nouveau

sudo tee /etc/modprobe.d/blacklist-nouveau.conf << 'EOF'
blacklist nouveau
options nouveau modeset=0
EOF

4. Rebuild initramfs

sudo dracut --force

5. Disable Wayland in GDM

sudo sed -i 's/#WaylandEnable=false/WaylandEnable=false/' /etc/gdm/custom.conf

Or manually edit /etc/gdm/custom.conf and set WaylandEnable=false under [daemon].

6. Update kernel parameters

The nvidia driver package should automatically add nouveau blacklist parameters. Verify in /boot/loader/entries/*.conf:

rd.driver.blacklist=nouveau,nova_core modprobe.blacklist=nouveau,nova_core

IMPORTANT: Remove nvidia-drm.modeset=1 if present - it causes display corruption.

7. Reboot

sudo reboot

System should boot directly to GDM login screen and work normally.

Boot Entries (BLS format)

Location: /boot/loader/entries/

Normal graphical boot

The default Fedora entry should work after setup. Just ensure nvidia-drm.modeset=1 is NOT present.

Terminal mode (for troubleshooting)

Create /boot/loader/entries/e4c9eb67a49b4f6589818fd24e2520ce-6.17.11-terminal.conf:

title Fedora Linux - Terminal Mode (6.17.11)
version 6.17.11-terminal
linux /vmlinuz-6.17.11-200.fc42.x86_64
initrd /initramfs-6.17.11-200.fc42.x86_64.img
options root=UUID=3d31d415-6b43-470b-b73b-5fc906931e3b ro rootflags=subvol=root rd.driver.blacklist=nouveau,nova_core modprobe.blacklist=nouveau,nova_core systemd.unit=multi-user.target vconsole.font=latarcyrheb-sun32 video=1280x800
grub_users $grub_users
grub_arg --unrestricted
grub_class fedora

This boots to a text console (readable on Retina display). Useful for troubleshooting. From terminal mode, you can run startx to start GNOME manually.

GPU Switching (Does NOT work on this hardware)

This MacBook has dual GPUs, but the firmware ignores the switching EFI variable.

The gpu-switch tool is installed at /usr/local/bin/gpu-switch:

sudo gpu-switch -d   # Attempt switch to nvidia (dedicated)
sudo gpu-switch -i   # Attempt switch to Intel (integrated)
sudo reboot

On this specific MacBook Pro 11,3, Intel switching does not work. The firmware always boots with NVIDIA regardless of the EFI variable setting.

Verification

Once booted into GNOME:

lsmod | grep nvidia              # Should show nvidia, nvidia_modeset, nvidia_drm
ls /dev/nvidia*                  # Should show nvidia0, nvidiactl, nvidia-modeset
grep NVIDIA /var/log/Xorg.0.log  # Should show NVIDIA driver active

Troubleshooting

Black screen on boot

  1. Boot from Fedora Live USB
  2. Mount and chroot into system
  3. Check/remove nvidia-drm.modeset=1 from boot entries
  4. Rebuild grub if needed: sudo grub2-mkconfig -o /boot/grub2/grub.cfg

GDM crashes with "no session desktop files"

sudo dnf install gnome-session-xsession -y

Display corruption / scanlines

Remove nvidia-drm.modeset=1 from kernel parameters.

Can't login at local TTY (but SSH works)

SELinux issue. Either:

  • Add selinux=0 to kernel parameters, or
  • Run sudo setenforce 0 after boot via SSH

Fans spinning constantly

May happen during driver issues. Should stabilize once X is running properly.

What Works

  • GDM login screen
  • GNOME desktop on X11
  • Full GPU acceleration
  • External displays (via DisplayPort/HDMI)
  • Suspend/resume (requires xorg-x11-drv-nvidia-470xx-power package)

Expected Quirks

  • GDM may briefly show garbled/fuzzed display before rendering correctly. This is normal - without nvidia-drm.modeset, X11 handles display init rather than the kernel.
  • First app launches may be slow (e.g., Firefox) as GPU acceleration initializes. Subsequent launches are faster.
  • Occasional compositor glitches - GPU-accelerated web content (WebGL, PWAs in GNOME Web) can sometimes cause visual corruption (scanlines, missing alpha channel). Fix by restarting GNOME Shell: Alt+F2r → Enter.

What Doesn't Work

  • Wayland (nvidia-470 doesn't support it well)
  • Intel GPU switching (firmware ignores it)
  • nvidia-drm.modeset=1 (causes display corruption)
  • nvidia-smi (limited on this GPU)

Reverting to nouveau (open source driver)

sudo dnf remove akmod-nvidia-470xx xorg-x11-drv-nvidia-470xx nvidia-settings-470xx
sudo rm /etc/modprobe.d/blacklist-nouveau.conf
sudo dracut --force
sudo reboot

Note: nouveau has stability issues on this GPU (random crashes, CTXSW_TIMEOUT errors). The proprietary driver is more stable despite the setup complexity.

Files Modified

  • /etc/modprobe.d/blacklist-nouveau.conf - nouveau blacklist
  • /etc/gdm/custom.conf - WaylandEnable=false
  • /boot/loader/entries/*.conf - kernel parameters (remove nvidia-drm.modeset=1)

Packages Installed

  • akmod-nvidia-470xx - kernel module builder
  • xorg-x11-drv-nvidia-470xx - X11 driver
  • gnome-session-xsession - X11 session files for GDM
  • xorg-x11-drv-nvidia-470xx-power - suspend/resume support (preserves GPU memory)

Recovery Tools

  • Fedora Live USB - for chroot recovery
  • /usr/local/bin/gpu-switch - GPU switching (doesn't work but installed)
  • Terminal mode boot entry - for troubleshooting without graphics

Power Management / Suspend

What Works

  • Lid close - Suspends reliably on any power state
  • Battery auto-suspend - Works (default 15 min idle timeout)
  • Manual suspend - systemctl suspend works

What Doesn't Work

  • AC auto-suspend - System suspends but immediately wakes due to firmware bug

The AC Wake Issue

The MacBook Pro 11,3 firmware has a known issue with ACPI GPE17 (General Purpose Event). This interrupt fires constantly (~700k+ times) and triggers spurious wakes from S3 sleep.

Attempted fixes that don't work:

  • Disabling ACPI wake sources (XHC1, P0P2, etc.) - still wakes
  • Disabling GPE17 and other GPEs - causes system lockup on resume
  • RTC alarm wasn't the cause

Recommended workaround: Disable AC auto-suspend in GNOME settings:

gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

Current Recommended Settings

# AC: disabled (firmware wake bug)
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

# Battery: suspend after 15 min
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'suspend'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 900

Future Option: xidlehook

If AC auto-suspend is desired, xidlehook can monitor X11 idle time directly and call systemctl suspend. This bypasses GNOME's power management and may behave differently. Not yet tested.

What's Configured

  • TLP 1.7.0 - Installed and active, handles laptop power optimization
  • Sleep mode - s2idle [deep] available, deep (S3) is the default
  • NVIDIA power services - Installed via xorg-x11-drv-nvidia-470xx-power:
    • nvidia-suspend.service - saves GPU state before suspend
    • nvidia-resume.service - restores GPU state after resume
    • nvidia-hibernate.service - saves GPU state before hibernate
    • NVreg_PreserveVideoMemoryAllocations=1 - kernel module parameter

Expected Behavior

Resume may take a moment as the GPU state is restored - this is normal.

Troubleshooting Suspend

If suspend stops working after updates:

# Check nvidia power services are installed
rpm -q xorg-x11-drv-nvidia-470xx-power

# Check PreserveVideoMemoryAllocations is enabled
cat /proc/driver/nvidia/params | grep Preserve

# Check suspend logs
journalctl -b -1 | grep -iE "suspend|resume|nvidia|PM:"

# Check GPE interrupt counts (GPE17 should be high but enabled)
grep -r . /sys/firmware/acpi/interrupts/gpe* 2>/dev/null | grep -v ":0$" | sort -t: -k2 -rn | head -5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment