相信不少人都在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去掉,参考这篇和他反着来。