- NVIDIA* Drivers¶
- Prerequisites¶
- Known issues¶
- Installation¶
- Configure workarounds¶
- Install DKMS¶
- Download the NVIDIA drivers¶
- Disable the nouveau driver¶
- Configure alternative software paths¶
- Install the NVIDIA drivers¶
- Updating¶
- Uninstallation¶
- Troubleshooting¶
- No display or blank screen¶
- “Oh no! Something has gone wrong” GNOME* crash¶
- Slow boot times¶
- Brightness control¶
- Additional resources¶
NVIDIA* Drivers¶
NVIDIA manufactures graphics processing units (GPU), also known as graphics cards.
NVIDIA devices on Linux* have two popular device driver options: the opensource drivers from the nouveau project or the proprietary drivers published by NVIDIA. The nouveau drivers are built into the Clear Linux* OS kernel and are loaded automatically at system boot if a compatible card is detected.
These instructions show how to use the proprietary NVIDIA drivers, which require a manual installation.
Software installed outside of swupd is not updated with Clear Linux OS updates and must be updated and maintained manually.
For example, the file /usr/lib/libGL.so conflicts with the file provided by the mesa package in Clear Linux OS and the file NVIDIA provides. If a Clear Linux OS update or repair overwrites these files, a reinstallation of the NVIDIA driver might be required.
Prerequisites¶
Known issues¶
Systems with multiple graphics devices, including integrated graphics (iGPU), are known to be problematic.
Some systems come with a hybrid graphics configuration for a balanced power and performance profile. This configuration is commonly found on laptops. NVIDIA Optimus technology, is designed to allow switching seamlessly between a NVIDIA device and another graphics devices sharing the same display.
Getting NVIDIA Optimus on Linux working well with both graphics devices adds an additional level of complexity with platform specific steps and may require additional software. Installation for systems with NVIDIA Optimus with both graphics devices operating is not covered by the scope of this documentation. As a simple workaround, some systems can disable one of the graphics devices or NVIDIA Optimus in the system firmware.
The Long Term Support (LTS) kernel variant is more likely to be compatible with proprietary NVIDIA drivers.
See the Troubleshooting section for more known issues and solutions.
Installation¶
Configure workarounds¶
Some workarounds are required for the NVIDIA proprietary drivers to be usable and sustainable on Clear Linux OS.
- Remove the kernel command-line parameter intel_iommu=igfx_off or disable input–output memory management unit (IOMMU), also known as Intel® Virtualization Technology (Intel® VT) for Directed I/O (Intel® VT-d), in your system EFI/BIOS. See this GitHub report and the NVIDIA documentation on DMA issues for more information. The intel_iommu-igfx_off kernel parameter can be removed with the commands below:
sudo mkdir -p /etc/kernel/cmdline-removal.d/ echo "intel_iommu=igfx_off" | sudo tee /etc/kernel/cmdline-removal.d/intel-iommu.conf
- Create a systemd service unit to overwrite the Clear Linux OS provided libGL.so.1 files with a symlink to the NVIDIA copies.
sudo tee /etc/systemd/system/fix-nvidia-libGL-trigger.service > /dev/null [Unit] Description=Fixes libGL symlinks for the NVIDIA proprietary driver BindsTo=update-triggers.target [Service] Type=oneshot ExecStart=/usr/bin/ln -sfv /opt/nvidia/lib/libGL.so.1 /usr/lib/libGL.so.1 ExecStart=/usr/bin/ln -sfv /opt/nvidia/lib32/libGL.so.1 /usr/lib32/libGL.so.1 EOF
sudo systemctl daemon-reload
sudo systemctl add-wants update-triggers.target fix-nvidia-libGL-trigger.service
Install DKMS¶
The Dynamic Kernel Module System (DKMS) allows the NVIDIA kernel modules to be automatically integrated when kernel updates occur in Clear Linux OS. Install the appropriate DKMS bundle using the instructions below:
The Long Term Support (LTS) kernel variant is more likely to remain compatible between updates with NVIDIA drivers.
The kernel-native-dkms bundle provides the DKMS program and Linux kernel headers, which are placed under /usr/lib/modules/$(uname -r)/build/include/ and are required to compile kernel modules.
The kernel-native-dkms bundle also:
- Adds a systemd update trigger ( /usr/lib/systemd/system/dkms-new-kernel.service ) to automatically run DKMS to rebuild modules after a kernel upgrade occurs with swupd update .
- Disables kernel module signature verification by appending a kernel command-line parameter (module.sig_unenforce) from the /usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf file.
- Adds a notification to the Message of the Day (MOTD) indicating kernel module signature verification is disabled.
We recommend that you always review the swupd update output to make sure kernel modules were successfully rebuilt against the new kernel. This is especially important for systems where a successful boot relies on a kernel module.
Install the kernel-native-dkms or kernel-lts-dkms bundle.
- Determine which kernel variant is running on Clear Linux OS. Only the native and lts kernels are enabled to build and load out-of-tree kernel modules with DKMS.
sudo swupd bundle-add kernel-native-dkms
sudo swupd bundle-add kernel-lts-dkms
sudo clr-boot-manager update reboot
Download the NVIDIA drivers¶
wget https://download.nvidia.com/XFree86/Linux-x86_64//NVIDIA-Linux-x86_64-.run
Disable the nouveau driver¶
The proprietary NVIDIA driver is incompatible with the nouveau driver and must be disabled before installation can continue.
- Disable the nouveau driver by creating a blacklist file under /etc/modprobe.d and reboot.
sudo mkdir /etc/modprobe.d printf "blacklist nouveau \noptions nouveau modeset=0 \n" | sudo tee --append /etc/modprobe.d/disable-nouveau.conf
Configure alternative software paths¶
The NVIDIA installer is directed to install files under /opt/nvidia as much as possible to keep its contents isolated from the rest of the Clear Linux OS system files under /usr . The dynamic linker and X server must be configured to use the content under /opt/nvidia .
- Configure the dynamic linker to look for and to cache shared libraries under /opt/nvidia/lib and /opt/nvidia/lib32 in addition to the default paths.
echo "include /etc/ld.so.conf.d/*.conf" | sudo tee --append /etc/ld.so.conf sudo mkdir /etc/ld.so.conf.d printf "/opt/nvidia/lib \n/opt/nvidia/lib32 \n" | sudo tee --append /etc/ld.so.conf.d/nvidia.conf
sudo mkdir -p /etc/X11/xorg.conf.d/ sudo tee /etc/X11/xorg.conf.d/nvidia-files-opt.conf > /dev/null Section "Files" ModulePath "/usr/lib64/xorg/modules" ModulePath "/opt/nvidia/lib64/xorg/modules" EndSection EOF
Install the NVIDIA drivers¶
- A terminal not running on /dev/tty1 is useful to view uninterrupted installation progress. Switch to a secondary virtual terminal by pushing CTRL + ALT + F2 or remotely login over SSH.
- Navigate to the directory where the NVIDIA installer was downloaded. In this example, it was saved in the Downloads folder.
sudo sh NVIDIA-Linux-x86_64-.run \ --utility-prefix=/opt/nvidia \ --opengl-prefix=/opt/nvidia \ --compat32-prefix=/opt/nvidia \ --compat32-libdir=lib32 \ --x-prefix=/opt/nvidia \ --x-module-path=/opt/nvidia/lib64/xorg/modules \ --x-library-path=/opt/nvidia/lib64 \ --x-sysconfig-path=/etc/X11/xorg.conf.d \ --documentation-prefix=/opt/nvidia \ --application-profile-path=/etc/nvidia/nvidia-application-profiles-rc.d \ --no-precompiled-interface \ --no-nvidia-modprobe \ --no-distro-scripts \ --force-libglx-indirect \ --glvnd-egl-config-path=/etc/glvnd/egl_vendor.d \ --egl-external-platform-config-path=/etc/egl/egl_external_platform.d \ --dkms \ --silent
ln -sv /opt/nvidia/share/applications/nvidia-settings.desktop $HOME/.local/share/applications
Updating¶
The proprietary NVIDIA drivers are installed manually outside of swupd and must be updated manually when needed.
Updating the NVIDIA drivers follows the same steps as initial installation, however the desktop environment must first be stopped so that the drivers are not in use.
- Follow the steps in the Download the NVIDIA drivers section to get the latest NVIDIA drivers.
- Temporarily set the default boot target to the multi-user, which is a non-graphical runtime.
sudo systemctl set-default multi-user.target
sudo systemctl set-default graphical.target
Important Some flatpak applications won’t start after updating the NVIDIA drivers until the flatpak runtime is updated with the corresponding driver version.
Uninstallation¶
The NVIDIA drivers and associated software can be uninstalled and nouveau driver restored with the instructions in this section.
- Remove the files created for workarounds.
sudo rm /etc/kernel/cmdline-removal.d/intel-iommu.conf sudo rm /etc/systemd/system/fix-nvidia-libGL-trigger.service sudo rm /etc/systemd/system/update-triggers.target.wants/fix-nvidia-libGL-trigger.service sudo systemctl daemon-reload
sudo rm /etc/modprobe.d/disable-nouveau.conf
sudo rm /etc/ld.so.conf.d/nvidia.conf sudo ldconfig
Optionally, restore ld.so.conf to default if no other configuration files under /etc/ld.so.conf.d needs to be included.
sudo sed -i '/^include \/etc\/ld\.so\.conf\.d\/\*\.conf$/d' /etc/ld.so.conf
sudo rm /etc/X11/xorg.conf.d/nvidia-files-opt.conf
unlink -v $HOME/.local/share/applications/nvidia-settings.desktop
sudo /opt/nvidia/bin/nvidia-uninstall
Troubleshooting¶
- The NVIDIA driver places installer and uninstaller logs under /var/log/nvidia-install and /var/log/nvidia-uninstall .
- NVIDIA-Linux-x86_64-.run —advanced-options shows many parameters to control installation behavior.
- NVIDIA-Linux-x86_64-.run —extract-only extracts installation files into a directory named NVIDIA-Linux-x86_64- .
- The X server logs under /var/log/X* contain useful information about display and driver loading. Check all the files and timestamps when troubleshooting.
- The DKMS build logs under /var/lib/dkms/nvidia* contain information about kernel module builds which can be useful if the NVIDIA driver breaks between kernel upgrades.
No display or blank screen¶
Check to see if the display has come up on another graphics device, including the integrated graphics device.
You might get a black screen or the login screen might not come up after installing the NVIDIA drivers until an Xorg configuration has been defined for your monitors.
“Oh no! Something has gone wrong” GNOME* crash¶
NVIDIA driver GNOME crash dialogue on Clear Linux OS. ¶
There have been reports of GNOME crashing with an “Oh no! Something has gone wrong” error message with NVIDIA drivers installed while other graphics devices are enabled.
Try disabling other graphics devices, including integrated graphics, in your system’s EFI/BIOS.
Slow boot times¶
There have been reports of slow boot times with NVIDIA drivers installed. Normally, when GDM detects NVIDIA proprietary drivers, it will disable Wayland and enable X11. Should GDM fail to disbale Wayland, it may results in slow boot times, according to this GitHub reprot.
To manually disable Wayland:
sudo tee /etc/gdm/custom.conf > /dev/null [daemon] WaylandEnable=false EOF
Brightness control¶
If you can’t control the screen brightness with the NVIDIA driver installed, try one of the solutions below:
- Add a kernel parameter acpi_osi= which disables the ACPI Operating System Identification function. Some system firmware may manipulate brightness control keys based on the reported operating system. Disabling the identification mechanism can cause the system firmware to expose brightness controls that are recognizable in Linux.
sudo mkdir -p /etc/kernel/cmdline.d echo "acpi_osi=" | sudo tee /etc/kernel/cmdline.d/acpi-backlight.conf sudo clr-boot-manager update
sudo mkdir -p /etc/kernel/cmdline.d echo "nvidia.NVreg_EnableBacklightHandler=1" | sudo tee /etc/kernel/cmdline.d/nvidia-backlight.conf sudo clr-boot-manager update
sudo mkdir -p /etc/X11/xorg.conf.d/ sudo tee /etc/X11/xorg.conf.d/nvidia-brightness.conf > /dev/null Section "Device" Identifier "Device0" Driver "nvidia" Option "RegistryDwords" "EnableBrightnessControl=1" EndSection EOF
Additional resources¶
Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries.
© Copyright 2022 Intel Corporation. All Rights Reserved.. Last updated on Nov 09, 2022.
*Other names and brands may be claimed as the property of others.