NVIDIA Driver Installation
Guide for installing NVIDIA proprietary drivers on Fedora 43 with Secure Boot enabled.
System Configuration:
- Model: ASUS ROG Zephyrus G16 GA605WV (2024)
- CPU: AMD Ryzen AI 9 HX 370
- GPU: NVIDIA GeForce RTX 4060 Laptop (Max-Q) + AMD Radeon 890M (iGPU)
- OS: Fedora 43
- Kernel: 6.18.9-200.fc43.x86_64
- Display Server: Wayland (GNOME 49)
- Secure Boot: Enabled
Driver Information:
- Version: 580.119.02
- Source: RPM Fusion
- Installation Method: akmod (automatic kernel module rebuilding)
Prerequisites
System Verification
Check kernel version
Required: Kernel 6.10+ for Ryzen AI 9 HX 370 support.
uname -rCheck Secure Boot status
mokutil --sb-stateWhy Proprietary Driver
The open-source Nouveau driver has poor performance on modern NVIDIA GPUs. The proprietary driver is required for:
- Gaming and graphics-intensive applications
- CUDA workloads
- Proper Wayland support (available since driver 555+)
Installation Steps
Step 1: Resolve repository issues
If encountering checksum errors during dnf update, clean the cache:
sudo dnf clean all
sudo dnf makecacheStep 2: Add RPM Fusion repositories
RPM Fusion provides NVIDIA drivers for Fedora. NVIDIA’s official CUDA repository does not yet support Fedora 43.
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm -yStep 3: Update system
sudo dnf update -yWait for update completion.
Step 4: Verify driver version
Check available NVIDIA driver version:
dnf info akmod-nvidiaConfirm the version matches the current release for Fedora 43.
Step 5: Install NVIDIA driver
Install driver with CUDA support:
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda -yThis installs the driver, CUDA libraries, and build dependencies (about 1 GB).
akmod-nvidia- Automatic kernel module builderxorg-x11-drv-nvidia- NVIDIA driver (supports both X11 and Wayland)xorg-x11-drv-nvidia-cuda- CUDA libraries- Build dependencies (gcc, kernel-devel, etc.)
Note: A MOK password prompt may not appear during installation. This is normal.
Step 6: Build kernel modules
Force akmod to build NVIDIA kernel modules:
sudo akmods --forceThis process may take 5-10 minutes.
Step 7: Verify kernel modules
Check that kernel modules were built:
ls /lib/modules/$(uname -r)/extra/nvidia/All five kernel modules should be present.
Step 8: First reboot and check GNOME Software
sudo rebootAfter reboot, open GNOME Software and note the MOK enrollment code. The driver is not yet active.
Step 9: MOK enrollment on next boot
Reboot again:
sudo rebootDuring boot, the MOK Management screen (blue screen) will appear:
- Select “Enroll MOK”
- Select “Continue”
- Select “Yes”
- Enter the MOK enrollment code from GNOME Software
- Reboot
The system will boot normally after MOK enrollment.
Step 10: Rebuild modules after MOK enrollment
After MOK enrollment, rebuild the kernel modules. They will now be signed with the enrolled key.
sudo akmods --force --rebuildStep 11: Final reboot
sudo rebootThe NVIDIA driver will now load correctly. GNOME Software should show the driver as installed (not pending).
Step 12: Enable NVIDIA power management services
Enable NVIDIA power services for better suspend/resume behavior and power management:
sudo systemctl enable nvidia-hibernate.service nvidia-suspend.service nvidia-resume.serviceWhat these services do:
nvidia-hibernate.service- Properly saves GPU state before hibernationnvidia-suspend.service- Manages GPU state during system suspendnvidia-resume.service- Restores GPU state after resume
These services prevent GPU state issues after suspend/resume cycles.
Important: Do NOT enable nvidia-powerd — mask it permanently
The nvidia-powerd.service manages NVIDIA Dynamic Boost, which shifts extra wattage (~5-15W) from the CPU to the GPU during heavy GPU loads. While useful on Intel-based laptops, it conflicts with AMD ATPX power management on the Zephyrus G16 and causes soft lockups and “GPU has fallen off the bus” errors.
On this laptop, GPU power is managed via ATPX (AMD-driven via ACPI). The NVIDIA suspend/hibernate/resume services and supergfxctl handle power states correctly without nvidia-powerd.
What you lose by disabling it: Minimal — a few FPS less during heavy GPU workloads. The ~5-15W Dynamic Boost is not worth the instability on AMD ATPX hardware.
Disable and mask permanently:
sudo systemctl disable nvidia-powerd.service
sudo systemctl stop nvidia-powerd.service
sudo systemctl mask nvidia-powerd.serviceMasking creates a symlink to /dev/null, preventing any process — including NVIDIA driver updates via dnf — from re-enabling the service.
If you want to try re-enabling it later (e.g., after a kernel or driver update that may fix the ATPX conflict):
sudo systemctl unmask nvidia-powerd.service
sudo systemctl enable --now nvidia-powerd.serviceReference:
Post-Installation Verification
Test 1: Verify NVIDIA driver
After reboot, check driver status:
nvidia-smiYou should see the NVIDIA driver and CUDA versions listed.
Test 2: Verify Wayland session
Confirm running Wayland (not X11):
echo $XDG_SESSION_TYPETest 3: Check loaded kernel modules
lsmod | grep nvidiaThe NVIDIA modules are loaded and the driver is functional.
Test 4: Verify in GNOME Software
Open GNOME Software (white bag icon):
- Navigate to “Installed”
- Search for “NVIDIA Linux Graphics Driver”
- Status should show “Installed” (not “Pending”)
- “Uninstall” button is visible
This confirms the system recognizes the driver as properly installed.
Performance Optimizations
Kernel parameters for improved performance and stability
Adding certain kernel parameters can improve NVIDIA driver performance, especially for Wayland sessions and dual-GPU setups.
Step 1: Add recommended kernel parameters
sudo grubby --update-kernel=ALL --args="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 nvidia-drm.fbdev=1 nvidia.NVreg_PreserveVideoMemoryAllocations=1"Step 2: Verify parameters were added
sudo grubby --info=ALL | grep argsExpected output should include the added kernel parameters.
Step 3: Reboot to apply changes
sudo rebootWhat these parameters do:
rd.driver.blacklist=nouveau- Prevents the open-source Nouveau driver from loading during early boot (initramfs)modprobe.blacklist=nouveau- Prevents Nouveau from loading after bootnvidia-drm.modeset=1- Enables NVIDIA kernel mode setting for better Wayland support and performancenvidia-drm.fbdev=1- Makes NVIDIA use its framebuffer via the kernel DRM framework instead of a generic framebuffer. Improves handoff between console and Wayland/GNOME and prevents race conditions during suspend/resume on hybrid GPU laptopsnvidia.NVreg_PreserveVideoMemoryAllocations=1- Preserves VRAM allocations during suspend/resume instead of releasing and rebuilding them. Prevents corrupted VRAM after resume, which can cause soft lockups
Why blacklist Nouveau:
- The proprietary NVIDIA driver and Nouveau cannot coexist
- Blacklisting prevents conflicts and ensures the proprietary driver is always used
- If the NVIDIA driver fails, you can remove these parameters from GRUB to fall back to Nouveau
Benefits:
- Better Wayland performance and stability
- Prevents driver conflicts during boot
- Improved external monitor support
- More stable suspend/resume cycles on hybrid GPU setups
- Smoother graphics performance in general
Note: These parameters are optional but recommended for optimal performance.
Re-enable graphical boot splash:
Fedora uses rhgb (Red Hat Graphical Boot) and quiet to show a Plymouth splash screen during boot instead of scrolling kernel text. If you removed these while debugging NVIDIA or boot issues, re-add them:
sudo grubby --update-kernel=ALL --args="rhgb quiet"The default Plymouth theme (bgrt) shows the ASUS/BIOS manufacturer logo. To debug boot issues in the future, you can temporarily remove them:
sudo grubby --update-kernel=ALL --remove-args="rhgb quiet"References:
ICC Color Profiles
Install ASUS GameVisual color profiles for Sharp LQ160R1JW02 panel
The GA605WV ships with a Sharp LQ160R1JW02 16" 2560x1600 240Hz display. ASUS factory-calibrates each panel and provides color profiles via their ASUS System Control Interface. On Windows, these are automatically applied by Armoury Crate/GameVisual. On Linux, we must install them manually.
These color profiles were extracted from ASUS Windows driver packages and optimized for GNOME Color Management.
Install the color profiles:
The ICC color profiles are located in the /icc-profiles/ directory of this repository. Clone the repository or manually download the profiles and copy them to ~/.local/share/icc:
mkdir -p ~/.local/share/icc
# If you've already cloned the repository:
cp /icc-profiles/*.icm ~/.local/share/icc/
# Or download the specific profiles you need from the repositoryActivate Native profile in GNOME:
- Open Settings → Color Management
- Select Built-In Screen
- Click Add Profile
- Select Native
- Click Add
Note: If GNOME Settings shows old technical names (e.g., “ASUS GA605WV 1002 104D158E CMDEF” instead of “Native”), close Settings and reopen, or log out/in to refresh the color cache.
Available color profiles:
| GNOME Name | File | Description |
|---|---|---|
| Native | GA605WV_1002_104D158E_CMDEF.icm | Recommended - Factory-calibrated for Sharp LQ160R1JW02 panel, best color accuracy |
| DCI-P3 | ASUS_DCIP3.icm | Saturated DCI-P3 colors for gaming/media (Vivid mode) |
| Display P3 | ASUS_DisplayP3.icm | Display P3 colorspace for Apple-compatible workflows |
| sRGB | ASUS_sRGB.icm | sRGB standard for web/photo work |
Recommendation:
Use Native for best color accuracy. This profile contains factory calibration specific to the Sharp LQ160R1JW02 panel in this laptop. The other profiles (DCI-P3, Display P3, sRGB) are generic colorspaces without panel-specific corrections.
Note: The _1002_ in the filename refers to the AMD iGPU (Vendor ID 0x1002), which drives the internal eDP display on this hybrid GPU laptop.
Background:
The profiles were found through analysis of ASUS Windows driver packages. The ASUS CDN URL structure:
https://dlcdn-rogboxbu1.asus.com/pub/ASUS/APService/Gaming/SYS/ROGS/{id}-{code}-{hash}.zipFor the GA605WV, this is: 20016-BWVQPK-01624c1cdd5a3c05252bad472fab1240.zip
The profiles contain factory color corrections specific to the Sharp LQ160R1JW02 panel (Panel ID: 104D158E) used in this laptop model.
Technical Details:
The profiles in this repository are pre-processed with custom ICC metadata ‘desc’ tags so they appear with readable names directly in GNOME Color Management. For users interested in how such modifications work, you can implement similar ICC ‘desc’ tag manipulation yourself using Python’s PIL/ImageCms.
Known Issues
System crashes with external monitors (AMD GPU PSR bug)
Problem: System freezes or crashes when using external monitors via Thunderbolt/USB-C, especially when connecting/disconnecting displays. Logs show AMD GPU errors:
amdgpu 0000:66:00.0: amdgpu: MES failed to respond to msg=RESET
amdgpu 0000:66:00.0: amdgpu: Ring gfx_0.0.0 reset failed
amdgpu 0000:66:00.0: amdgpu: GPU reset begin!Cause: This laptop has dual GPUs (AMD Radeon 890M integrated + NVIDIA RTX 4060 discrete). The AMD GPU’s PSR (Panel Self Refresh) feature has a bug causing crashes with external Thunderbolt monitors.
Solution: Disable AMD PSR by adding a kernel parameter:
sudo grubby --update-kernel=ALL --args="amdgpu.dcdebugmask=0x600"Verify it was added:
sudo grubby --info=ALL | grep argsReboot:
sudo rebootWhat this does:
amdgpu.dcdebugmask=0x600disables PSR (Panel Self Refresh) on the AMD GPU- PSR is a power-saving feature where the display refreshes itself without GPU involvement
- The PSR implementation has bugs with Thunderbolt/USB-C external monitors
Trade-offs:
- Pro: Stable system with external monitors
- Con: Slightly higher power consumption (PSR disabled)
Verification: Monitor for AMD GPU errors while using external displays:
sudo journalctl -f -k | grep -i amdgpuIf no amdgpu: [drm] *ERROR* messages appear, the fix is working.
Reference:
VS Code crashes system (AMD GPU page fault - Kernel 6.18.x bug)
What’s happening: System freezes completely during VS Code use. Kernel 6.18.x/6.19.x have critical amdgpu driver bugs. VS Code hardware acceleration triggers AMD Radeon 890M page fault → complete freeze.
Fix:
Add to ~/.config/Code/User/settings.json:
{
"disable-hardware-acceleration": true
}Next steps: Restart VS Code. System stays stable, VS Code slightly slower but perfectly usable.
Sources:
Brave Browser crashes system (AMD GPU page fault - Kernel 6.18.x bug)
What’s happening: System freezes or crashes during Brave Browser use, even with minimal workload (a few tabs). This is the same underlying issue as the VS Code crash: Chromium-based applications with hardware acceleration trigger AMD Radeon 890M page faults on kernel 6.18.x/6.19.x.
Typical crash sequence in logs:
amdgpu: [gfxhub] page fault (src_id:0 ring:24 vmid:2)
amdgpu: Faulty UTCL2 client ID: SQC (data)
amdgpu: ring gfx_0.0.0 timeout, signaled seq=302899, emitted seq=302901
amdgpu: GPU reset begin!After GPU reset, gnome-shell crashes (Signal 6 ABRT) because it detects a context reset.
Fix:
Open Brave Browser and go to brave://settings/system. Turn off “Use hardware acceleration when available”.
Alternatively via terminal:
sed -i 's/"hardware_acceleration_mode_previous":true/"hardware_acceleration_mode_previous":false/' ~/.config/BraveSoftware/Brave-Browser/Local\ StateOr start Brave with the --disable-gpu flag:
brave-browser-stable --disable-gpuNext steps:
Restart Brave. Verify via brave://gpu that GPU acceleration is disabled. System stays stable, Brave is slightly slower on heavy pages but perfectly usable.
Background: Brave, VS Code, and other Chromium-based applications (Chrome, Edge, Electron apps) use GPU shader compilation via Mesa. On kernel 6.18.x, the amdgpu driver has a bug in the Shader Queue Controller (SQC) memory access, causing page faults that trigger a full GPU reset. The fix is to disable hardware acceleration per application until a kernel/Mesa update resolves the issue.
Sources:
NVIDIA soft lockup with minimal GPU load (hybrid GPU power management)
What’s happening: System freezes with an NVIDIA soft lockup, even without active GPU use. Kernel logs show:
watchdog: BUG: soft lockup - CPU#23 stuck for 62s!
NVRM: Xid (PCI:0000:65:00): 79, pid=<...>, GPU has fallen off the busThis can occur due to a combination of factors on hybrid GPU laptops:
nvidia-powerdconflicts with AMD ATPX power management- NVIDIA dGPU power state transitions fail
- Corrupted VRAM after suspend/resume cycles
Additional symptom: Reboot hang (black screen, backlights stay on)
The system appears to shut down but never completes the hardware reset — the screen goes black but keyboard and screen backlights remain on. This occurs when nvidia-powerd interferes with ACPI power state transitions during shutdown/reboot.
Root cause: supergfxd starts nvidia-powerd behind your back
Even when nvidia-powerd is disabled via systemctl disable, supergfxd (the GPU switching daemon from asusctl) directly calls systemctl start nvidia-powerd.service during GPU mode switches. This bypasses the disabled state and re-activates the conflict with ATPX.
How this was diagnosed:
Checking the logs of the hung boot reveals supergfxd starting nvidia-powerd:
journalctl -b -1 --no-pager | grep -iE "nvidia.*powerd|supergfxd"Key evidence:
supergfxd: [DEBUG supergfxctl] Did CommandArgs { inner: ["start", "nvidia-powerd.service"] }
nvidia-powerd: ERROR! Client (presumably SBIOS) has requested to disable Dynamic Boost DC controllerThe SBIOS error confirms the firmware rejected Dynamic Boost, but nvidia-powerd was already running and interfering with power state management. Checking the shutdown sequence:
journalctl -b -1 --reverse | head -20Shows the hardware watchdog failed to stop, confirming the ACPI reboot never completed:
watchdog: watchdog0: watchdog did not stop!Fix:
- Disable and mask
nvidia-powerd(masking is essential —disablealone is not enough becausesupergfxdbypasses it):
sudo systemctl disable nvidia-powerd.service
sudo systemctl stop nvidia-powerd.service
sudo systemctl mask nvidia-powerd.service- Add kernel parameters for more stable NVIDIA power management:
sudo grubby --update-kernel=ALL --args="nvidia-drm.fbdev=1 nvidia.NVreg_PreserveVideoMemoryAllocations=1"- Reboot:
sudo rebootNext steps:
System is more stable after these changes. The NVIDIA dGPU is still properly managed via ATPX (AMD-driven power switching) without nvidia-powerd interfering. The mask creates a symlink to /dev/null, ensuring no process — including supergfxd and NVIDIA driver updates — can re-enable the service.
Background:
On laptops with AMD iGPU + NVIDIA dGPU, the ATPX framework (via ACPI) controls which GPU is active. nvidia-powerd tries to make power decisions independently, which conflicts with ATPX. The NVreg_PreserveVideoMemoryAllocations=1 parameter prevents VRAM from being lost during power transitions, and nvidia-drm.fbdev=1 provides cleaner framebuffer handoff.
Troubleshooting
nvidia-smi command not found or fails
Check if NVIDIA modules are loaded:
lsmod | grep nvidiaCheck system logs for errors:
sudo journalctl -b | grep nvidiaRebuild kernel modules:
sudo akmods --force --rebuild
sudo rebootMOK enrollment issues or "Key was rejected by service" error
If you receive the error modprobe: ERROR: could not insert 'nvidia': Key was rejected by service, the kernel modules were built before MOK enrollment completed.
Solution:
# Rebuild modules after MOK enrollment
sudo akmods --force --rebuild
# Reboot
sudo rebootTo reset MOK if needed:
sudo mokutil --resetReboot and attempt enrollment again.
Running X11 instead of Wayland
Check session type:
echo $XDG_SESSION_TYPEIf output is x11, ensure Wayland is enabled in GDM:
sudo nano /etc/gdm/custom.confVerify this line is present and not commented:
WaylandEnable=trueReboot after changes.
Kernel module build failures
Ensure kernel headers match running kernel:
sudo dnf install kernel-devel-$(uname -r)Force rebuild:
sudo akmods --forceTechnical Notes
Package Naming
The package xorg-x11-drv-nvidia is a legacy name. The driver supports both X11 and Wayland. Fedora 43 defaults to Wayland with GNOME.
Secure Boot
Akmod handles Secure Boot module signing automatically. The akmods systemd service rebuilds kernel modules automatically after kernel updates.
GNOME Software
GNOME Software may show “NVIDIA Linux Graphics Driver” with “Pending install” status. This is a GUI synchronization issue and can be ignored. The driver is properly installed via DNF.