安装驱动步骤

添加ppa源

sudo add-apt-repository ppa:graphics-drivers/ppa

使用USTC PPA源代理

# 我这里是 Ubuntu 18.04 因而为 bionic,根据你的 Ubuntu 版本修改
sudo cp /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-bionic.list /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-bionic.list.bak
sudo nano /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-bionic.list

将文件内容注释掉(#),添加新行:

deb https://launchpad.proxy.ustclug.org/graphics-drivers/ppa/ubuntu bionic main
# 注意替换 bionic 为你的 Ubuntu distro 版本

这样就成功使用了USTC的代理,理论上来说会快一点(实测速度更稳定,但没有快很多)。

接下来更新软件源缓存:

sudo apt update

安装驱动

s

此命令可以查看当前设备可以安装的版本。

输出如下:

~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1c.5/0000:02:00.0 ==
modalias : pci:v000010DEd00001E07sv000010DEsd000012A4bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-535 - third-party non-free
driver   : nvidia-driver-545 - third-party non-free
driver   : nvidia-driver-470 - third-party non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin
ubuntu-drivers autoinstall

此命令将自动选择一个合适的版本,也可以通过sudo apt install手动安装上面列出的版本之一,例如:

sudo apt install nvidia-driver-470

报错了…

如果不想看排错过程,可以直接跳转到这里。

错误排查

不出意外的话,要出意外了:

ERROR (dkms apport): kernel package linux-headers-5.4.0-150-generic is not supported
Error! Bad return status for module build on kernel: 5.4.0-150-generic (x86_64)

看一下已安装的驱动是什么版本:

ls /usr/src | grep nvidia

查看到是 470.223.02 版本,手动重试一下:

sudo dkms install -m nvidia -v 470.223.02

还是报了一样的错误,但蹦了一个log:/var/lib/dkms/nvidia/470.223.02/build/make.log

查看log发现是编译过程出错了,于是立刻想到了gcc和g++编译器上,一看版本——哦豁,gcc 4.8……难怪会失败。

离谱的是,系统安装了gcc/g++ 7,当前使用的却是4.8,真让人摸不着头脑。

好在切换一下就可以解决此问题:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

输入这两行命令之后,会询问你要使用哪个版本的编译器作为默认版本,选最新的即可。

再试一次

sudo dkms install -m nvidia -v 470.223.02

这次没有报错了,构建成功:

~$ sudo dkms install -m nvidia -v 470.223.02

Kernel preparation unnecessary for this kernel.  Skipping...
applying patch disable_fstack-clash-protection_fcf-protection.patch...patching file Kbuild
Hunk #1 succeeded at 82 (offset 11 lines).


Building module:
cleaning build area...
unset ARCH; [ ! -h /usr/bin/cc ] && export CC=/usr/bin/gcc; env NV_VERBOSE=1 'make' -j16 NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=5.4.0-150-generic IGNORE_XEN_PRESENCE=1 IGNORE_CC_MISMATCH=1 SYSSRC=/lib/modules/5.4.0-150-generic/build LD=/usr/bin/ld.bfd modules......
Signing module:
 - /var/lib/dkms/nvidia/470.223.02/5.4.0-150-generic/x86_64/module/nvidia-drm.ko
 - /var/lib/dkms/nvidia/470.223.02/5.4.0-150-generic/x86_64/module/nvidia-uvm.ko
 - /var/lib/dkms/nvidia/470.223.02/5.4.0-150-generic/x86_64/module/nvidia-modeset.ko
 - /var/lib/dkms/nvidia/470.223.02/5.4.0-150-generic/x86_64/module/nvidia.ko
 - /var/lib/dkms/nvidia/470.223.02/5.4.0-150-generic/x86_64/module/nvidia-peermem.ko
Secure Boot not enabled on this system.
cleaning build area...

DKMS: build completed.

nvidia.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-150-generic/updates/dkms/

nvidia-modeset.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-150-generic/updates/dkms/

nvidia-drm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-150-generic/updates/dkms/

nvidia-uvm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-150-generic/updates/dkms/

nvidia-peermem.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-150-generic/updates/dkms/

depmod...

DKMS: install completed.

重启系统

此时还不能高兴太早,先重启一下再看看:

sudo reboot

重启之后,再看看显卡:

nvidia-smi

问题解决,显卡可以正确识别到了:

~$ nvidia-smi
Mon Mar 17 23:21:10 2025
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.223.02   Driver Version: 470.223.02   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  NVIDIA GeForce ...  Off  | 00000000:B3:00.0 Off |                  N/A |
| 41%   33C    P8     4W / 250W |    118MiB / 11011MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1521      G   /usr/bin/gnome-shell              108MiB |
+-----------------------------------------------------------------------------+