前言
本文是在经历了3天内5次重装Ubuntu系统后写下的,根本原因就是这篇文章的主题——安装NVIDIA显卡驱动!写下本文是为了让自己今后不再出同样类型的错误,同时,给其他出现同样问题的人一些启发!
本文实例的电脑配置如下:
型号:宏碁暗影骑士擎
CPU:i5-12500H
GPU:RTX 3050
RAM:16 G
系统:Ubuntu 20.04
问题描述
本人在安装apollo的过程中需要安装显卡驱动,起先是根据apollo官网给出的建议直接下载了470.63.01并进行安装,如下(注意下面的方法不正确哈):
问题出现
在安装完所有的后续步骤后重启ubuntu的过程中发现2种情况的黑屏:
- 在grub引导菜单选择ubuntu后进入黑屏后,左上角有“-”光标一直在闪烁,操作无反应且一直进不去系统。
- 如下图所示的报错
原因分析
其实这两种错误都是由于安装的NVIDIA显卡驱动与ubuntu自带的nouveau发生了冲突导致的,具体的解决方法建议首先参考一下链接:
NVIDIA显卡的Ubuntu驱动程序安装方法_哔哩哔哩_bilibili
本文将以上链接中的方法总结如下(针对双系统):
- 启动电脑,进入引导菜单,将光标移动到 Ubuntu项,按键盘上的 "E" 键;
- 进入GRUB页面后,选择首单词为 linux 对应的行,将光标移动到该行的末尾(一般这行的倒数第2、3个参数为:quiet splash),在这行末尾空一个后输入:nomodeset ,按下键盘的 “Ctrl + X” 或者 F10启动,就能进入熟悉的Ubuntu系统桌面了!
- 之后 我们要将系统自带的nouveau驱动加入系统黑名单中,输入:sudo gedit /etc/modprobe.d/blacklist.conf ,在文件的末尾添加以下字段:blacklist nouveau ,次操作即 将nouveau驱动加入系统黑名单了!
- 更新黑名单:sudo update-initramfs -u
- 安装nvidia的显卡驱动,即可正常启动,步骤见后文。
本人在参考该链接以及网上的各种教程试了多次并未解决问题,导致好几次以为重装ubuntu更省事,但并不省事!
网上的各种文章又是禁用nouveau驱动,又是切换命令行界面的(grub引导菜单定位到ubuntu后按"e"键后进入,典型参考博客为:)。结果我按照这种方法一通操作,重启后就卡在命令行界面出不去了(无法切换回图形界面),或者是在登录界面重复登录,进不了系统。就这样我一通操作了好几天都没解决。
解决思路
本文在第5次重装完以后,重新又从头开始安装了一次,这次注意到了各种细节,算是我成功安装的保证吧。具体思路如下:
首先,我的GPU型号为:RTX 3050,因此在终端中执行以下命令查看自己电脑适配的驱动型号:
ubuntu-drivers devices
得到系统推荐的有关本机显卡其驱动的相关信息,如下图(采用的前人的图片)所示:
同时,还可以到NVIDIA驱动下载官网官方驱动 | NVIDIA查看进一步确定自己电脑适配的驱动器型号(匹配特别重要)选择适配本机显卡型号的驱动版本,点击搜索。
上述搜索结果与 ubuntu-drivers devices 推荐的版本是相对一致的(但是ubuntu-drivers devices推荐的是对应版本号的server版本)。
接下来,确认以后就要安装了。
方法一
对于新手,强烈推荐 直接从系统软件和更新中的附加驱动里更新。
方法二
对于老手,可一次执行以下命令安装驱动:
//占个位置55~
方法三
1、卸载之前安装的版本:
sudo ./NVIDIA-Linux-x86_64-*.run --uninstall
sudo apt remove --purge nvidia*
sudo apt autoremove
2、将刚下好的驱动.run文件赋予执行权限:
sudo chmod +x NVIDIA-Linux-x86_64-535.14.05.run
3、运行安装:
sudo ./NVIDIA-Linux-x86_64-535.14.05.run
4、执行安装过程中的一些选项如下:
- The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续
- Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续
- Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 NO 继续
- 安装过程中会询问是否安装32位的,选择 NO 继续
5、安装完毕后,您可以通过nvidia-smi指令来检查驱动是否安装成功,如果一切正常,您可以看到类似以下的提示:
Tue Jan 3 12:04:21 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.91.03 Driver Version: 470.63.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 1080 Off | 00000000:01:00.0 Off | N/A |
| 0% 38C P8 7W / 198W | 239MiB / 8118MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2566 G /usr/lib/xorg/Xorg 18MiB |
| 0 N/A N/A 2657 G /usr/bin/gnome-shell 67MiB |
| 0 N/A N/A 6104 G /usr/lib/xorg/Xorg 132MiB |
| 0 N/A N/A 6234 G /usr/bin/gnome-shell 13MiB |
| 0 N/A N/A 7440 G gnome-control-center 1MiB |
+-----------------------------------------------------------------------------+
注意:上图中,最下面一行如果出现了 no processor found等字样的,很可能安装错误了!解决方法见:http://t.csdnimg.cn/QtOJW
注意事项
在执行 update-initramfs -u 时如果报错
update-initramfs: Generating /boot/initrd.img-5.4.0-62-generic
I: The initramfs will attempt to resume from /dev/sdxx
I: (UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
I: Set the RESUME variable to override this.
问题直接原因应为/swap分区的UUID被修改后而没有加入 RESUME file
则按照以下方法进行解决:
- 首先使用如下命令打印/swap分区的UUID号,比对一下确认和上面的系统打印输出一致,锁定为该问题
-
blkid | awk -F\" '/swap/ {print $2}'
- 然后使用如下命令写入/swap分区的UUID号
-
printf "RESUME=UUID=$(blkid | awk -F\" '/swap/ {print $2}')\n" | sudo tee /etc/initramfs-tools/conf.d/resume
- 最后更新内核文件
-
sudo update-initramfs -u