0%

ubuntu安装nvidia驱动的问题

相信不少人都在ubuntu上装nvidia驱动时受过折磨。

但ubuntu还是香啊,搭建各种开发环境都比windows方便省事,还支持各种diy行为。之前在实验室电脑上一直没用上nvidia驱动,导致平时用vscode都会有刷新率跟不上的卡屏。开个chrome转半天,我还以为是chrome的问题。想在blender里cuda渲染也找不到cuda。最近偶然安装成功了,记录一下。

ubuntu是22.04,戴尔台式机。一个intel集显,一个nvidia rtx 2060独显。

安装之前,先把nouveau加入黑名单

nouveau是一个开源的显卡驱动程序,主要用于支持NVIDIA的图形处理器(GPU)。它不是用于引导Intel集成显卡的驱动程序。对于Intel集成显卡,通常会使用默认的内核驱动程序(称为i915)来提供图形支持。如果您使用的是Intel集成显卡,通常不需要安装额外的驱动程序,系统会自动加载并使用i915驱动程序。

所以,禁用nouveau之后仍然有集成显卡可以用,不用担心显示问题。禁用的目的是防止这个坏种妨碍我们安装其他nvidia驱动,防止安装了其他nvidia驱动但开机后仍然在用nouveau的情况。

编辑配置文件

sudo vi /etc/modprobe.d/blacklist.conf

在文件末尾插入 禁用nouveau

blacklist nouveau
options nouveau modeset=0

更新配置生效

sudo update-initramfs -u  

然后 就重启

sudo reboot

重启之后,使用命令确认nouveau已经禁用。

lsmod |grep nouveau 
#若输出为空就禁用成功
 
sudo /etc/init.d/lightdm stop
#再禁用X服务

nvidia驱动安装

这个其实很简单,不要像网上那样在命令行里折腾。直接用“软件和更新”里的“附加驱动”安装就好,还能避免一些问题。这一步需要稍微查一下显卡型号对应的驱动型号。我选了最新的535,没问题,装上了。

安装完成后重启

重启之后多半会出现黑屏的问题。这是因为驱动安装之后进入不了图形界面了。

这一步如何你去网上搜“ubuntu nvidia 黑屏”,他们都会告诉你可以使用Ctrl+Atl+F1~F8唤出命令行,也可以再次重启选择安全模式里的“root”命令行。在命令行里使用sudo apt-get --purge remove nvidia*,卸载驱动,重启,就恢复如出了。注意,这样做的人多半是不需要nvidia驱动的,他们可以卸载驱动解决问题。但我们的目的就是用上驱动。不过有时候也可能是装错了驱动版本,这样做可以恢复到图形界面,重新选驱动。

nomodeset

最终,我发现问题出在开机启动引导里的nomodeset参数上。你去搜黑屏问题,网上清一色的告诉你要加上的参数,对吧。从来没有人说,把这个参数去掉。
我就是试了一下,发现去掉这个参数,ubuntu反而以nvidia rtx 2060为显卡成功进入图形界面了。此时输入nvidia-smi也能看到漂亮的显示:

(base) jxl@vostro-5090-china-hdd-protection:~$ nvidia-smi
Thu Sep 14 15:46:31 2023       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05             Driver Version: 535.104.05   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| 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  NVIDIA GeForce RTX 2060        Off | 00000000:01:00.0 Off |                  N/A |
| 32%   43C    P2              29W / 160W |   1819MiB /  6144MiB |      6%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                        
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      1247      G   /usr/lib/xorg/Xorg                          267MiB |
|    0   N/A  N/A      1615      G   /usr/bin/gnome-shell                        104MiB |
|    0   N/A  N/A      3340      G   gnome-control-center                          1MiB |
|    0   N/A  N/A      4697      G   ...irefox/3131/usr/lib/firefox/firefox      197MiB |
|    0   N/A  N/A      5968      G   ...sion,SpareRendererForSitePerProcess       40MiB |
|    0   N/A  N/A      7135      G   ...57403385,6305313678798521428,131072      104MiB |
|    0   N/A  N/A      7863    C+G   blender                                    1094MiB |
+---------------------------------------------------------------------------------------+

困扰我那么久的问题,一下就消失不见了。查了很多资料,这个nomodeset的意思就是开机进入图形界面之前的那段时间,不使用nvidia这种需要额外安装驱动的显卡。之前一直是加着这个参数的,那么进入图形界面之前用的应该是intel集显,进入图形界面之后可能在使用集显,也可能用着nouveau驱动的rtx 2060。现在我把nouveau完全ban掉了,就只能在集成显卡和我安装的nvidia驱动之间选择了。同时我又在开机时加了nomodeset禁用nvidia家的卡,导致只能用集成显卡。大概率集显有些问题,或者因为安装了nvidia驱动而默认图形界面使用nvidia的卡(驱动)。总之,这里有些冲突。正确安装nvidia驱动后,是不需要这个nomodeset的。

后面还需要永久的把nomodeset去掉,参考这篇和他反着来。