Files
glfs/shareddeps/drivers/nvidia.xml
2025-06-09 15:34:38 -06:00

1789 lines
58 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../../general.ent">
%general-entities;
<!ENTITY nvidia-download-http "https://us.download.nvidia.com/XFree86/Linux-x86_64/&nvidia-version;/NVIDIA-Linux-x86_64-&nvidia-version;.run">
]>
<sect1 id="nvidia" xreflabel="NVIDIA-&nvidia-version;">
<?dbhtml filename="nvidia.html"?>
<title>NVIDIA-&nvidia-version;</title>
<indexterm zone="nvidia">
<primary sortas="a-nvidia">NVIDIA</primary>
</indexterm>
<sect2 role="package">
<title>Introduction to NVIDIA</title>
<para>
The <application>NVIDIA</application> proprietary driver contains
firmware, kernel drivers, userland drivers pertaining to OpenGL,
Vulkan, and hardware acceleration, and provides useful utilites for
NVIDIA cards. If you don't have a NVIDIA GPU, skip to the next package.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
Recommended kernel version to use: linux-&nvidia-linux-version;
</para>
</listitem>
<listitem>
<para>
Download (HTTP): <ulink url="&nvidia-download-http;"/>
</para>
</listitem>
</itemizedlist>
<bridgehead renderas="sect3">Additional Downloads</bridgehead>
<itemizedlist spacing="compact">
<listitem>
<para>
Required patch:
<ulink url="&patch-root;/nvidia/nvidia-&nvidia-version;-kernel_gpl_cachyos-1.patch"/>
</para>
</listitem>
</itemizedlist>
<bridgehead renderas="sect3">NVIDIA Dependencies</bridgehead>
<bridgehead renderas="sect4">Required</bridgehead>
<para role="required">
&gbm;,
<xref linkend="libglvnd"/>, and
<xref linkend="xorg7-lib"/>
</para>
<bridgehead renderas="sect4">Recommended</bridgehead>
<para role="recommended">
<itemizedlist spacing="compact">
<listitem>
<para>
<ulink url="&slfs-website;/general/cuda.html">CUDA</ulink>
(for NVENC, NVDEC, Optical Flow, and other hardware
acceleration not provided by VDPAU; install after following this
page)
</para>
</listitem>
<listitem>
<para>
<ulink url="&blfs-svn;/x/gtk3.html">GTK-3</ulink> (for
<command>nvidia-settings</command>)
</para>
</listitem>
<listitem>
<para>
<xref linkend="libvdpau"/> (for using the VDPAU driver)
</para>
</listitem>
<listitem>
<para>
<xref linkend="libvk"/> (for using the Vulkan drivers)
</para>
</listitem>
<listitem>
<para>
<xref linkend="nvidia-egl"/> (for EGL driver support)
</para>
</listitem>
<listitem>
<para>
<xref linkend="wayland"/> (needed for Wayland support)
</para>
</listitem>
<listitem>
<para>
<xref linkend="xorg-server"/> (required for running
<command>nvidia-xconfig</command>, like in <xref
linkend="whatnow"/>)
</para>
</listitem>
</itemizedlist>
</para>
</sect2>
<sect2>
<title>Preparing for the NVIDIA Installation</title>
<para>
First enable XFree86 DRI and Nouveau
<footnote><para>
Newer versions of
the NVIDIA drivers will fail to compile with TTY support unless a
graphics driver is included in the kernel. Nouveau is used here, though
alternate graphics drivers may also work.
</para></footnote>
support in the kernel and recompile if necessary.
</para>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="nvidia-kernel.xml"/>
<important><para>
Build these drivers as kernel modules so that they can properly be
blacklisted.
</para></important>
<para>
Extract the <application>NVIDIA</application> driver runfile and
navigate to the extracted directory:
</para>
<screen><userinput>sh NVIDIA-Linux-x86_64-&nvidia-version;.run -x &amp;&amp;
cd NVIDIA-Linux-x86_64-&nvidia-version;</userinput></screen>
<para>
Apply a patch for the proprietary kernel module type for the driver for
compatibility with <application>linux-6.15</application>:
</para>
<screen><userinput>patch -d kernel -Np1 -i ../../nvidia-&nvidia-version;-kernel_gpl_cachyos-1.patch</userinput></screen>
</sect2>
<sect2>
<title>Installation of the NVIDIA Kernel Modules</title>
<note><para>
Building the kernel modules in a chroot will likely cause a build
failure. It is heavily recommended to build them when booted in the LFS
target to avoid <command>uname -r</command> reporting the kernel version
of the host rather than the target leading to build files being unable to
be found.
</para></note>
<para>
Now you will need to build the kernel modules for the driver. There are
two types: <emphasis role="bold">open</emphasis> and
<emphasis role="bold">proprietary</emphasis>. If you have the
NVIDIA Grace Hopper or NVIDIA Blackwell cards, you must
compile the <emphasis role="bold">open</emphasis> kernel modules.
If you have a Turing, Ampere, Ada Lovelace,
or Hopper card, it is recommended to now build the
<emphasis role="bold">open</emphasis> kernel modules.
If you have a Maxwell, Pascal, or Volta card, build the
<emphasis role="bold">proprietary</emphasis> kernel modules.
If you are using both an older and newer card, but not the newest cards,
build the <emphasis role="bold">proprietary</emphasis> kernel modules.
</para>
<para>
If you are going to build the <emphasis role="bold">open</emphasis>
kernel modules, set the <envar>NVIDIA_KERNEL_TYPE</envar> variable:
</para>
<screen><userinput>export NVIDIA_KERNEL_TYPE="kernel-open"</userinput></screen>
<para>
If you are going to instead build the <emphasis
role="bold">proprietary</emphasis> kernel modules, set the
<envar>NVIDIA_KERNEL_TYPE</envar> variable:
</para>
<!-- proprietary is the exception, not the rule -->
<screen><computeroutput>export NVIDIA_KERNEL_TYPE="kernel"</computeroutput></screen>
<para>
There will be 5 or 6 kernel modules that will be built. Depending on your
use case, you can skip building a module or two. The UVM (Unified Virtual
Memory) module is for use with <ulink
url="&slfs-website;/general/cuda.html">CUDA</ulink>. If you won't use
it, nor wish to use its capabilities, you can skip building the UVM
kernel module. There is also the PeerMem module which is for datacenters.
For gaming, it can safely be disabled.
</para>
<para>
For UVM, the module is named <computeroutput>nvidia-uvm</computeroutput>.
For PeerMem, it will be named
<computeroutput>nvidia-peermem</computeroutput>. To skip these, add the
module names to the <envar>NV_EXCLUDE_KERNEL_MODULES</envar> for the
<command>make</command> command. The variable should be seperated, as
such:
<computeroutput>NV_EXCLUDE_KERNEL_MODULES="nvidia-uvm nvidia-peermem"</computeroutput>.
The <command>make</command> command will have the variable set to
nothing. Add to it as you see fit.
</para>
<para>
Now build the kernel modules by running the following commands below
(the commands below will navigate to the right directory based on what
<envar>NVIDIA_KERNEL_TYPE</envar> is set to):
</para>
<screen><userinput>pushd $NVIDIA_KERNEL_TYPE &amp;&amp;
make NV_EXCLUDE_KERNEL_MODULES=</userinput></screen>
<note>
<para>
You may encounter various build failures. This usually happens because
the kernel version you're using is <quote>too high.</quote> If this
happens, it may be necessary to downgrade the kernel to a lower
version. When a new driver release happens, the driver will then most
likely support the kernel version at the time. At the top of this
section, the recommended kernel version to use with this driver is
mentioned to ensure that a build failure does not occur. The current
kernel version used for kernel parameters and such in this book is
linux-&linux-version;.
</para>
</note>
<important>
<para>
When you update the kernel, you will also need to reinstall the
<application>NVIDIA</application> kernel modules.
</para>
<para>
This is because there is glue when kernel modules are built. This glue
doesn't matter too much with first party modules (modules in the kernel
source tree) as the modules are updated at the same time the kernel is.
At that point, there is new glue holding them together. However, when
it comes to third party modules, they aren't updated when the kernel
updates, so this glue the third party modules had on the kernel breaks.
This leads to broken kernel modules. This also applies if you stay on
the same kernel version but change some options, this can also break
the glue.
</para>
<para>
Be sure that when you reinstall the kernel modules, make sure you are
using the new kernel and have the kernel source you built from.
Otherwise the modules will fail to build.
</para>
<para>
When you upgrade the kernel, you will not have to reinstall the
driver software, just the kernel modules.
</para>
</important>
<para>
Now as the &root; user:
</para>
<screen role="root"><userinput>for mod in nvidia{,-drm,-modeset,-peermem,-uvm}; do
rm -vf /usr/lib/modules/$(uname -r)/kernel/drivers/video/$mod.ko
done
make modules_install &amp;&amp;
popd</userinput></screen>
<para>
Install the firmware as the &root; user:
</para>
<screen role="root"><userinput>rm -rvf /usr/lib/firmware/nvidia/[0-9]* &amp;&amp;
mkdir -pv /usr/lib/firmware/nvidia/&nvidia-version; &amp;&amp;
cp -v firmware/*.bin /usr/lib/firmware/nvidia/&nvidia-version;</userinput></screen>
<para>
Finally, unset the <envar>NVIDIA_KERNEL_TYPE</envar> variable:
</para>
<screen><userinput>unset NVIDIA_KERNEL_TYPE</userinput></screen>
</sect2>
<sect2>
<title>Making a NVIDIA Software Installation Script</title>
<note><para>
Skip to <xref linkend="nvidia-install"/> if you already made an install
script.
</para></note>
<para>
There is a lot of software this driver provides. A portion of it
depending on your usecase can be safely skipped. To offer
customizability without complexity, the following section is dedicated to
walking you through making a custom install script to install only what
you need.
</para>
<para>
First make a starter script so that it can be added to:
</para>
<screen><userinput>cat &gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>#!/bin/sh
# Install script for NVIDIA driver software, not including kernel modules.
# Script modules made by
# &copyholder;, &copyrightdate;.
NV_VERSION=$(basename $PWD | sed 's/NVIDIA-Linux-x86_64-//')
nvidia_symlink() {
pushd $(dirname $1) &gt; /dev/null
origin=$(basename $1)
if [ $origin = "libOpenCL" ]; then
VERSION="1.0.0"
else
VERSION=$NV_VERSION
fi
soname=$(objdump -p $origin.so.$VERSION |
grep 'SONAME' | awk '{print $2}')
if [ -n $soname ]; then
if [ $origin.so.$VERSION != $soname ]; then
ln -sfv $origin.so.$VERSION $soname
fi
ln -sfv $soname $origin.so
fi
popd &gt; /dev/null
}
</literal>
EOF</userinput></screen>
<!-- We have to use -f for ln or else $soname will not link to the current
library (*.so.$VERSION). Furthermore, the soname may be same as
*.so.$VERSION, but $orign.so still needs to be made. We have to force it
or else *.so will link to the previous library.
"Yes, this is stupid!"
- Heavy from "The Heavy is Dead" -->
<para>
Each subsection of this section will have an explanation of a piece of
the driver you may need. Along with that, it might have two subsections:
a 64-bit and lib32 section. If you're not doing multilib, you can skip
the lib32 sections and only follow the 64-bit ones. Each block of
commands will add to the script.
</para>
<sect3>
<title>Mandatory Software</title>
<para>
Most of this software is needed by other components in this driver,
while the rest of it helps with loading the driver.
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing mandatory software - 64-bit"
mkdir -pv /usr/lib/gbm &amp;&amp;
mkdir -pv /usr/share/nvidia &amp;&amp;
nvidia_lib=(
libnvidia-cfg
libnvidia-eglcore
libnvidia-glcore
libnvidia-glsi
libnvidia-glvkspirv
libnvidia-gpucomp
libnvidia-ml
libnvidia-pkcs11
libnvidia-tls
libnvidia-allocator
)
for lib in ${nvidia_lib[@]}; do
cp -v $lib.so* /usr/lib &amp;&amp;
nvidia_symlink /usr/lib/$lib || exit
done &amp;&amp;
ln -svrf /usr/lib/libnvidia-allocator.so \
/usr/lib/gbm/nvidia-drm_gbm.so &amp;&amp;
install -vm4755 nvidia-modprobe /usr/bin &amp;&amp;
cp -v nvidia-application-profiles* \
/usr/share/nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing mandatory software - lib32"
mkdir -pv /usr/lib32/gbm &amp;&amp;
nvidia_lib=(
libnvidia-eglcore
libnvidia-glcore
libnvidia-glsi
libnvidia-glvkspirv
libnvidia-gpucomp
libnvidia-ml
libnvidia-tls
libnvidia-allocator
)
for lib in ${nvidia_lib[@]}; do
cp -v 32/$lib.so* /usr/lib32 &amp;&amp;
nvidia_symlink /usr/lib32/$lib || exit
done &amp;&amp;
ln -svrf /usr/lib32/libnvidia-allocator.so \
/usr/lib32/gbm/nvidia-drm_gbm.so &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>X11 Drivers</title>
<para>
Add to the script if you are going to use <xref
linkend="xorg-server"/> or <xref linkend="xwayland"/>.
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing X11 drivers - 64-bit"
mkdir -pv /usr/lib/xorg/modules/{drivers,extensions} &amp;&amp;
mkdir -pv /usr/share/X11/xorg.conf.d &amp;&amp;
cp -v nvidia_drv.so* \
/usr/lib/xorg/modules/drivers &amp;&amp;
cp -v libglxserver_nvidia.so* \
/usr/lib/xorg/modules/extensions &amp;&amp;
ln -svf libglxserver_nvidia.so.*.*.* \
/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so.1 &amp;&amp;
ln -svf libglxserver_nvidia.so.1 \
/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so &amp;&amp;
cp -v libGLX_nvidia.so* \
libnvidia-fbc.so* \
/usr/lib &amp;&amp;
nvidia_symlink /usr/lib/libGLX_nvidia &amp;&amp;
nvidia_symlink /usr/lib/libnvidia-fbc &amp;&amp;
cp -v nvidia-drm-outputclass.conf \
/usr/share/X11/xorg.conf.d &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing X11 drivers - lib32"
cp -v 32/libGLX_nvidia.so* \
32/libnvidia-fbc.so* \
/usr/lib32 &amp;&amp;
nvidia_symlink /usr/lib32/libGLX_nvidia &amp;&amp;
nvidia_symlink /usr/lib32/libnvidia-fbc &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>EGL Drivers</title>
<para>
Add to the script if you are going to use EGL (like with <xref
linkend="wayland"/>).
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing EGL drivers - 64-bit"
mkdir -pv /usr/share/glvnd/egl_vendor.d &amp;&amp;
cp -v libEGL_nvidia.so* \
/usr/lib &amp;&amp;
nvidia_symlink \
/usr/lib/libEGL_nvidia &amp;&amp;
cp -v libnvidia-wayland-client.so* \
/usr/lib &amp;&amp;
nvidia_symlink \
/usr/lib/libnvidia-wayland-client &amp;&amp;
cp -v 10_nvidia.json \
/usr/share/glvnd/egl_vendor.d &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing EGL drivers - lib32"
cp -v 32/libEGL_nvidia.so* /usr/lib32 &amp;&amp;
nvidia_symlink /usr/lib32/libEGL_nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>GLES v2 and v3 Driver</title>
<para>
Add to the script if you didn't disable OpenGL ES v2 and v3 in <xref
linkend="libglvnd"/>.
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the GLES v2 and v3 driver - 64-bit"
cp -v libGLESv2_nvidia.so* \
/usr/lib &amp;&amp;
nvidia_symlink /usr/lib/libGLESv2_nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the GLES v2 and v3 driver - lib32"
cp -v 32/libGLESv2_nvidia.so* \
/usr/lib32 &amp;&amp;
nvidia_symlink /usr/lib32/libGLESv2_nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>Vulkan Configuration File</title>
<para>
Add to the script if you are going to use Vulkan (highly recommended).
A prerequisite is following the <application>X11</application>
section.
</para>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the Vulkan configuration file"
mkdir -pv /usr/share/vulkan/icd.d &amp;&amp;
cp -v nvidia_icd.json /usr/share/vulkan/icd.d &amp;&amp;
</literal>
EOF</userinput></screen>
<para>
The Vulkan driver according to the ICD configuration file is <filename
class="libraryfile">libGLX_nvidia</filename>. If you installed the EGL
drivers, you can make the Vulkan driver use EGL instead of GLX.
</para>
<important><para>
The command below can result in <application>Steam</application> games
that are ran through Proton to crash. It may also cause other issues.
The EGL Vulkan driver does not allow for GLX calls, so if you need to
use an application that uses GLX via Vulkan, do not add to the script
to change the driver. If you want to do so anyway, add to the script.
</para>
<!-- Disincentivize running this -->
<screen role="nodump"><computeroutput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Making the Vulkan driver use EGL instead of GLX"
sed -i 's/GLX/EGL/' \
/usr/share/vulkan/icd.d/nvidia_icd.json &amp;&amp;
</literal>
EOF</computeroutput></screen></important>
</sect3>
<sect3>
<title>VDPAU Driver</title>
<para>
Add to the script if you installed <xref linkend="libvdpau"/>.
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the VDPAU driver - 64-bit"
cp -v libvdpau_nvidia.so* \
/usr/lib/vdpau &amp;&amp;
nvidia_symlink /usr/lib/vdpau/libvdpau_nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the VDPAU driver - lib32"
cp -v 32/libvdpau_nvidia.so* \
/usr/lib32/vdpau &amp;&amp;
nvidia_symlink /usr/lib32/vdpau/libvdpau_nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>OpenCL Driver and Loader</title>
<para>
Add to the script if you want <ulink
url="https://wiki.archlinux.org/title/GPGPU#OpenCL">OpenCL</ulink>
support. This will also install the OpenCL loader.
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the OpenCL driver and loader - 64-bit"
cp -v libOpenCL.so* \
/usr/lib &amp;&amp;
cp -v libnvidia-opencl.so* \
/usr/lib &amp;&amp;
nvidia_symlink /usr/lib/libOpenCL &amp;&amp;
nvidia_symlink /usr/lib/libnvidia-opencl &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the OpenCL driver and loader - lib32"
cp -v 32/libOpenCL.so* \
/usr/lib32 &amp;&amp;
cp -v 32/libnvidia-opencl.so* \
/usr/lib32 &amp;&amp;
nvidia_symlink /usr/lib32/libOpenCL &amp;&amp;
nvidia_symlink /usr/lib32/libnvidia-opencl &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>CUDA Drivers</title>
<para>
Add to the script if you want to use <ulink
url="&slfs-website;/general/cuda.html">CUDA</ulink> or applications
that use it.
</para>
<sect4>
<title>64-bit</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the CUDA drivers - 64-bit"
nvidia_lib=(
libcuda
libcudadebugger
libnvidia-encode
libnvidia-opticalflow
libnvidia-ptxjitcompiler
libnvidia-nvvm
libnvcuvid
)
for lib in ${nvidia_lib[@]}; do
cp -v $lib.so* /usr/lib &amp;&amp;
nvidia_symlink /usr/lib/$lib || exit
done &amp;&amp;
cp -v libnvidia-api* /usr/lib &amp;&amp;
ln -svf /usr/lib/libnvidia-api.so.1 \
/usr/lib/libnvidia-api.so &amp;&amp;
cp -v libnvidia-nvvm70* /usr/lib &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
<sect4>
<title>lib32</title>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the CUDA drivers - lib32"
nvidia_lib=(
libcuda
libnvidia-encode
libnvidia-ptxjitcompiler
libnvidia-nvvm
libnvcuvid
)
for lib in ${nvidia_lib[@]}; do
cp -v 32/$lib.so* /usr/lib32 &amp;&amp;
nvidia_symlink /usr/lib32/$lib || exit
done &amp;&amp;
</literal>
EOF</userinput></screen>
</sect4>
</sect3>
<sect3>
<title>NGX Drivers</title>
<para>
NGX implements DLSS. Add to the script if you want DLSS.
</para>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the NGX drivers"
mkdir -pv /usr/lib/nvidia/wine &amp;&amp;
cp -v libnvidia-ngx.so* \
/usr/lib &amp;&amp;
nvidia_symlink /usr/lib/libnvidia-ngx &amp;&amp;
install -vm755 *nvngx*.dll \
/usr/lib/nvidia/wine &amp;&amp;
</literal>
EOF</userinput></screen>
</sect3>
<sect3>
<title>Raytracing Drivers</title>
<para>
If you want to enable raytracing support, add to the script.
</para>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing the raytracing drivers"
mkdir -pv /usr/share/nvidia &amp;&amp;
cp -v libnvidia-rtcore.so* \
libnvoptix.so* \
/usr/lib &amp;&amp;
nvidia_symlink /usr/lib/libnvidia-rtcore &amp;&amp;
nvidia_symlink /usr/lib/libnvoptix &amp;&amp;
install -vm755 nvoptix.bin \
/usr/share/nvidia &amp;&amp;
</literal>
EOF</userinput></screen>
</sect3>
<!-- Maybe should be in SLFS? -->
<sect3>
<title>NVIDIA-Settings</title>
<para>
Add to the script if you want <command>nvidia-settings</command> which
can let you change settings like framerate in the Xorg server.
</para>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing NVIDIA-Settings"
mkdir -pv /usr/share/applications \
/usr/share/pixmaps &amp;&amp;
cp -v libnvidia-gtk* /usr/lib &amp;&amp;
nvidia_symlink /usr/lib/libnvidia-gtk2 &amp;&amp;
nvidia_symlink /usr/lib/libnvidia-gtk3 &amp;&amp;
install -vm755 nvidia-settings /usr/bin &amp;&amp;
cp -v nvidia-settings.desktop \
/usr/share/applications &amp;&amp;
cp -v nvidia-settings.png \
/usr/share/pixmaps &amp;&amp;
</literal>
EOF</userinput></screen>
</sect3>
<sect3>
<title>NVIDIA-XConfig</title>
<para>
Add to the script if you want <command>nvidia-xconfig</command> which
can generate X11 configuration files.
</para>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing NVIDIA-XConfig"
install -vm755 nvidia-xconfig /usr/bin &amp;&amp;
</literal>
EOF</userinput></screen>
</sect3>
<sect3>
<title>NVIDIA-SMI</title>
<para>
Add to the script if you want <command>nvidia-smi</command> which grabs
information about GPU loads, temperatures, etc. and display it on the
command line.
</para>
<screen><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF"
<literal>echo "Installing NVIDIA-SMI"
install -vm755 nvidia-smi /usr/bin &amp;&amp;
</literal>
EOF</userinput></screen>
</sect3>
<sect3>
<title>Installing the Install Script</title>
<para>
Now that you have a custom install script made, it's time to install it
to the system so it can be ran whenever you update the driver. Do so
now as the &root; user:
</para>
<screen role="root"><userinput>cat &gt;&gt; nvidia-install-soft &lt;&lt; "EOF" &amp;&amp;
<literal># Probe all modules and recreate modules.dep and map files to ensure NVIDIA
# loads at boot.
depmod -a &amp;&amp;
echo "Installation of NVIDIA driver software complete!"</literal>
EOF
install -vm755 nvidia-install-soft /usr/sbin</userinput></screen>
</sect3>
</sect2>
<sect2 id="nvidia-install" role="installation">
<title>Installing the NVIDIA Driver Software</title>
<note><para>
If you have an existing installation, it may be a good idea to follow
<xref linkend="nvidia-uninstalling"/> first before going through this
section to remove some cruft and leftover libraries. This is not
necessary for the most part though.
</para></note>
<para>
After you have made a custom install script, run it in a TTY or chroot as
the &root; user:
</para>
<screen role="root"><userinput>/sbin/nvidia-install-soft</userinput></screen>
<para>
If you want to install the documentation, do so now as the &root; user:
</para>
<screen role="root"><userinput>mkdir -pv /usr/share/doc/nvidia-&nvidia-version; &amp;&amp;
cp -vR html /usr/share/doc/nvidia-&nvidia-version;</userinput></screen>
</sect2>
<sect2 id="nvidia-uninstalling">
<title>Uninstalling the NVIDIA Driver</title>
<para>
If something went wrong with the install process, you want to switch to
another driver without keeping this driver, or want to remove a previous
installation before installing a new driver, create the following script
as the &root; user:
</para>
<screen role="root"><userinput>cat &gt; nvidia-uninstall &lt;&lt; "EOF" &amp;&amp;
<literal>#!/bin/bash
# This script uninstalls the NVIDIA driver.
# Made by &copyholder;, &copyrightdate;.
PRESERVE_FIRMWARE=0
PRESERVE_KERNEL=0
PRESERVE_PROG=0
PRESERVE_LIB=0
while [ $# -gt 0 ]; do
case "$1" in
--preserve-firmware )
echo "Keeping firmware."
PRESERVE_FIRMWARE=1
;;
--preserve-kernel-modules )
echo "Keeping kernel modules."
PRESERVE_KERNEL=1
;;
--preserve-programs )
echo "Keeping programs."
PRESERVE_PROG=1
;;
--preserve-libraries )
echo "Keeping libraries."
PRESERVE_LIB=1
;;
--help | -h )
echo "Usage: nvidia-uninstall [OPTION]"
echo " --preserve-firmware Do not delete firmware"
echo " --preserve-kernel-modules Do not delete kernel modules"
echo " --preserve-programs Do not delete programs"
echo " --preserve-libraries Do not delete libraries"
echo " -h, --help Display this help and exit"
exit
;;
* )
echo "Unknown option: $1"
;;
esac
shift 1
done
echo "Uninstalling the NVIDIA driver..."
nvidia_lib=(
libnvidia-cfg
libnvidia-eglcore
libnvidia-glcore
libnvidia-glsi
libnvidia-glvkspirv
libnvidia-gpucomp
libnvidia-ml
libnvidia-pkcs11
libnvidia-rtcore
libnvidia-tls
libnvidia-allocator
libGLX_nvidia
libnvidia-fbc
libEGL_nvidia
libnvidia-wayland-client
libGLESv2_nvidia
libOpenCL
libnvidia-opencl
libcuda
libcudadebugger
libnvidia-encode
libnvidia-opticalflow
libnvidia-ptxjitcompiler
libnvidia-nvvm
libnvidia-nvvm70
libnvcuvid
libnvidia-api
libnvidia-ngx
libnvoptix
libnvidia-gtk2
libnvidia-gtk3
)
rm -rvf /usr/share/doc/nvidia* &amp;&amp;
if [ "$PRESERVE_FIRMWARE" = "0" ]; then
rm -rvf /usr/lib/firmware/nvidia/[0-9]*
fi
if [ "$PRESERVE_LIB" = "0" ]; then
rm -rvf /usr/lib/nvidia &amp;&amp;
rm -vf /usr/lib{,32}/gbm/nvidia-drm_gbm.so &amp;&amp;
rm -vf /usr/lib/xorg/modules/drivers/nvidia_drv.so* &amp;&amp;
rm -vf /usr/lib/xorg/modules/extensions/libglxserver_nvidia.so* &amp;&amp;
rm -vf /usr/lib{,32}/vdpau/libvdpau_nvidia.so* &amp;&amp;
rm -vf /usr/share/glvnd/egl_vendor.d/10_nvidia.json &amp;&amp;
rm -vf /usr/share/vulkan/icd.d/nvidia_icd.json &amp;&amp;
rm -vf /usr/share/X11/xorg.conf.d/nvidia-drm-outputclass.conf &amp;&amp;
rm -rvf /usr/share/nvidia &amp;&amp;
for lib in ${nvidia_lib[@]}; do
rm -vf /usr/lib{,32}/$lib.so*
done
fi
if [ "$PRESERVE_PROG" = "0" ]; then
for bin in nvidia-{modprobe,settings,smi,xconfig}; do
rm -vf /usr/{,s}bin/$bin
done &amp;&amp;
rm -vf /usr/share/applications/nvidia-settings.desktop &amp;&amp;
rm -vf /usr/share/pixmaps/nvidia-settings.png
fi
if [ "$PRESERVE_KERNEL" = "0" ]; then
for mod in nvidia{,-drm,-modeset,-peermem,-uvm}; do
rm -vf /usr/lib/modules/$(uname -r)/kernel/drivers/video/$mod.ko
done
fi
depmod -a &amp;&amp;
echo "Uninstallation complete!"
echo "Whitelist Nouveau to have a working framebuffer!"</literal>
EOF
install -vm755 nvidia-uninstall /usr/sbin</userinput></screen>
<para>
Now run it in a TTY or chroot whenever you need to as the &root; user:
</para>
<screen role="nodump"><computeroutput>/sbin/nvidia-uninstall</computeroutput></screen>
</sect2>
<sect2 role="configuration">
<title>Configuring NVIDIA</title>
<sect3 id="nvidia-config">
<title>Config Files</title>
<para>
<filename>/usr/lib/modprobe.d/nvfb.conf</filename>
</para>
<para>
<filename>/usr/lib/modprobe.d/nvidia_drm.conf</filename>
</para>
<para>
<filename>/usr/lib/modprobe.d/nvidia.conf</filename>
</para>
</sect3>
<sect3>
<title>List of Packages With Issues</title>
<para>
Using this driver can come with compromises. So far, these issues seem
limited to Wayland, desktop environments, and display managers. The
list below documents the known packages that have issues with this
driver.
</para>
<itemizedlist>
<listitem revision="sysv">
<para><ulink url="&blfs-svn;/x/gdm.html">GDM</ulink>: Using this
package on SysVinit systems will result in failure as GDM does not
want to use Wayland for NVIDIA GPUs, but a permission issue with SysV
prevents X11 from being used. You must launch
<ulink url="&blfs-svn;/gnome/mutter.html">Mutter</ulink> or
<ulink url="&blfs-svn;/gnome/gnome-session.html">gnome-session</ulink>
through the terminal instead. Read the Mutter entry.</para>
</listitem>
<listitem revision="sysv"><para>
<ulink url="&blfs-svn;/gnome/gnome-session.html">gnome-session</ulink>:
Only the Wayland version can be used right now and cannot be
launched via GDM.
</para></listitem>
<listitem>
<para><ulink url="&blfs-svn;/gnome/mutter.html">Mutter</ulink>:
Compile this package with
<parameter>-D wayland_eglstream=true</parameter> and
<parameter>-D egl_device=true</parameter> to enable launching with
Wayland. Ensure the <xref linkend="nvidia-egl"/> are
installed.</para>
<para revision="sysv">On SysVinit systems, Mutter can only be
launched via a TTY or a display manager other than GDM if using X11
as of now.</para>
</listitem>
</itemizedlist>
</sect3>
<sect3><title>Configuration Information</title>
<para>
Nouveau and NVIDIAFB support was compiled into the kernel to make the
NVIDIA kernel modules build successfully. However, Nouveau and NVIDIAFB
conflict with the NVIDIA kernel modules, so they should be blacklisted.
</para>
<para>
As the &root; user, create the file
<filename>/usr/lib/modprobe.d/nvfb.conf</filename> to blacklist Nouveau
and NVIDIAFB:
</para>
<screen role="root"><userinput>mkdir -pv /usr/lib/modprobe.d &amp;&amp;
cat &gt; /usr/lib/modprobe.d/nvfb.conf &lt;&lt; "EOF"
<literal># Begin /usr/lib/modprobe.d/nvfb.conf
blacklist nouveau
blacklist nvidiafb
# End /usr/lib/modprobe.d/nvfb.conf</literal>
EOF</userinput></screen>
<para>
The DRM kernel module does not use modesetting by default which is
needed by Wayland compositors. Make it use modesetting as the &root;
user:
</para>
<screen role="root"><userinput>cat &gt; /usr/lib/modprobe.d/nvidia_drm.conf &lt;&lt; "EOF"
<literal># Begin /usr/lib/modprobe.d/nvidia_drm.conf
options nvidia_drm modeset=1
# End /usr/lib/modprobe.d/nvidia_drm.conf</literal>
EOF</userinput></screen>
<para>
When the GPU sleeps/hibernates, it will lose all memory allocations by
default. You can prevent this by setting two options for the NVIDIA
module as the &root; user:
</para>
<screen role="root"><userinput>cat &gt; /usr/lib/modprobe.d/nvidia.conf &lt;&lt; "EOF"
<literal># Begin /usr/lib/modprobe.d/nvidia.conf
options nvidia NVreg_PreserveVideoMemoryAllocations=1
options nvidia NVreg_TemporaryFilePath=/var/tmp
# End /usr/lib/modprobe.d/nvidia.conf</literal>
EOF</userinput></screen>
<para>
Furthermore, this driver does not install DRI
<footnote><para>
Direct Rendering Infrastructure.
</para></footnote>
drivers or driver stubs. Likewise, it does not install a
<application>pkg-config</application> file saying where to find the
associated files. The files aren't needed with this driver. However,
some applications expect the <application>pkg-config</application> file
to exist, namely <xref linkend="xorg-server"/>. Create one now as the
&root; user:
</para>
<screen role="root"><userinput>cat &gt; /usr/lib/pkgconfig/dri.pc &lt;&lt; "EOF"
<literal>prefix=/usr
includedir=${prefix}/include
dridriverdir=/usr/lib/dri
Name: dri
Description: Direct Rendering Infrastructure
Version: &nvidia-version;
Requires.private: libdrm >= 2.4.109
Cflags: -I${includedir}</literal>
EOF</userinput></screen>
<para>
Applications that do require this file typically will not link against
any library in <filename class="libraryfile">/usr/lib/dri</filename>.
If you are worried that an application will try to link against
non-existent libraries, you can compile <xref linkend="mesa"/> to get
these libraries and a real <application>pkg-config</application> file.
Note that those libraries will not be used when this driver is in use.
</para>
<note><para>
Now you should skip to <xref linkend="xcb-utils"/>.
</para></note>
</sect3>
</sect2>
<sect2 role="content">
<title>Contents</title>
<segmentedlist>
<segtitle>Installed Programs</segtitle>
<segtitle>Installed Firmware</segtitle>
<segtitle>Installed Libraries</segtitle>
<segtitle>Installed Directories</segtitle>
<seglistitem>
<seg>
nvidia-install-soft,
nvidia-modprobe,
nvidia-settings,
nvidia-smi,
nvidia-uninstall, and
nvidia-xconfig
</seg>
<seg>
gsp_ga10x.bin and
gsp_tu10x.bin
</seg>
<seg>
libcudadebugger,
libcuda,
libEGL_nvidia,
libGLESv2_nvidia,
libGLX_nvidia,
libglxserver_nvidia,
libnvcuvid,
libnvoptix,
libnvidia-allocator,
libnvidia-api,
libnvidia-cfg,
libnvidia-eglcore,
libnvidia-encode,
libnvidia-fbc,
libnvidia-glcore,
libnvidia-glsi,
libnvidia-glvkspirv,
libnvidia-gpucomp,
libnvidia-gtk2,
libnvidia-gtk3,
libnvidia-ml,
libnvidia-ngx,
libnvidia-nvvm{70,},
libnvidia-opencl,
libnvidia-opticalflow,
libnvidia-pkcs11-openssl3,
libnvidia-pkcs11,
libnvidia-ptxjitcompiler,
libnvidia-rtcore,
libnvidia-tls,
libnvidia-wayland-client,
libOpenCL.so,
libvdpau_nvidia,
nvidia-drm_gbm,
nvidia_drv, and
for <xref linkend="wine"/> (_nvngx,
nvngx, and
nvngx_dlssg; all three are DLLs)
</seg>
<seg>
/usr/lib/firmware/nvidia/&nvidia-version;,
/usr/lib/nvidia/wine,
/usr/share/glvnd/egl_vendor.d, and
/usr/share/nvidia
</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="nvidia-install-soft">
<term><command>nvidia-install-soft</command></term>
<listitem>
<para>
is a custom-made install script that installs all the software from
this driver that you need
</para>
<indexterm zone="nvidia nvidia-install-soft">
<primary sortas="b-nvidia-install-soft">nvidia-install-soft</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia-modprobe">
<term><command>nvidia-modprobe</command></term>
<listitem>
<para>
is a suid program which populates <filename
class="directory">/dev</filename> with directories and files for
this driver and is loaded when starting a display server
</para>
<indexterm zone="nvidia nvidia-modprobe">
<primary sortas="b-nvidia-modprobe">nvidia-modprobe</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia-settings">
<term><command>nvidia-settings</command></term>
<listitem>
<para>
a GUI application relying on <ulink url="&blfs-svn;/x/gtk3.html">GTK-3
</ulink> that allows tweaking settings like resolution and refresh rate
</para>
<indexterm zone="nvidia nvidia-settings">
<primary sortas="b-nvidia-settings">nvidia-settings</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia-smi">
<term><command>nvidia-smi</command></term>
<listitem>
<para>
provides NVIDIA GPU monitoring information
</para>
<indexterm zone="nvidia nvidia-smi">
<primary sortas="b-nvidia-smi">nvidia-smi</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia-uninstall">
<term><command>nvidia-uninstall</command></term>
<listitem>
<para>
is a custom-made install script that uninstalls the driver
</para>
<indexterm zone="nvidia nvidia-uninstall">
<primary sortas="b-nvidia-uninstall">nvidia-uninstall</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia-xconfig">
<term><command>nvidia-xconfig</command></term>
<listitem>
<para>
manipulates <application>X11</application> configuration files
to allow the <application>NVIDIA</application> driver to be used
when starting <application>X11</application>
</para>
<indexterm zone="nvidia nvidia-xconfig">
<primary sortas="b-nvidia-xconfig">nvidia-xconfig</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libcudadebugger">
<term><filename class="libraryfile">libcudadebugger</filename></term>
<listitem>
<para>
allows debugging <application>CUDA</application> applications
</para>
<indexterm zone="nvidia libcudadebugger">
<primary sortas="c-libcudadebugger">libcudadebugger</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libcuda">
<term><filename class="libraryfile">libcuda</filename></term>
<listitem>
<para>
provides support for applications that use
<application>CUDA</application>
</para>
<indexterm zone="nvidia libcuda">
<primary sortas="c-libcuda">libcuda</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libEGL_nvidia">
<term><filename class="libraryfile">libEGL_nvidia</filename></term>
<listitem>
<para>
provides the <application>NVIDIA</application> implementation
of EGL
</para>
<indexterm zone="nvidia libEGL_nvidia">
<primary sortas="c-libEGL_nvidia">libEGL_nvidia</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libGLESv2_nvidia">
<term><filename class="libraryfile">libGLESv2_nvidia</filename></term>
<listitem>
<para>
provides the <application>NVIDIA</application> implementation
of OpenGL ES v2
</para>
<indexterm zone="nvidia libGLESv2_nvidia">
<primary sortas="c-libGLESv2_nvidia">libGLESv2_nvidia</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libGLX_nvidia">
<term><filename class="libraryfile">libGLX_nvidia</filename></term>
<listitem>
<para>
provides the <application>NVIDIA</application> implementation
of GLX
</para>
<indexterm zone="nvidia libGLX_nvidia">
<primary sortas="c-libGLX_nvidia">libGLX_nvidia</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libglxserver_nvidia">
<term><filename class="libraryfile">libglxserver_nvidia</filename></term>
<listitem>
<para>
is the <application>NVIDIA</application> X11 GLX extension module
</para>
<indexterm zone="nvidia libglxserver_nvidia">
<primary sortas="c-libglxserver_nvidia">libglxserver_nvidia</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvcuvid">
<term><filename class="libraryfile">libnvcuvid</filename></term>
<listitem>
<para>
provides an interface to hardware accelerated decoding
</para>
<indexterm zone="nvidia libnvcuvid">
<primary sortas="c-libnvcuvid">libnvcuvid</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvoptix">
<term><filename class="libraryfile">libnvoptix</filename></term>
<listitem>
<para>
provides the OptiX Ray Tracing API
</para>
<indexterm zone="nvidia libnvoptix">
<primary sortas="c-libnvoptix">libnvoptix</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-allocator">
<term><filename class="libraryfile">libnvidia-allocator</filename></term>
<listitem>
<para>
handles NVIDIA GPU memory management
</para>
<indexterm zone="nvidia libnvidia-allocator">
<primary sortas="c-libnvidia-allocator">libnvidia-allocator</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-api">
<term><filename class="libraryfile">libnvidia-api</filename></term>
<listitem>
<para>
provides the NVAPI interface
</para>
<indexterm zone="nvidia libnvidia-api">
<primary sortas="c-libnvidia-api">libnvidia-api</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-cfg">
<term><filename class="libraryfile">libnvidia-cfg</filename></term>
<listitem>
<para>
queries a NVIDIA GPU's configuration settings
</para>
<indexterm zone="nvidia libnvidia-cfg">
<primary sortas="c-libnvidia-cfg">libnvidia-cfg</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-eglcore">
<term><filename class="libraryfile">libnvidia-eglcore</filename></term>
<listitem>
<para>
provides primary EGL functionality to other components of the
driver
</para>
<indexterm zone="nvidia libnvidia-eglcore">
<primary sortas="c-libnvidia-eglcore">libnvidia-eglcore</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-encode">
<term><filename class="libraryfile">libnvidia-encode</filename></term>
<listitem>
<para>
provides an interface to video encoder hardware
</para>
<indexterm zone="nvidia libnvidia-encode">
<primary sortas="c-libnvidia-encode">libnvidia-encode</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-fbc">
<term><filename class="libraryfile">libnvidia-fbc</filename></term>
<listitem>
<para>
provides an interface to capture and optionally encode the
framebuffer of an <application>X11</application> server screen
</para>
<indexterm zone="nvidia libnvidia-fbc">
<primary sortas="c-libnvidia-fbc">libnvidia-fbc</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-glcore">
<term><filename class="libraryfile">libnvidia-glcore</filename></term>
<listitem>
<para>
provides the primary OpenGL functionality for other components of
this driver
</para>
<indexterm zone="nvidia libnvidia-glcore">
<primary sortas="c-libnvidia-glcore">libnvidia-glcore</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-glsi">
<term><filename class="libraryfile">libnvidia-glsi</filename></term>
<listitem>
<para>
provides the OpenGL Shader Interface for other components of this
driver
</para>
<indexterm zone="nvidia libnvidia-glsi">
<primary sortas="c-libnvidia-glsi">libnvidia-glsi</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-glvkspirv">
<term><filename class="libraryfile">libnvidia-glvkspirv</filename></term>
<listitem>
<para>
allows using SPIR-V shaders in OpenGL
</para>
<indexterm zone="nvidia libnvidia-glvkspirv">
<primary sortas="c-libnvidia-glvkspirv">libnvidia-glvkspirv</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-gpucomp">
<term><filename class="libraryfile">libnvidia-gpucomp</filename></term>
<listitem>
<para>
provides primary functionality for allowing computations being done
on the GPU for use with other components in this driver
</para>
<indexterm zone="nvidia libnvidia-gpucomp">
<primary sortas="c-libnvidia-gpucomp">libnvidia-gpucomp</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-gtk2">
<term><filename class="libraryfile">libnvidia-gtk2</filename></term>
<listitem>
<para>
for <command>nvidia-settings</command>; utilizes
<application>GTK-2</application>
</para>
<indexterm zone="nvidia libnvidia-gtk2">
<primary sortas="c-libnvidia-gtk2">libnvidia-gtk2</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-gtk3">
<term><filename class="libraryfile">libnvidia-gtk3</filename></term>
<listitem>
<para>
for <command>nvidia-settings</command>; utilizes
<application>GTK-3</application>
</para>
<indexterm zone="nvidia libnvidia-gtk3">
<primary sortas="c-liblnvidia-gtk3">libnvidia-gtk3</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-ml">
<term><filename class="libraryfile">libnvidia-ml</filename></term>
<listitem>
<para>
provides a monitoring and management API
</para>
<indexterm zone="nvidia libnvidia-ml">
<primary sortas="c-libnvidia-ml">libnvidia-ml</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-ngx">
<term><filename class="libraryfile">libnvidia-ngx</filename></term>
<listitem>
<para>
provides functions for DLSS support
</para>
<indexterm zone="nvidia libnvidia-ngx">
<primary sortas="c-libnvidia-ngx">libnvidia-ngx</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-nvvm">
<term><filename class="libraryfile">libnvidia-nvvm</filename></term>
<listitem>
<para>
provides JIT LTO for CUDA
</para>
<indexterm zone="nvidia libnvidia-nvvm">
<primary sortas="c-libnvidia-nvvm">libnvidia-nvvm</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-opencl">
<term><filename class="libraryfile">libnvidia-opencl</filename></term>
<listitem>
<para>
provides <application>NVIDIA</application>'s implementation of
the OpenCL API standard
</para>
<indexterm zone="nvidia libnvidia-opencl">
<primary sortas="c-libnvidia-opencl">libnvidia-opencl</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-opticalflow">
<term><filename class="libraryfile">libnvidia-opticalflow</filename></term>
<listitem>
<para>
provides Optical Flow support which improves frames, similar to
DLSS, with the help of CUDA
</para>
<indexterm zone="nvidia libnvidia-opticalflow">
<primary sortas="c-libnvidia-opticalflow">libnvidia-opticalflow</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-pkcs11">
<term><filename class="libraryfile">libnvidia-pkcs11</filename></term>
<listitem>
<para>
provides cryptography functions when the driver is operating in
Confidential Compute mode
</para>
<indexterm zone="nvidia libnvidia-pkcs11">
<primary sortas="c-libnvidia-pkcs11">libnvidia-pkcs11</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-ptxjitcompiler">
<term><filename class="libraryfile">libnvidia-ptxjitcompiler</filename></term>
<listitem>
<para>
is a JIT compiler which compiles PTX into GPU machine code;
used by CUDA
</para>
<indexterm zone="nvidia libnvidia-ptxjitcompiler">
<primary sortas="c-libnvidia-ptxjitcompiler">libnvidia-ptxjitcompiler</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-rtcore">
<term><filename class="libraryfile">libnvidia-rtcore</filename></term>
<listitem>
<para>
implements the RT (Ray Tracing) core functionality and is used by
other components in this driver
</para>
<indexterm zone="nvidia libnvidia-rtcore">
<primary sortas="c-libnvidia-rtcore">libnvidia-rtcore</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-tls">
<term><filename class="libraryfile">libnvidia-tls</filename></term>
<listitem>
<para>
provides TLS support for the <application>NVIDIA
</application> OpenGL implementations
</para>
<indexterm zone="nvidia libnvidia-tls">
<primary sortas="c-libnvidia-tls">libnvidia-tls</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libnvidia-wayland-client">
<term><filename class="libraryfile">libnvidia-wayland-client</filename></term>
<listitem>
<para>
is required for <command>nvidia-settings</command> on
<application>Wayland</application>
</para>
<indexterm zone="nvidia libnvidia-wayland-client">
<primary sortas="c-libnvidia-wayland-client">libnvidia-wayland-client</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libvdpau_nvidia">
<term><filename class="libraryfile">libvdpau_nvidia</filename></term>
<listitem>
<para>
provides the <application>NVIDIA</application> implementation for
the VDPAU API
</para>
<indexterm zone="nvidia libvdpau_nvidia">
<primary sortas="c-libvdpau_nvidia">libvdpau_nvidia</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="_nvngx">
<term><filename class="libraryfile">_nvngx</filename></term>
<listitem>
<para>
provides DLSS support for use with Proton
</para>
<indexterm zone="nvidia _nvngx">
<primary sortas="c-_nvngx">_nvngx</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvngx">
<term><filename class="libraryfile">nvngx</filename></term>
<listitem>
<para>
provides DLSS support for use with <application>Wine</application>
</para>
<indexterm zone="nvidia nvngx">
<primary sortas="c-nvngx">nvngx</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvngx_dlssg">
<term><filename class="libraryfile">nvngx_dlssg</filename></term>
<listitem>
<para>
is the DLSS 3 Frame Generation library
</para>
<indexterm zone="nvidia nvngx_dlssg">
<primary sortas="c-nvngx_dlssg">nvngx_dlssg</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia-drm_gbm">
<term><filename class="libraryfile">nvidia-drm_gbm</filename></term>
<listitem>
<para>
is the <application>NVIDIA</application> GBM driver
</para>
<indexterm zone="nvidia nvidia-drm_gbm">
<primary sortas="c-nvidia-drm_gbm">nvidia-drm_gbm</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="nvidia_drv">
<term><filename class="libraryfile">nvidia_drv</filename></term>
<listitem>
<para>
is the <application>NVIDIA</application> <application>X11
</application> driver
</para>
<indexterm zone="nvidia nvidia_drv">
<primary sortas="c-nvidia_drv">nvidia_drv</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>