Ubuntu22.04 安装NVIDIA驱动(吐血版)
一、前言
前段时间装了一个主机,准备用来跑图,显卡是英伟达 4060Ti 16G,以下是安装显卡驱动的一些经验(由于我是第一次安装,所以一些卸载旧驱动的操作我是不用的)
二、显卡驱动安装
第一步是查看你的显卡型号,在Ubuntu中可以通过 lspci 命令查看系统中所有 PCI 设备信息,比如显卡这些
$ lspci | grep -i nvidia
:00.0 VGA compatible controller: NVIDIA Corporation Device 2805 (rev a1)
:00.1 Audio device: NVIDIA Corporation Device 22bd (rev a1)
像我的话其实看不到具体的型号,只看到 NVIDIA Corporation Device 2805,如果你也跟我一样,可以通过这个网站[1],然后输入 2805 进行查询(注意是VGA compatible 这一行的型号 )
在Ubuntu上,还可以通过 ubuntu-drivers 查看哪些设备还需要装驱动以及推荐的驱动型号,不过这个命令是Ubuntu独有的
$ ubuntu-drivers devices
== /sys/devices/pcixxxx
modalias : pci:xxx
vendor : NVIDIA Corporation
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-525 - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-535 - distro non-free recommended
driver : nvidia-driver-525-open - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
第二步是下载一些必要的依赖
$ sudo apt-get install g++
$ sudo apt-get install gcc
$ sudo apt-get install make
第三步是禁用 nouveau 驱动。Ubuntu 默认安装了第三方开源的驱动程序 nouveau ,安装nvidia显卡驱动首先需要禁用nouveau,不然会碰到冲突的问题,导致无法安装nvidia显卡驱动。
# 可以通过此命令查看是否开启
$ lsmod | grep nouveau
nouveau 2830336 0
drm_ttm_helper 16384 1 nouveau
# 禁用 nouveau 驱动步骤
## 1、打开文件
sudo vim /etc/modprobe.d/blacklist.conf
## 2、在文件末尾写入:
blacklist nouveau
options nouveau modeset=0
## 3、保存后手动更新
sudo update-initramfs -u
## 4、电脑重启,输入下列指令进行确认,若无输出,则禁用成功
lsmod | grep nouveau
注意,执行 sudo update-initramfs -u 后一定要手动重启电脑,这是为了确保驱动禁用生效!!!!!
到了这里其实有一个分水岭,因为不止一种方式可以安装显卡驱动,我看了不下十个教程,总体而言可以分为两种,第一种就是使用Ubuntu自带的软件更新器,里面有一个附加组件,这种方式比较保险,一般不会出问题,但是下载较慢;第二种就是去英伟达官网下载驱动程序,然后手动安装,但这种看起来不太稳定,容易翻车,我在网上看过不少都出现过黑屏的问题。
2.1 使用软件更新器安装显卡驱动
使用这种方式也要禁用 nouveau 驱动,不然安装过程中也会因为冲突报错。这种方式可以在界面上操作,也可以在命令行操作。
2.1.1 在界面上进行操作:
可以看到这里面列举了多个驱动,那么选哪个呢?细心的你可能发现了,这里其实跟 ubuntu-drivers 列举的是一致的,所以我们勾选那个推荐的即可(需要注意,界面展示的顺序和ubuntu-drivers 列举的顺序不一致!!要根据名字辨别)
注:安装后重启即可!
2.2.2 在命令行进行操作:
命令行也有两种方式,第一种是用到我前面提到的 ubuntu-drivers 指令,这个指令有个 autoinstall 子命令可以帮我们自动安装,还有一种是用 apt-get 安装,需要指定驱动名。
# 第一种
sudo ubuntu-drivers autoinstall
需要先查出有哪些驱动可以安装:
$ ubuntu-drivers devices
== /sys/devices/pcixxxx
modalias : pci:xxx
vendor : NVIDIA Corporation
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-525 - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-535 - distro non-free recommended # 注意这个是推荐的
driver : nvidia-driver-525-open - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
可以看到有挺多驱动可以选的,具体选哪个,我建议是选带 recommended 的
# 第二种
sudo apt install nvidia-driver-535
本来我以为这种方式是不会踩坑的,没想到还是栽了一个跟头 🥲!!
事情的过程是这样,我在安装的过程中临时做了别的事情,然后好像有些东西没确认,它的进度也一直卡在76%,我就误以为它安装太慢,所以手贱中断掉安装了,注意是中断安装不是中断下载,因为我为了中断,把dpkg的锁也删掉了,接着当我想要重新安装,或者卸载Nvidia驱动的时候,dpkg一直报错
E: Sub-process /usr/bin/dpkg returned an error code (1)
后面看了一个教程,地址在这里[2],解决了上面dpkg的问题(非常感谢这个教程!)。
cd /var/lib/dpkg/
sudo mv info/ info_bak # 现将info文件夹更名
sudo mkdir info # 再新建一个新的info文件夹
sudo apt-get update # 更新
sudo apt-get -f install # 修复
sudo mv info/* info_bak/ # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
sudo rm -rf info # 把自己新建的info文件夹删掉
sudo mv info_bak info # 把以前的info文件夹重新改回名
解决了dpkg的问题,我就用 sudo apt remove –purge nvidia-driver-535 卸载驱动(感觉这个命令应该有点问题,没有卸载全,应该用 sudo apt-get –purge remove " nvidia "),没有啥报错,但当我想通过界面重新安装,发现报错了
这个报错没找到解决办法,我就索性用命令行的方式重新安装 nvidia-driver-535,不过还是不行,又遇到了上面dpkg的问题,所以又得按照上面的命令一顿操作
$ sudo apt install nvidia-driver-535
正在读取软件包列表... 完成
...
您希望继续执行吗?[Y/n] y
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable
正在设置 nvidia-dkms-535 (535.129.03-0ubuntu0.22.04.1) ...
update-initramfs: deferring update (trigger activated)
INFO:Enable nvidia
DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/put_your_quirks_here
DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/lenovo_thinkpad
DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/dell_latitude
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable
dpkg: 处理软件包 nvidia-dkms-535 (--configure)时出错:
已安装 nvidia-dkms-535 软件包 post-installation 脚本 子进程返回错误状态 1
dpkg: 依赖关系问题使得 nvidia-driver-535 的配置工作不能继续:
nvidia-driver-535 依赖于 nvidia-dkms-535 (<= 535.129.03-1);然而:
软件包 nvidia-dkms-535 尚未配置。
nvidia-driver-535 依赖于 nvidia-dkms-535 (>= 535.129.03);然而:
软件包 nvidia-dkms-535 尚未配置。
dpkg: 处理软件包 nvidia-driver-535 (--configure)时出错:
依赖关系问题 - 仍未被配置
因为错误消息指示这是由于上一个问题导致的错误,没有写入 apport 报告。
正在处理用于 initramfs-tools (0.140ubuntu13.4) 的触发器 ...
update-initramfs: Generating /boot/initrd.img-6.2.0-37-generic
在处理时有错误发生:
nvidia-dkms-535
nvidia-driver-535
E: Sub-process /usr/bin/dpkg returned an error code (1) # 又是这个问题
尝试用 nvidia-smi 命令查看,发现提示这个
$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
在网上看了一个教程,步骤如下,不过试了还是没用
$ sudo apt install dkms
# 查看驱动版本
$ ls /usr/src | grep nvidia
nvidia-535.129.03
# 更换为你自己的版本
$ sudo dkms install -m nvidia -v 535.129.03
我就再重启,看重启大法能否帮助我起死回生,但试了还是不行,我就又再次重新安装,不过这次有两个不同,一是我用其他命令卸载(我觉得这个命令才是对的),二是我添加了源,所以推荐驱动变成 nvidia-driver-545,重新安装的也是545,不是535。
# 卸载
sudo apt-get --purge remove "*nvidia*"
# 添加源
sudo add-apt-repository ppa:graphics-drivers/ppa
# 查看推荐驱动
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002805sv00001462sd00005172bc03sc00i00
vendor : NVIDIA Corporation
driver : nvidia-driver-545-open - third-party non-free
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-525-open - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-525 - distro non-free
driver : nvidia-driver-545 - third-party non-free recommended
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-535 - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
# 安装545
sudo apt install nvidia-driver-545
添加新的源后,发现一个新的问题,下载比535慢了很多!试了下可以换成其他源,舒服了!感谢各路英雄提供的教程[3]
$ sudo vim /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-jammy.list
# 旧的
deb https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu/ jammy main
# 换成这个
deb https://launchpad.proxy.ustclug.org/graphics-drivers/ppa/ubuntu/ jammy main
因为我开启了UEFI Secure Boot,下载的途中会提示这个,选择确定
接着会让你输入一个密码,注意这个在重启的时候会用到,要保管好!
上面的步骤搞定后,输入 nvidia-smi 其实还是不行的,需要重启电脑!
$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
重启电脑后会出现一个 Perform MOK management 的蓝色界面,这是因为安装完显卡驱动后,系统需要重启加载驱动,如果你直接选择 continue reboot, 可能导致新安装的 N 卡驱动没有加载,正确的做法如下:
1、选择 Enroll MOK
2、进入Enroll MOK 界面,选择 continue
3、进入Enroll the key 界面,选择 Yes,接下来输入你在前面安装驱动设置的密码!
4、之后会跳到蓝色背景的界面 Perform MOK management 选择第一个 Reboot
5、重启成功后,输入 nvidia-smi ,这次就终于成了!!
$ nvidia-smi
Sun Dec 10 13:46:18 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.06 Driver Version: 545.29.06 CUDA Version: 12.3 |
最后不管是命令行还是界面操作,记得把更新选项改成下面的,避免因为更新内核导致驱动版本不匹配!!
2.1 小节参考教程:
https://blog.csdn.net/qq_41076797/article/details/118658780
https://zhuanlan.zhihu.com/p/426766748
2.2 手动安装显卡驱动
因为怕翻车,所以我选择的是用 2.1软件安装器安装 的方式,但我对手动安装也颇感兴趣,同时也为了文章的完整性,所以我在某云服务商搞了一台虚拟主机(Ubuntu22.04)进行测试。
这里要注意下,前面的安装 gcc、make 驱动以及禁用 nouveau 驱动都是要做的!
第一步是到英伟达官网[4]下载驱动,地址点这里[5]。
进入官网后可以看到产品系列那里其实有两种,一种是台式机使用的驱动,另外一种是笔记本使用的驱动(带Notebooks),由于我是台式机,所以选择了不带Notebooks的
由于云服务商提供的是P4显卡,所以我最终选的是这个
点击搜索后会出现适合你的驱动版本,如果你不想要这个版本,可以点击这里[6]选择其他版本。
第二步就是执行刚刚下载的驱动程序了,这里网上有多个版本,有的会安装 lightdm,有的会关闭 gdm3,这两个都是桌面管理器,如果你想查看你用的哪个管理器,用这个命令
$ cat /etc/X11/default-display-manager
/usr/sbin/gdm3
我这边的话都没做,我试过关闭 gdm3,然后直接黑屏了(如下图),最后又重启了 gdm3
$ sudo service gdm3 stop
我这边的操作是:
# 1、赋予操作权限
sudo chmod a+x NVIDIA-Linux-x86_64-535.129.03.run
# 2、执行安装
# 这里加了三个参数,作用分别是:
# -no-x-check:安装驱动时关闭X服务
# -no-nouveau-check:安装驱动时不检查nouveau
# -no-opengl-files:只安装驱动文件,不安装OpenGL文件,避免循环登录
sudo ./NVIDIA-Linux-x86_64-535.129.03.run -no-x-check -no-nouveau-check -no-opengl-files
安装过程中,会有这些提示(可能会由于驱动版本不同导致提示不同,遇到没有的可以在参考教程找找):
这里选 Continue installation
正在安装:
这里选No,选Yes据说会降低分辨率啥的
安装成功
安装成功后挂载驱动
$ modprobe nvidia
使用 nvidia-smi 命令查看正常
$ nvidia-smi
Sun Dec 10 15:59:19 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |
重启后图形化界面依然正常,至此大功告成!!
2.2 小节参考教程
https://blog.csdn.net/baidu_41816106/article/details/121184844
https://blog.csdn.net/qq_30468723/article/details/107531062
https://blog.csdn.net/qq_38043069/article/details/128400761
https://zhuanlan.zhihu.com/p/486910510
https://zhuanlan.zhihu.com/p/308407850
三、总结
最后总结下,两种驱动安装的方法我都试了,手动安装方式没有预想的那么难(可能跟用云服务商的机器有关),然后用APT安装也没有预想的那么简单,毕竟也踩过一次坑,具体哪种方式更值得推荐还真的不好说,纯看运气,我这里也只是描述了我自己的情况,不一定对你就适用,毕竟每个人的系统版本、驱动都不一定一样,仅供参考哈!
参考资料
[1]这个网站: https://admin.pci-ids.ucw.cz/read/PC/10de/2805
[2]地址在这里: https://www.cnblogs.com/bymo/p/9046586.html
[3]教程: https://blog.csdn.net/guilutian0541/article/details/114305672
[4]英伟达官网: https://www.nvidia.cn/Download/index.aspx?lang=cn
[5]点这里: https://www.nvidia.cn/Download/index.aspx?lang=cn
[6]点击这里: https://www.nvidia.cn/Download/Find.aspx?lang=cn&QNF=1