SDB:NVIDIA 驱动
目录
情景
本文适合想要使用 zypper 从 NVIDIA 官方源安装驱动的用户。
从 NVIDIA 软件源安装
更新系统
在安装驱动之前,请先将你的系统更新至最新的版本。
# 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 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
安全启动
Leap 15.2 或更高版本的内核,默认情况下,会拒绝在启用安全启动的机器上加载任何未签名的内核模块。
在启用了安全启动的系统上安装 NVIDIA 驱动的过程中,会创建一个 MOK 密钥对,并使用创建的私钥对内核模块进行签名。所创建的证书(公钥)仍然保存在 /var/lib/nvidia-pubkeys 下面的存储器中,但它也需要被导入到待注册的 MOK pubkeys 列表中。
第一次重启后,这个证书可以很容易地注册到 MOK 数据库中。为此 EFI 工具(mokutil)会自动启动:在工具里面选择 "Enroll MOK",然后选择 "Continue",再选择 "Yes"。当提示输入密码时,使用你的 root 密码(需要美国键盘布局!)。现在证书已经被添加到 MOK 数据库中,并被认为是可信的,这将允许加载匹配签名的内核模块。要完成该过程,选择 "reboot"。
如果你在第一次重启后错过了证书注册的超时时间,你可以通过运行以下命令轻松地重新导入证书。
# 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"时可以显示公钥的证书/说明,以免删错密钥。按任意键从那里继续。
手动安装
参见SDB:NVIDIA_不易之路:编译安装 NVIDIA 面向 Linux 平台发布的显卡驱动
卸载 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_故障排除
- 如果你的电脑在安装完专用驱动程序后在登录屏幕前冻结,并且你使用的是 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。
参考链接
- Nvdia 所有 Linux 驱动列表
- https://wiki.archlinux.org/title/NVIDIA
- https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks
- https://wiki.archlinux.org/title/NVIDIA/Troubleshooting
- https://build.opensuse.org/project/show/X11:Drivers:Video
- *Updated* NVIDIA gfx driver RPMs available for Tumbleweed
- https://forums.opensuse.org/showthread.php/541438-AMD-Intel-amp-NVidia-X-graphics-driver-primer
- SDB:NVIDIA drivers
- NVIDIA Problems with 1-click install
- Laptops and external VGA
- NVidia Suspend HOWTO
- NVidia framebuffer console HOWTO