SDB:NVIDIA 驱动

跳转至: 导航, 搜索
由于许可证的原因,NVIDIA 驱动程序不能直接被整合到 openSUSE 中。但幸运的是,对于新用户来说,NVIDIA 和 openSUSE 提供了非常简便的方法来安装 NVIDIA 驱动程序:NVIDIA 为 openSUSE 专门制作了 RPM 并将他们放入了软件源里,这样它们就可以通过 YaST 来直接安装。
如果你遇到网络问题,你可以阅读 SDB:配置代理 获取帮助。
注意: 如果你想要更新你的显卡硬件设备,记得在更换升级硬件之前卸载你的驱动,将驱动替换为 nouveau。

情景

本文适合想要使用 zypper 从 NVIDIA 官方源安装驱动的用户。

从 NVIDIA 软件源安装

以下命令基本都需要 root 权限才能正常运行。

更新系统

在安装驱动之前,请先将你的系统更新至最新的版本。

# zypper dup #对于 tumbleweed 用户
# zypper up  #对于 Leap 用户

添加软件源

首先,你需要添加 NVIDIA 的软件源:

对于 Leap 用户:

# zypper addrepo --refresh 'https://download.nvidia.com/opensuse/leap/$releasever' NVIDIA

对于 Tumbleweed 用户:

# zypper addrepo --refresh https://download.nvidia.com/opensuse/tumbleweed NVIDIA

获取架构信息

打开终端,以 root 权限运行下列命令,来确定您的显卡型号:

# lspci | grep VGA
# lscpu | grep Arch

# hwinfo --gfxcard | grep Model
# hwinfo --arch

确定安装的驱动类型

在安装前,你需要先确定你应当安装哪一个驱动型号。

bh@c004-h0:~> zypper se x11-video-*
正在加载软件源数据...
正在读取已安装的软件包...

S | Name                | Summary                                                 | Type
--+---------------------+---------------------------------------------------------+-------
  | x11-video-nvidiaG04 | NVIDIA graphics driver for GeForce 400 series and newer | 软件包
  | x11-video-nvidiaG05 | NVIDIA graphics driver for GeForce 600 series and newer | 软件包
  | x11-video-nvidiaG06 | NVIDIA graphics driver for GeForce 700 series and newer | 软件包

对于 openSUSE 用户,可安装的驱动有三个(都是针对 geforce 显卡)。然后你需要打开 NVIDIA Official Drivers,在 Product Type 中,将类型选择为 GeForce,然后点击 Product Series 选择框,即可看到所有的 GeForce 显卡系列。其中就包含 GeForce 400 等显卡,你可以根据你的显卡的型号确定你应该安装的显卡驱动:

Nvidia-driver-list.png

例如,前几年发布的 NVIDIA MX150 独显属于 GeForce MX100 series,它要比 GeForce 700 series 新,所以可以选择安装 x11-video-nvidiaG06:

# zypper install x11-video-nvidiaG06

nvidiaG05 和 nvidiaG06 的描述与 “NVIDIA graphics driver for GeForce 600 series and newer” 相同。但是如果你以后要安装 CUDA,那么你必须使用 nvidiaG05 版本来兼容。(截至 2022 年 1 月 18 日)

要利用 OpenGL 加速,你必须安装一个附加包,选择与驱动程序对应的包:

bh@c004-h0:~> zypper se nvidia-glG0*
正在加载软件源数据...
正在读取已安装的软件包...

S | Name         | Summary                                         | Type
--+--------------+-------------------------------------------------+-------
  | nvidia-glG04 | NVIDIA OpenGL libraries for OpenGL acceleration | 软件包
  | nvidia-glG05 | NVIDIA OpenGL libraries for OpenGL acceleration | 软件包
  | nvidia-glG06 | NVIDIA OpenGL libraries for OpenGL acceleration | 软件包

使用 proxychains-ng 安装驱动

如果你在配置了系统代理设置后,依旧无法正常下载 NVIDIA 驱动(速度停留在16 KiB/s ~ 32 KiB/s),你可以参考本小节使用代理软件下载驱动程序。

1. 安装 proxychains-ng

sudo zypper in proxychains-ng

2. 编辑配置

sudo nano /etc/proxychains.conf

然后在文件的末尾输入代理服务器地址(具体取决于你代理服务的配置,简单而言就是 代理类型 + 代理地址 + 代理端口),例如:

http 127.0.0.1 20171
socks5 127.0.0.1 20170

Left CTRL + O 保存更改,按 Left CTRL + X 退出文件。

3. 让 zypper 使用 proxychains 的代理

在原有的 sudo 命令后,插入 proxychains4 ,例如:

sudo proxychains4 zypper ref
sudo proxychains4 zypper in x11-video-nvidiaG05

安全启动

如果你在 BIOS 中关闭了安全启动,驱动安装完成后,重启系统会自动激活 N 卡驱动。你可以使用 suse-prime 进行切换显卡。

Leap 15.2 或更高版本的内核,默认情况下,会拒绝在启用安全启动的机器上加载任何未签名的内核模块。

在启用了安全启动的系统上安装 NVIDIA 驱动的过程中,会创建一个 MOK 密钥对,并使用创建的私钥对内核模块进行签名。所创建的证书(公钥)仍然保存在 /var/lib/nvidia-pubkeys 下面的存储器中,但它也需要被导入到待注册的 MOK pubkeys 列表中。

第一次重启后,这个证书可以很容易地注册到 MOK 数据库中。为此 EFI 工具(mokutil)会自动启动:在工具里面选择 "Enroll MOK",然后选择 "Continue",再选择 "Yes"。当提示输入密码时,使用你的 root 密码(需要美国键盘布局!)。现在证书已经被添加到 MOK 数据库中,并被认为是可信的,这将允许加载匹配签名的内核模块。要完成该过程,选择 "reboot"。

Nvidia-secureboot-enrollKey.jpg

如果你在第一次重启后错过了证书注册的超时时间,你可以通过运行以下命令轻松地重新导入证书。

# 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-secureboot-deleteKey.jpg

手动安装

参见SDB:NVIDIA_不易之路:编译安装 NVIDIA 面向 Linux 平台发布的显卡驱动

卸载 Nvidia 驱动

YaST

  1. 打开 YaST ,点击 软件,进入 软件管理。
  2. 点击左上方的 视图 ,选择 软件源
  3. 选择 NVIDIA 的软件源
  4. 把所有已安装的软件包标记为 删除,然后点击 接受 。可能会提示你有冲突,请忽略任何冲突,选择解除依赖关系。
  5. 打开 YaST ,然后点击 软件源 。
  6. 选择 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_故障排除
  • 如果你的电脑在安装完专用驱动程序后在登录屏幕前冻结,并且你使用的是 GDM(如果你使用的是 GNOME,通常会出现这种情况),请尝试在 /etc/gdm/custom.conf 中加入 WaylandEnable=false
  • 你可以通过在终端运行 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

参考链接