众所周知,Linux 系统的的 GUI 和 NVIDIA 显卡相处得并不是很愉快,驱动安装起来会出各种问题,非常折腾。很多同学在配备 NVIDIA 显卡的 Ubuntu 物理机上安装完显卡驱动后,重启电脑发现进不去图形化界面了。具体表现为系统黑屏,屏幕左上角一直有光标在不断闪烁,出现这种情况的原因很多,本质基本上都是无法载入图形化界面的问题。

由于大多数电脑的 CPU 都配备了核显,笔者介绍一种对于配备 NVIDIA 独显和 intel 核显电脑的解决方法,用 intel 核显来做图形化界面的显示设备,NVIDIA 独显仅仅当作计算(CUDA)设备,这样就绕过了 NVIDIA 显卡驱动带来的一系列和 GNOME、LightDM 等桌面环境不适配、不兼容的问题。毕竟我们只要能用 CUDA 就行,又不会用显卡来打游戏。

第一步 强制关机重启电脑后进入恢复模式或者按住 Ctrl + Alt + F2 进入控制台(tty)

第二步 查看电脑所有的显卡,检查一下是否带有 intel 核显

1
lspci | grep VGA

根据输出信息可以看到电脑中确实配备了 intel 的集成显卡

1
2
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
01:00.0 VGA compatible controller: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)

其中每行输出内容的开始是一串编号,这是这个设备的 BusID,需要记住,后面会用到。

再次检查一下 NVIDIA 显卡驱动是否安装成功,本篇教程只针对 NVIDIA 驱动安装成功但无法用于图形化界面显示的情况

1
nvidia-smi

检查一下 CUDA 是否可用

1
nvcc -V
1
2
3
>>> import torch
>>> torch.cuda.is_available()
True

第三步 修改桌面系统 Xserver 的配置文件 /etc/X11xorg.conf

1
sudo vim /etc/X11xorg.conf

在文本末尾添加 intel 核显驱动的配置信息

1
2
3
4
5
6
Section "Device"
Identifier "Device1"
Driver "intel"
VendorName "Intel Corporation"
BusID "PCI:0:2:0"
EndSection

其中,Section 用于指定一个设备配置段的开始,字段名为 Device 代表一个图形设备。

Identifier 为设备的标识符,可以任意取,别和已有的重名就行。

Driver 用于告诉 Xserver 从哪里加载设备的驱动程序,VendorName 指示设备的制造厂商。

BusID 指示设备的BusID,由前文所述的 lspci 命令获取。

接着在屏幕配置段中修改图形设备为 intel 核显,将其中的 Device 属性的值设置为 intel 核显的设备的标识符。

1
2
3
4
5
6
7
8
9
Section "Screen"
Identifier "Screen0"
Device "Device1"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection

第四步 保存并退出,重启电脑

1
sudo reboot

第五步 成功进入桌面,正常情况下没什么问题。如果出现画面撕裂,则需要再次修改桌面系统 Xserver 的配置文件的 intel 核显的配置段,添加三个选项

1
2
3
4
5
6
7
8
9
Section "Device"
Identifier "Device1"
Driver "intel"
VendorName "Intel Corporation"
Option "TripleBuffer" "true"
Option "TearFree" "true"
Option "DRI" "false"
BusID "PCI:0:2:0"
EndSection

TripleBufferTearFree 用于开启三倍缓冲和启用 TearFree 功能,用于减少画面撕裂现象,DRI 选项用于关闭基层直接渲染功能,以解决某些与 DRI 相关的兼容性问题。

配置完成后重启 LightDM 服务即可

1
sudo service lightdm restart