SDB:NVIDIA 驱动
开源 GPU 内核模块与专有驱动程序
以下内容是关于安装 NVIDIA 专有驱动程序的。有关 NVIDIA 于 2022 年 5 月发布的 Open GPU 内核模块的更多信息,请阅读这篇 openSUSE 博客文章。
情景
本文适合想要使用 zypper 从 NVIDIA 官方源安装驱动的用户。
有关 NVIDIA 官方 linux.run 文件的信息,请参阅 SDB:NVIDIA 不易之路页面(安装 linux.run 是不受推荐的做法)。
配置代理网络
如果你身处中国,大概率会遇到 NVIDIA 软件源下载速度缓慢甚至间歇性中断的情况,请阅读 SDB:配置代理 以改善下载体验。
安装流程
使用 YaST 或 Zypper 安装需要 root 权限。
请注意,YaST 在 openSUSE Aeon 或 Kalpa 中不可用。你必须使用 transactional-update
和 zypper
安装驱动。
特殊要求
你需要启用内核的多版本功能(该功能默认启用)。你可以查看 /etc/zypp/zypp.conf
文件是否含有以下条目来确定该功能是否启用:
multiversion = provides:multiversion(kernel)
更新系统
在安装驱动之前,请先将你的系统更新至最新的版本。
sudo zypper dup #对于 tumbleweed 用户 sudo zypper up #对于 Leap 用户
添加软件源
由于许可证原因,NVIDIA 驱动程序无法包含在 openSUSE 中。方便的是,NVIDIA 有一个可以添加和下载的 openSUSE 软件源。
你可以依照下文选取任意一种方法添加 NVIDIA 软件源。
openSUSE-repos
我们最近在新的 RIS 管理下添加了 NVIDIA 存储库,该存储库已在 MicroOS 和 openSUSE Leap Micro 上默认使用。
当你第一次刷新 zypper 缓存时,zypper 会询问你是否导入来自 NVIDIA 的第三方 GPG 密钥。我们目前没有一个好的方法来“信任”第三方密钥并跳过这一步。因此,请使用 yes 确认密钥的导入。
对于 Leap 和 Tumbleweed 用户:
sudo zypper in openSUSE-repos-NVIDIA
对于 Aeon、Kalpa 和 Leap Micro 用户,请以 root 身份执行:
transactional-update -i pkg install openSUSE-repos-NVIDIA
zypper
对于 Leap 用户:
sudo zypper addrepo --refresh 'https://download.nvidia.com/opensuse/leap/$releasever' NVIDIA
对于 Tumbleweed 用户:
sudo zypper addrepo --refresh 'https://download.nvidia.com/opensuse/tumbleweed' NVIDIA
对于 Aeon 和 Kalpa 用户:
sudo zypper addrepo --refresh 'https://download.nvidia.com/opensuse/tumbleweed' NVIDIA
获取架构信息
打开终端,以 root 权限运行下列命令,来确定您的显卡型号:
# lspci | grep VGA # lscpu | grep Arch
或
# hwinfo --gfxcard | grep Model # hwinfo --arch
使用 inxi 实用程序:
# inxi -G # inxi -Ga
安装
确定合适的驱动程序的一种方法是将你的硬件信息输入 NVIDIA 的驱动程序搜索引擎。请注意: NVIDIA 的网站可能会宣称,与桌面显卡相比,相同芯片的移动显卡支持周期更短。对于 Linux 驱动程序来说情况并非如此(更多信息请参见此处)。openSUSE 为所有版本提供统一的 Linux 驱动程序:包括 GeForce 和 Quadro、台式机和移动设备。驱动程序在启动期间决定是否支持该 GPU。
注意:特定显卡映射到下面列出的命名约定。当你准备通过命令行安装驱动时,你将需要此信息。
- G03 = driver v340 = GT8xxx/9xxx 设备的旧版驱动程序(通过社区用户,见下文)
- G04 = driver v390 = GTX4xx/5xx Fermi 设备的旧版驱动程序
- G05 = driver v470 = GeForce 600 系列驱动程序
- G06 = GeForce 700 系列(Kepler)及更高版本(Maxwell、Pascal……)的驱动程序
或者,你可以使用 YaST 软件或以下命令来检查可用的软件包:
# zypper se x11-video-nvidiaG0* nvidia-video-G06* S | Name | Summary | Type --+---------------------+---------------------------------------------------------+-------- | nvidia-video-G06 | NVIDIA graphics driver for GeForce 700 series and newer | package | x11-video-nvidiaG04 | NVIDIA graphics driver for GeForce 400 series and newer | package | x11-video-nvidiaG05 | NVIDIA graphics driver for GeForce 600 series and newer | package
# zypper se -s x11-video-nvidiaG0* nvidia-video-G06* S | Name | Type | Version | Arch | Repository --+---------------------+---------+-----------------+--------+------------------------ | nvidia-video-G06 | package | 525.89.02-5.2 | x86_64 | nVidia Graphics Drivers | x11-video-nvidiaG04 | package | 390.157-19.1 | x86_64 | nVidia Graphics Drivers | x11-video-nvidiaG05 | package | 470.161.03-59.2 | x86_64 | nVidia Graphics Drivers
如上,请根据你的显卡设备选取合适的驱动,如果你不清楚你的显卡设备属于哪个系列,你可以打开 NVIDIA Official Drivers,在 Product Type 中,将类型选择为 GeForce,然后点击 Product Series 选择框,即可看到所有的 GeForce 显卡系列。
例如,前几年发布的 NVIDIA RTX2070 独显属于 GeForce RTX 20 series,它要比 GeForce 700 series 新,所以可以选择安装 nvidia-video-G06:
# zypper install nvidia-video-G06
如果你打算稍后安装 CUDA,则必须使用 nvidiaG05 版本以实现兼容性(截至 2022 年 1 月 18 日)。
要利用 OpenGL 加速,您必须安装额外的软件包,选择与驱动程序对应的软件包:
# zypper se nvidia-gl*G0* S | Name | Summary | Type --+---------------+-------------------------------------------------+-------- | nvidia-gl-G06 | NVIDIA OpenGL libraries for OpenGL acceleration | package | nvidia-glG04 | NVIDIA OpenGL libraries for OpenGL acceleration | package | nvidia-glG05 | NVIDIA OpenGL libraries for OpenGL acceleration | package
修补的 G03 驱动程序由社区用户提供: https://software.opensuse.org/search?baseproject=ALL&q=g03 。您可以在添加所需的存储库后安装它们。
使用 YaST Software 安装驱动
- 打开 YaST;
- 在 YaST 控制中心找到并打开 软件管理;
- 点击搜索,输入 nvidia;
- 根据上文选择适当的驱动程序,例如 x11-video-nvidiaG04 或 x11-video-nvidiaG05 或 nvidia-video-G06
- 可选择对应的 OpenGL 加速库,如 nvidia-glG04、nvidia-glG05 或 nvidia-gl-G06。
- 点击右下方的接受按钮;
- 等待安装完成;
- 重启系统。
命令行
这是目前在 openSUSE Aeon 和 Kalpa 中安装显卡驱动程序的唯一方法。
在获知你的硬件属于哪个驱动程序命令映射(例如 G04 或 G05 或 G06)时,你可以使用命令行安装它们。
对于 Leap 和 Tumbleweed 用户
# zypper in <x11-video-nvidiaG04 或 x11-video-nvidiaG05 或 nvidia-video-G06> # zypper in <nvidia-glG04 或 nvidia-glG05 或 nvidia-gl-G06>
然后重启电脑。
对于 openSUSE Aeon 和 Kalpa 用户
- 对于 nvidia-video-G06 :
# transactional-update -i pkg in nvidia-driver-G06-kmp-default nvidia-video-G06 nvidia-gl-G06 nvidia-compute-G06
- 对于 x11-video-nvidiaG05 :
# transactional-update -i pkg in nvidia-gfxG05-kmp-default x11-video-nvidiaG05 nvidia-glG05 nvidia-computeG05
- 对于 x11-video-nvidiaG04 :
# transactional-update -i pkg in nvidia-gfxG04-kmp-default x11-video-nvidiaG04 nvidia-glG04 nvidia-computeG04
然后重启电脑。
安全启动
Leap 15.2 或更高版本的内核,默认情况下,会拒绝在启用安全启动的机器上加载任何未签名的内核模块。
在启用了安全启动的系统上安装 NVIDIA 驱动的过程中,会创建一个 MOK 密钥对,并使用创建的私钥对内核模块进行签名。所创建的证书(公钥)仍然保存在 /var/lib/nvidia-pubkeys 下面的存储器中,但它也需要被导入到待注册的 MOK pubkeys 列表中。
第一次重启后,这个证书可以很容易地注册到 MOK 数据库中。为此 EFI 工具(mokutil)会自动启动:在工具里面选择 "Enroll MOK",然后选择 "Continue",再选择 "Yes"。当提示输入密码时,使用你的 root 密码(需要美国键盘布局!)。现在证书已经被添加到 MOK 数据库中,并被认为是可信的,这将允许加载匹配签名的内核模块。要完成该过程,选择 "reboot"。
如果你在第一次重启后错过了证书注册的超时时间,你可以通过运行以下命令轻松地重新导入证书。
对于 nvidia-driver-G0X (X >= 6):
# mokutil --import /var/lib/nvidia-pubkeys/MOK-nvidia-driver-G0<X>-<driver_version>-<kernel_flavor>.der --root-pw
对于 nvidia-gfxG0X (X < 6):
# mokutil --import /var/lib/nvidia-pubkeys/MOK-nvidia-gfxG0<X>-<driver_version>-<kernel_flavor>.der --root-pw
然后重新启动机器,并按照之前的方法注册证书。
最后,如果你在安全启动方面遇到问题,你可以自行承担风险,禁用内核模块的验证。
# mokutil --disable-validation
驱动升级
在驱动更新过程中,旧的不再使用的公钥将从 MOK 数据库中删除。所以在重启机器后,除了"Enroll MOK"菜单项外,EFI工具中还会出现一个"Delete MOK"项。为了最终将其从 MOK 数据库中删除,请选择 "Delete MOK",然后选择 "Continue",再选择 "Yes"。当提示输入密码时,再次使用你的 root 密码(需要美国键盘布局!)。选择 "View Key X"时可以显示公钥的证书/说明,以免删错密钥。按任意键从那里继续。
卸载 Nvidia 驱动
YaST
- 打开 YaST ,点击 软件,进入 软件管理。
- 点击左上方的 视图 ,选择 软件源
- 选择 NVIDIA 的软件源
- 把所有已安装的软件包标记为 删除,然后点击 接受 。可能会提示你有冲突,请忽略任何冲突,选择解除依赖关系。
- 打开 YaST ,然后点击 软件源 。
- 选择 NVIDIA 的软件源,取消点击左下方的 已启用 。不要删除它,因为它将在下次与服务器同步时返回启用。
卸载专有驱动程序将恢复之前的X配置文件 /etc/X11/xorg.conf(如果有的话)。如果在此期间硬件发生了变化,可能需要手动编辑这个文件。
Zypper
# zypper rm <x11-video-nvidiaG04 or x11-video-nvidiaG05>
如果这样还不能删除所有的软件包,你可以用以下方法找到其他的名字
# zypper se -ir NVIDIA
或
# zypper lr # zypper se -ir <the repo number>
另外,NVIDIA 驱动的安装程序可能将 nouveau 加入了黑名单;为了能够再次运行模式化 DDX 驱动或 nouveau DDX 驱动,请确保在 /etc/modprobe.d/ 中没有包含 blacklist nouveau 字样的文件,因为安装程序可能无法删除这些文件。
卸载软件包后,你可能需要运行:
# mkinitrd
故障排除
- SDB:NVIDIA_troubleshooting(推荐阅读)
- SDB:NVIDIA_故障排除
- 如果你的电脑在安装完专有驱动程序后在登录屏幕前冻结,并且你使用的是 GDM(如果你使用的是 GNOME,通常会出现这种情况),请尝试在
/etc/gdm/custom.conf
中加入WaylandEnable=false
。这将在登录期间禁用 GNOME Wayland 会话作为选项。如果你希望 Wayland 仍处于启用状态,请运行以下命令并重新启动。
# sudo ln -sfv /dev/null /etc/udev/rules.d/61-gdm.rules
- KDE、NVIDIA 专有驱动程序与 Wayland 三者可能无法同时工作。
- 你可以通过在终端运行
lsmod | grep nvidia
来验证驱动程序是否真的被加载。输出结果应该是这样的:
nvidia_drm 57344 2
nvidia_modeset 1187840 3 nvidia_drm
nvidia_uvm 1110016 0
nvidia 19771392 81 nvidia_uvm,nvidia_modeset
drm_kms_helper 229376 2 nvidia_drm,i915
drm 544768 13 drm_kms_helper,nvidia_drm,i915
中间一栏的数字不需要相同。如果驱动程序被加载了,问题就出在其他地方,因为这意味着它被成功安装了。
- 正如本指南之前所说,如果你使用安全启动,请确保你接受MOK,否则模块将无法加载。要知道安全启动是否会阻止模块,一个方法是查看
dmesg
的输出,搜索类似以下的警告:
Lockdown: modprobe: unsigned module loading is restricted; see man kernel_lockdown.7
modprobe: ERROR: could not insert 'nvidia': Required key not available
另见
Optimus (双显卡切换)
如果你的电脑支持 Nvdia Optimus (通常是笔记本电脑) 可以阅读SDB:NVIDIA_SUSE_Prime。
CUDA
如果你想需要安装 CUDA 请直接参考官方文档 CUDA Toolkit Documentation 和 CUDA 的下载地址 NVIDIA CUDA Download。