SDB:NVIDIA the hard way
情况
希望安装 NVIDIA 的专有驱动程序,使用他们的安装程序 (.run)。
这被称为“困难的方法”,因为 通过 zypp 安装 更容易。
“困难的方法”安装可能是在您遇到异常情况时更好的选择。 例如,“困难的方法”会检查用于编译内核的 gcc 版本,如果存在不匹配,它将发出警告并解释如何指定 gcc 版本(如果使用锁定或长期内核,这将非常有用)。
流程
创建系统快照,以便在需要时回滚。
# snapper create
安装最低要求
以下模式包含 最低要求
# zypper in -t pattern devel_C_C++ devel_kernel # zypper in dkms
根据 官方安装指南第 4 章,需要 devel_kernel 中的 kernel-source 包 (548M);但是,您可能需要调查--add-this-kernel(在同一章节中)。
获取硬件信息
在终端中
# lspci | grep VGA $ lscpu | grep Arch
或者
# hwinfo --gfxcard | grep Model # hwinfo --arch
还有 YaST2 -> 硬件信息。
下载驱动安装程序
这些似乎都是官方来源
- http://www.nvidia.com/Download/Find.aspx
- http://www.nvidia.com/Download/index.aspx
- http://www.nvidia.com/object/unix.html
- https://www.geforce.com/drivers
直接链接可以在
内核、Mesa 和 Xorg 的更改可能会破坏驱动兼容性,即在升级之前下载最新的驱动程序。
在没有 nouveau 的情况下启动
重新启动并按E在 GRUB2 (GRUB 屏幕应该如下所示:UEFI,和 BIOS) 时,然后附加nomodeset和3到类似于这样的行
linux /boot/vmlinuz-5.14.21-150400.20-default ... splash=silent ... quiet ...
请注意,“...”表示会有其他参数。
因此,例如,前一行应该如下所示
linux /boot/vmlinuz-5.14.21-150400.20-default ... splash=silent ... quiet ... nomodeset 3
- nomodeset确保 Nouveau 驱动程序 不会被加载,因为 Nouveau 需要内核模式设置 (KMS)。
- 3确保系统启动到虚拟控制台 (3,带有文本的著名黑屏) 而不是启动到显示管理器 / Wayland 或 X 会话,换句话说:不加载图形环境。
这些选项不会在下次启动时保存。 有关使用 YaST2 或直接编辑 /etc/default/grub 作为 root 的更多信息。
或者,您可以尝试从 BIOS 以 IGFX (集成显卡) 模式启动。 对于台式机,这需要将显示器连接到主板视频输出端口。
阻止 nouveau
专有驱动程序安装程序将阻止 Nouveau;因此,通常可以跳过此部分,但检查一下也没有坏处。
安装程序会创建文件/etc/modprobe.d/nvidia.conf其中包含
blacklist nouveau
其他版本也可能会添加
options nouveau.modeset=0
要双重检查文件的存在及其内容,请使用
$ cat /etc/modprobe.d/nvidia.conf
安装驱动
首先,以 root 用户身份登录。
要查看所有选项的列表
# sh /home/<username>/Downloads/<NVIDIA*.run> -A
正常安装
# sh /home/<username>/Downloads/<NVIDIA*.run>
当安装程序指示 nouveau 可能已被阻止时,您可以继续而无需重新启动(如果您按照建议启动)。
允许安装程序配置/etc/X11/xorg.conf会创建一个副本 (/etc/X11/xorg.conf.nvidia-xconfig-original) 当前版本,它将在卸载时恢复。
安装完成后,您可能需要通过运行重新创建 initrd
# dracut -f
这将添加/etc/modprobe.d/nvidia.conf到 初始 ramdisk。 要进行验证,请运行
# lsinitrd | grep nvidia
重新启动计算机
# shutdown -r now
要检查驱动程序的状态
# hwinfo --gfxcard ... Driver Info #0: Driver Status: nouveau is not active Driver Activation Cmd: "modprobe nouveau" Driver Info #1: Driver Status: nvidia_drm is active Driver Activation Cmd: "modprobe nvidia_drm" Driver Info #2: Driver Status: nvidia is active Driver Activation Cmd: "modprobe nvidia"
# lsmod | grep nvidia nvidia_drm 49152 1 nvidia_modeset 1097728 4 nvidia_drm nvidia 14344192 223 nvidia_modeset ipmi_msghandler 53248 1 nvidia drm_kms_helper 155648 2 i915,nvidia_drm drm 397312 6 i915,drm_kms_helper,nvidia_drm
专家模式
或者,有一个带有更多问题的“专家”安装模式
# sh /home/<username>/Downloads/<NVIDIA*.run> -e
内核更新和驱动兼容性
请注意:每当您更新内核时,都必须重复这些步骤。 这是必要的,因为与 NVIDIA 存储库中的 NVIDIA 驱动程序不同,此驱动程序未复制到在内核更新中仍然有效的 KMP 目录。
使用安全启动安装 NVIDIA
如果您正在双引导或只是懒得禁用计算机上的安全启动,实际上可以使用启用安全启动的情况下安装 NVIDIA。 步骤与上述类似,但有一些修改。 我们将使用openssl创建密钥对和mokutil将这些密钥/签名注册到我们的 MOK 列表中。 确保在执行以下步骤之前创建快照
步骤 1。
openssl req -new -x509 -newkey rsa:2048 -keyout PATH_TO_PRIVATE_KEY -outform DER -out PATH_TO_PUBLIC_KEY -nodes -days 36500 -subj "/CN=Graphics Drivers"]
步骤 2。
sudo mokutil --import PATH_TO_PUBLIC_KEY
然后
sudo mokutil --enable-validation
步骤 3。
sudo sh ./NVIDIA-Linux-x86_64-<NVIDIA version>.run -s --module-signing-secret-key=<PATH TO YOUR PRIVATE KEY FILE e.g. Nvidia.key> --module-signing-public-key=<PATH TO YOUR PUBLIC KEY FILE e.g. Nvidia.der> --module-signing-script=/usr/src/linux-obj/x86_64/default/scripts/sign-file
步骤 4。
sudo dracut -f
然后重新启动。
对于版本 520.56.06 及更高版本
如果您有.run文件并仅使用--module-signing-script=/usr/src/linux-obj/x86_64/default/scripts/sign-file标志,NVIDIA 会自动为您生成密钥对并将公钥存储在/usr/share/nvidia/nvidia-modsign-crt-<一些乱码>.der因此,您可以跳过第一步并继续到第二步。
配置
安装程序提供了两个命令行实用程序
# man nvidia-settings # man nvidia-xconfig
nvidia-settings 运行不带任何参数将打开图形用户界面。
多显示器
多显示器可能无需配置即可工作。 如果没有,请参阅 官方文档 的第 12-14 章。
撕裂
一种解决持续撕裂的方法是
nvidia-settings -> x server display configuration -> advanced -> force composition pipeline
警告:将其保存到/etc/X11/xorg.conf通过 nvidia-settings GUI 可能会对加载桌面产生不利影响。
或者,可以使用一个简单的脚本从命令行启用它。 例如
创建/home/<用户名>/bin/fcp
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = $1 }"
xrefresh
使其可执行
chmod +x /home/<username>/bin/fcp
启用它
fcp 1
禁用它
fcp 0
可以通过 zypper 安装 xrefresh。 避免出现空白屏幕可能需要它。
Ctrl+Alt+F1然后Ctrl+Alt+F7也可以在这种情况下提供帮助。
GRUB2 和虚拟终端分辨率
与 nouveau 不同,虚拟终端的分辨率会很低。
一种解决方法是使用 GRUB2 设置,这也会增加 GRUB2 的分辨率。
yast2 > 启动加载程序 > 内核参数 > 控制台分辨率
或者,要手动实现相同效果
从 GRUB2 您可以按 C,然后使用 vbeinfo 检查受支持的分辨率
启动后,您可以编辑/etc/default/grub
更改
GRUB_GFXMODE="auto"
到
GRUB_GFXMODE=1920x1080x32 GRUB_GFXPAYLOAD_LINUX=keep
使用您使用 vbeinfo 找到的分辨率。 (有关 gfxmode 的更多信息)
然后运行
# grub2-mkconfig -o /boot/grub2/grub.cfg
启用 NVIDIA 模式设置
为了使 PRIME 正常工作,您需要将内核参数nvidia-drm.modeset设置为 1。
您可以通过将其添加到 modprobe 配置或GRUB_CMDLINE_LINUX_DEFAULT:
- nouveau.modeset=0
- modprobe.blacklist=nouveau
- rd.driver.blacklist=nouveau
- nvidia-drm.modeset=1
前三个确保完全禁用 nouveau。 您可以选择一个或复制全部三个。 第四个是启用 NVIDIA 模式设置所需的内核参数。 您可以通过运行来检查它是否正常工作
cat /sys/module/nvidia_drm/parameters/modeset
这应该输出“Y”。
Plymouth
Plymouth(GRUB2 和显示管理器之间的加载屏幕)可能不会显示。
要查看启动消息,请卸载 plymouth(或将 plymouth.enable=0 添加到 内核参数)并删除内核参数
splash=silent quiet
为了减少消息,设置日志级别
loglevel=5
卸载并使用模式设置或 nouveau DDX
使用“nomodeset”和“3”启动,就像安装时一样。
安装程序也用于卸载
# sh <NVIDIA*.run> --uninstall
/etc/modprobe.d/nvidia.conf将被删除。
/etc/X11/xorg.conf将被替换为/etc/X11/xorg.conf.nvidia-xconfig-original(预安装副本)。
您可能需要运行dracut -f卸载后 (更多)。
默认 DDXmodesetting自 2015 年以来,服务器包的版本为 1.17.0 起,一直提供。 当安装包xf86-video-nouveau时,应自动使用nouveauDDX。
Optimus 设置的 Xorg 配置
摘自 Arch Wiki,只需添加一个名为10-nvidia-drm-outputclass.conf到/etc/X11/xorg.conf.d/包含
Section "OutputClass" Identifier "intel" MatchDriver "i915" Driver "modesetting" EndSection Section "OutputClass" Identifier "nvidia" MatchDriver "nvidia-drm" Driver "nvidia" Option "AllowEmptyInitialConfiguration" Option "PrimaryGPU" "yes" ModulePath "/usr/lib/nvidia/xorg" ModulePath "/usr/lib/xorg/modules" EndSection
确保nvidia-drm.modeset设置为 1。
故障排除
有时,使用 NVIDIA 安装程序会删除内核模块和源,因此,运行
sudo zypper info kernel-default
安装后,结果显示“已安装”为“未安装”,如下所示
Information for package kernel-default: --------------------------------------- Repository : Main Repository (OSS) Name : kernel-default Version : 6.2.1-1.1 Arch : x86_64 Vendor : openSUSE Installed Size : 299.3 MiB Installed : No Status : up-to-date Source package : kernel-default-6.2.1-1.1.nosrc Upstream URL : https://linuxkernel.org.cn/ Summary : The Standard Kernel Description : The standard kernel for both uniprocessor and multiprocessor systems. Source Timestamp: 2023-02-27 11:39:51 +0000 GIT Revision: 69e0e95118afe307ac9da57c2cc7f80673a41423 GIT Branch: stable
要解决此问题,您需要重新安装kernel-default再次运行
sudo zypper install -f kernel-default
否则,您将没有内核可启动。