☰
Ubuntu 安装 NVIDIA 驱动:路线选择、避坑与故障排查
2026/9/30 3:50:01 网站建设 项目流程

1. 先把路线选对,比敲命令重要得多

在 Ubuntu 上装 NVIDIA 显卡驱动这件事,看起来只是几条命令的事,实际上一半以上的翻车都发生在“选错路线”这一步。我自己前前后后折腾过十来台机器,从老旧的 GTX 750 到后来的 50 系新卡,从物理机到 VMware 里的虚拟机,总结下来就是一句话:先确认你的硬件和系统到底是什么状态,再决定用哪种装法,最后才是敲命令。

这篇文章面向的是刚接触 Ubuntu、被nvidia-smi报错折磨过的新手。我会把三条主流安装路线摊开讲清楚,把每一步背后的原因说透,再把那些官方文档里不会写的坑一并列出来。看完之后,你应该能做到:知道自己该装哪个版本的驱动、能独立完成一次干净的安装、并且在装完之后黑屏时知道怎么救回来。

1.1 先分辨一件事:你到底需不需要装 NVIDIA 驱动

很多人拿到一台 Ubuntu 机器,第一反应就是“我要装显卡驱动”,但其实要先看清楚显卡是谁家的。用下面这条命令列一下图形设备:

lspci | grep -i -E "vga|3d|display"

输出里如果出现Intel Corporation HD Graphics 630这种字样,说明这台机器的主显示输出是 Intel 核显,它走的是内核里的i915驱动,跟 NVIDIA 完全是两码事。核显驱动不需要你手动装,内核自带,装 NVIDIA 驱动也改变不了它的行为。只有输出里出现NVIDIA Corporation的设备,才需要走后面讲的那些流程。

还有一种情况是把 Ubuntu 装在 VMware、VirtualBox 这类虚拟机里。虚拟机里的“显卡”是宿主机模拟出来的虚拟设备,通常标识成VMware SVGA II之类的名字,压根没有真实的 NVIDIA 芯片。这种情况下你搜到的所有 NVIDIA 安装教程都不适用,装上去只会把图形界面搞崩。虚拟机里要做的是装open-vm-tools或者增强功能包,把分辨率和剪贴板共享搞定就足够了。

另外,同一个型号名字里带 NVIDIA 的品牌卡,比如某些华硕、微星、技嘉的游戏本,芯片仍然是 NVIDIA 的,驱动选择逻辑跟原厂卡完全一样,不需要去找所谓“华硕显卡驱动”。这一点新手特别容易绕进去,看到品牌就以为要去品牌官网下驱动,实际上 Linux 下认的是芯片型号,不是板卡品牌。

1.2 三条路线的取舍:apt 仓库、官方 runfile、第三方源

搞清楚硬件之后,接下来是选安装方式。市面上流传的方法主要就三种,我按推荐程度排一下:

安装方式适合人群优点缺点
apt 仓库 / ubuntu-drivers绝大多数新手、服务器、日常开发机与内核、DKMS 联动好,升级内核后自动重编译,卸载干净仓库里的版本相对保守,新卡(如 50 系)可能要等仓库更新
NVIDIA 官方 runfile需要特定新版本、仓库版本装不上、特定计算场景版本随意选,安装包自包含与系统包管理脱节,内核升级后要手动重装,卸载容易留残渣
第三方 PPA / 手动 deb有明确版本需求、内网离线环境可以锁定某个具体版本源的可信度和维护状态需要自己判断

对新手来说,能走 apt 就不要走 runfile。原因很实在:apt 装完的驱动会被 DKMS(动态内核模块支持)接管,以后系统内核升级,驱动模块会自动跟着重编译,你不会某天开机突然发现图形界面没了。runfile 装完之后,每次内核更新你都得手动重跑一遍安装脚本,忘了就是黑屏。

那什么时候必须用 runfile?常见的有几种:仓库里根本没有你需要的版本(比如某些刚发布的卡,或者要配合特定 CUDA 版本);你在做需要精确控制驱动版本的推理或渲染工作;还有一类是内网离线环境,只能拿一个.run文件过去装。这些场景我会在第 4 节展开。

1.3 一个基本判断:版本不是越新越好

社区里常有人问“GTX 750 用什么版本驱动好”,这个问题的答案取决于 NVIDIA 官方的支持列表,而不是越新越好。老架构的卡在新驱动里会被逐步移出支持范围,硬装上去的结果通常是模块加载失败或者性能异常。

判断方法很简单:去 NVIDIA 官方驱动下载页,选好你的显卡型号,看它推荐的版本号;或者在 Ubuntu 上直接跑ubuntu-drivers devices,让系统告诉你哪些版本在这个内核上是兼容的。后者更靠谱,因为它会结合当前内核版本给出建议。我的经验是,在物理机上,跟着ubuntu-drivers devices推荐的recommended那一行走,成功率最高,除非你有明确的更高版本需求。

2. 动手前的准备:把后路先留好

装驱动这件事,失败率其实不低,而且失败的表现往往是黑屏、进不去桌面。所以真正有经验的人,动手之前会先把救援通道准备好,而不是装完再想办法。这一节的每一步都建议你老老实实做完。

2.1 摸清家底:系统版本、内核版本、当前驱动状态

三条命令,先把现状记录下来:

lsb_release -a # 系统版本,比如 Ubuntu 22.04 / 24.04 uname -r # 当前内核版本,后面装头文件要用 nvidia-smi # 看当前有没有驱动在工作 ubuntu-drivers devices # 看系统推荐哪些驱动版本

nvidia-smi如果正常输出一张表格,里面有驱动版本、CUDA Version、显卡型号和显存占用,那说明驱动已经装好了,你不需要再装。如果它报错,常见的就是那句著名的NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,那才需要重新装。这句报错的具体含义和排查思路,我会在第 5 节单独讲。

uname -r的结果要记下来,因为 apt 装驱动时会用到linux-headers-$(uname -r)这个内核头文件包。如果头文件版本和运行内核对不上,DKMS 编译就会失败,驱动装上了但加载不了,白忙一场。这也是为什么我一直强调“先更新系统再装驱动”——让内核和头文件保持同一版本,能避开一大类玄学问题。

2.2 Secure Boot 这道坎,绕不过去

现代主板默认开启 Secure Boot(安全启动),它会拒绝加载没有签名的内核模块。NVIDIA 的闭源驱动模块默认是没有签名的,于是就会出现“装成功了,重启后nvidia-smi报错,模块加载失败”的现象。

先看一眼状态:

mokutil --sb-state

输出SecureBoot enabled就说明开了。这时候有两条路:一是进 BIOS 把 Secure Boot 关掉,简单粗暴,适合个人开发机;二是保留 Secure Boot,在安装驱动时让系统生成一对密钥,然后通过mokutil导入并签名。第二种做法在企业环境里更规范,但流程稍微长一点,装驱动的过程中系统会弹出一个蓝色的 MOK 管理界面,让你设置一个一次性密码,重启后要在这个界面里选择 Enroll MOK 并输入刚才的密码。

我个人在自用机器上一般直接关 Secure Boot,省事;如果是给别人维护的、或者有合规要求的机器,就走签名流程。这里要提醒一句:这个选择要在装驱动之前定下来,装完再改 BIOS 设置,容易出现模块已加载但签名状态不一致的尴尬情况。

2.3 留好救援通道:TTY、SSH、Live USB

装驱动过程中最怕的就是图形界面挂了,但又不知道怎么进去。几个保命手段:

  • TTY 切换:在图形界面卡死或黑屏时,按Ctrl + Alt + F3(F3 到 F6 都可以)切到纯文本终端,登录进去执行命令。这是最常用的救急方式。
  • SSH 通道:如果机器开了 SSH 服务,从另一台电脑连上去操作是最舒服的。顺便说一句,很多人遇到过ubuntu ssh无法连接的问题,常见原因就是没装openssh-server,或者改了配置后没重启服务,跟显卡驱动没什么关系,别往一块儿想。
  • Live USB:准备一个 Ubuntu 启动盘,万一把 GRUB 或者系统搞到进不去,可以从 U 盘启动,挂载硬盘分区去改配置文件。

提示:在装驱动之前,先把要用的命令写在一个文本文件里,或者干脆存在手机备忘录上。真到了黑屏进 TTY 的时候,你是没法上网搜索的。

2.4 更新系统并安装编译工具链

这一步经常被跳过,但它是很多安装失败的隐形原因:

sudo apt update sudo apt upgrade -y sudo apt install -y build-essential gcc make linux-headers-$(uname -r) dkms

build-essential和linux-headers是 DKMS 编译驱动模块的必需品。有些人会卡在ubuntu安装gcc失败上,多半是软件源没配好或者网络不通,先解决源的问题再往下走。另外提一句,如果你在配环境变量的时候改过PATH,导致gcc找不到,也会让编译失败,这时候用which gcc确认一下,必要时用绝对路径或者把环境变量修正回来。

3. apt 仓库安装法:新手最稳的一条路

准备工作做完,正式进入安装。这一节走的是 apt 路线,也是最推荐新手用的方式。

3.1 读懂 ubuntu-drivers devices 的输出

先看推荐:

ubuntu-drivers devices

输出大概长这样:

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 == modalias : pci:v000010DEd00002504sv00001462sd0000392Dbc03sc00i00 vendor : NVIDIA Corporation driver : nvidia-driver-535 - distro non-free recommended driver : nvidia-driver-550 - distro non-free driver : nvidia-driver-470 - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin

这里几个关键点:带recommended的是系统结合你当前内核给出的建议版本,一般直接用这个;后面几个是可选版本,比如某些计算框架要求特定版本时才去选;最后一行的nouveau是开源驱动,不需要你装,它默认就在。

版本号的含义大致可以这样理解:数字越大版本越新,但支持的老架构越少。如果你是 50 系的新卡,535可能压根不支持,得选更新的分支,甚至要走 runfile 从官方下更新的版本。反过来,如果是很老的 Kepler 卡,可能只能停在470这个分支。所以不要迷信“装最新的”,要装“支持你这张卡的”。

3.2 完整安装流程与现场记录

确定版本之后,两种执行方式。第一种是让系统自动选:

sudo ubuntu-drivers autoinstall

第二种是手动指定版本,我个人更喜欢这种,因为结果可预期:

sudo apt install -y nvidia-driver-535

执行过程中你会看到 apt 在解包、配置、然后触发 DKMS 编译内核模块,屏幕上会刷出一堆Building initial module for ...之类的输出。这一步是真正干活的地方,如果这里报错,后面一定不会成功,要认真看错误信息。

装完之后必须重启:

sudo reboot

有人装完不重启就去看nvidia-smi,然后发现报错,就开始怀疑人生。驱动模块是内核级组件,不重启是不会加载新模块的,这一步不能省。

重启回来后,再跑一次:

nvidia-smi

正常的话会输出驱动版本、CUDA 版本和显卡信息。到这儿,apt 路线基本就成功了。

3.3 验证不能只看 nvidia-smi

nvidia-smi能跑通,只说明驱动模块加载了,不代表图形渲染真的走的是 NVIDIA 卡。如果是笔记本双显卡,还要确认一下当前用的是哪块:

prime-select query

输出nvidia表示独显在工作,intel表示核显,on-demand是混合模式。想切换到独显:

sudo prime-select nvidia

然后注销重新登录(不用重启)。另外可以装个mesa-utils,用下面这条命令看实际的 OpenGL 渲染器:

sudo apt install -y mesa-utils glxinfo | grep "OpenGL renderer"

如果输出里带 NVIDIA 的型号名,说明渲染路径确实走对了。这一步在跑图形程序、游戏或者渲染任务之前很有必要,不然可能出现“驱动装了但程序跑在核显上”的情况,性能差一大截还找不到原因。

3.4 离线环境怎么装

内网或者没有外网的机器,apt 直接装是装不上的,会一直卡在下载。这时候思路是“在一台能上网的同版本机器上把包下下来,再拷过去”。

# 在联网机器上,只下载不安装 sudo apt-get install --download-only -y nvidia-driver-535 # 包会落在 /var/cache/apt/archives/

然后把这些.deb文件拷到目标机器,用dpkg -i *.deb安装,缺依赖的话再补。注意两点:一是两台机器的系统版本和内核版本要一致,否则依赖关系和 DKMS 编译都会出问题;二是别漏了dkms和linux-headers相关的包,它们不在同一个依赖树里,容易漏。

4. 官方 runfile 路线:什么时候必须上

如果 apt 里确实没有你要的版本,或者你已经确定要走这条路,那就得换成官方.run安装包。这条路的流程更长,坑也更多,但掌握之后你会发现它其实更“可控”。

4.1 先把 nouveau 彻底禁掉

开源驱动nouveau默认会抢占 NVIDIA 设备,所以官方安装包才会在开头要求你禁用它。做法是新建一个黑名单配置:

sudo tee /etc/modprobe.d/blacklist-nouveau.conf << 'EOF' blacklist nouveau options nouveau modeset=0 EOF sudo update-initramfs -u

第一行是禁止内核自动加载nouveau模块,第二行是关掉它的内核模式设置,避免它仍然占用显示输出。改完必须更新 initramfs,否则重启后配置不生效。

改完重启一次,然后用下面这条命令确认nouveau没在跑:

lsmod | grep nouveau

没有任何输出,才说明禁干净了。如果有输出,就要回头检查配置文件名和路径,常见错误是写成了blacklist-nouveau.conf.txt这种带后缀的名字。

4.2 关掉图形界面,在纯文本模式安装

官方.run安装包要求 X 服务器不在运行,否则会拒绝安装。做法是切到多用户模式:

sudo systemctl isolate multi-user.target

这条命令会把图形界面停掉,屏幕会变成纯文本登录界面。在这里登录,然后进入.run文件所在目录执行:

sudo sh NVIDIA-Linux-x86_64-<版本号>.run

安装过程会问几个问题:是否编译内核模块(选是)、是否注册 DKMS(强烈建议选是)、是否更新 X 配置(一般选是)。DKMS 那一步一定要选是,这是 runfile 路线唯一的自动重编译保障,选了它之后内核升级时驱动会自动重编,能省掉大量麻烦。

装完重启回图形界面:

sudo reboot

再跑nvidia-smi验证。如果这时候报错,多半是模块没编译成功,去看/var/log/nvidia-installer.log,错误信息都在里面。

4.3 内核升级后驱动失效怎么办

即使选了 DKMS,也偶尔会出现内核升级后驱动不工作的情况。先看 DKMS 状态:

dkms status

正常应该显示nvidia, <版本>, <内核版本>: installed。如果显示built但没有installed,说明编译了但没装进去,手动补一下:

sudo dkms install -m nvidia -v <版本号>

如果压根没编译,通常是新内核的头文件没装:

sudo apt install -y linux-headers-$(uname -r) sudo dkms autoinstall

这套组合拳打下来,大部分内核升级导致的驱动失效都能救回来。

4.4 卸载和回滚要干净

runfile 装的驱动,卸载要用自带的脚本:

sudo /usr/bin/nvidia-uninstall

如果这个脚本找不到,就把安装包再跑一次,选卸载选项。卸载后要重启。

用 apt 装的驱动卸载则简单得多:

sudo apt purge '^nvidia-.*' sudo apt autoremove --purge sudo reboot

这里用通配符^nvidia-.*是因为相关包有几十个,一个个列出来容易漏。重启后如果不放心,可以检查一下/etc/modprobe.d/下是不是还留着之前的手动黑名单配置,以及lsmod | grep nvidia是否为空。这两步做完,系统就回到干净状态了,可以重新选择路线安装。

5. 常见故障排查实录

这一节是我踩坑踩出来的,基本覆盖了新手会遇到的大部分问题。

5.1 nvidia-smi 报错 communicate with the NVIDIA driver

完整报错是NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.这句话的意思是:nvidia-smi这个工具在,但内核里的驱动模块没加载或者加载失败。

排查顺序建议这样走:先lsmod | grep nvidia,看模块在不在。不在的话,多半是 Secure Boot 拦住了,或者 DKMS 编译失败。编译失败就去dkms status看状态,再看/var/lib/dkms/nvidia/*/build/make.log里的报错。模块在但nvidia-smi还是报错,那就是内核版本和模块版本对不上,重启一次通常能解决,因为重启会重新匹配。

还有一种隐蔽情况:系统里同时存在 runfile 和 apt 两套驱动的残留文件,/usr/lib/x86_64-linux-gnu/下有两份libnvidia-*库。这种情况必须彻底卸载其中一套,不能混着用。我一般建议统一用 apt,卸载时把 runfile 那套也清干净。

5.2 glxserver_nvidia 模块加载失败

报错长这样:[ 7.125] (EE) NVIDIA: Failed to load module "glxserver_nvidia" (module does not exist, 0)。这通常出现在 X 服务器日志/var/log/Xorg.0.log里,表现是图形界面起不来或者分辨率异常。

原因是 X 服务器需要的 GLX 相关文件没装全。解决方式是补上对应的库包:

sudo apt install -y libnvidia-gl-535

版本号要跟你装的驱动主版本对应。装完重启,或者重新生成一下 X 配置。这类问题在手动拼装驱动包、或者通过离线方式装了个不完整依赖树的时候特别常见。

5.3 黑屏、循环登录、分辨率掉到 800x600

这三种表现大概率是同一个根源:驱动装上了但图形界面配置没跟上。分情况处理。

黑屏但能进 TTY:切到Ctrl + Alt + F3,登录后先看nvidia-smi是否正常。正常的话就是 X 配置的问题,可以试着删掉/etc/X11/xorg.conf(如果有),让系统自动探测,然后重启。

循环登录:输入密码后又弹回登录界面。这种情况通常是 X 服务器启动失败或者权限问题。切 TTY 后看/var/log/Xorg.0.log里的(EE)行,定位具体模块。临时应急可以在 GRUB 启动参数里加nomodeset,先让系统用基础显示模式进去。

分辨率异常:如果nvidia-smi正常但分辨率只有 800x600,说明显示输出没走 NVIDIA 驱动。检查xrandr的输出,确认接口名,然后检查/etc/X11/xorg.conf里的 Screen 配置。笔记本的话还要确认prime-select的状态。

5.4 故障速查表

把上面的内容整理一下,方便你直接对照:

现象最可能原因快速处理
nvidia-smi 报 communicate 失败模块未加载 / Secure Boot 拦截 / DKMS 编译失败lsmod 查模块,dkms status 查编译,检查 Secure Boot
黑屏但可进 TTYX 配置冲突 / nouveau 未禁干净删 xorg.conf,lsmod 确认 nouveau 不在
循环登录X 启动失败 / 权限或配置错误看 Xorg.0.log 报错行,补装 libnvidia-gl
分辨率只有 800x600渲染路径走了核显prime-select 检查,glxinfo 看渲染器
内核升级后失效DKMS 未重编译装对应内核头文件,dkms autoinstall
装完仍然用核显prime 模式设置不对prime-select nvidia 后重新登录

注意:任何一次改动之后,先重启再看结果,不要在没重启的状态下反复改配置,容易把问题叠加起来,越修越乱。

6. 驱动装好之后,还有几件事要理顺

驱动能跑通只是第一步,接下来还有几个相关的点,处理好了能省掉很多后续麻烦。

6.1 驱动版本和 CUDA 版本是绑定的

如果你要跑深度学习或者 GPU 计算,会用到 CUDA。CUDA Toolkit 对驱动版本有最低要求,装了旧驱动就装不上新 CUDA。常见对应关系大致是:CUDA 12.0 需要 525 以上的驱动,12.2 需要 535 以上,12.4 需要 550 以上,更新的版本要求会更高。具体数值以官方 release notes 为准,这里给的是个记忆锚点。

反过来,驱动版本足够新的时候,向下兼容大多数 CUDA 版本。所以如果你有明确的计算需求,建议先确定要用的 CUDA 版本,再倒推驱动版本,而不是装完驱动再发现 CUDA 装不上。nvidia-smi右上角显示的CUDA Version是驱动支持的最高 CUDA 版本,不是当前安装的版本,这个细节很多人会搞混。

6.2 Wayland 还是 X11,别忽视这个选项

Ubuntu 新版本默认用 Wayland 会话,而 NVIDIA 驱动对 Wayland 的支持是一步步完善的。如果你遇到图形异常、截图工具失效、某些程序闪退,可以试着在登录界面切换到 X11 会话再试一次。登录界面右下角或者用户名输入框旁边通常有个齿轮图标,点开就能选。

右上角nvidia-smi正常但界面还是卡顿,多半就是会话类型的问题。反过来,如果你在用某些较新的桌面特性,可能又需要 Wayland。这个没有绝对答案,我的做法是:遇到渲染相关的怪问题,先切 X11 验证一下,能快速判断问题是不是出在合成器这一层。

6.3 笔记本双显卡和虚拟机的特殊情况

笔记本通常是 Intel 核显负责显示输出、NVIDIA 独显负责重负载,这就是所谓的 Optimus 架构。默认情况下独显可能处于休眠状态,nvidia-smi会显示No running processes found,这是正常的,不是故障。需要独显干活的时候,用prime-run前缀启动程序,或者干脆切到nvidia模式。

虚拟机的情况前面提过,再强调一次:虚拟机里没有真实 NVIDIA 硬件,所有驱动安装教程都不适用。虚拟机该做的是装open-vm-tools-desktop(VMware)或者增强功能包(VirtualBox),解决分辨率自适应和剪贴板共享。分辨率上不去、鼠标卡顿,都是这些工具没装好的表现,跟显卡驱动无关。

6.4 一套适合长期维护的习惯

最后说几个我一直在用的习惯,能显著降低后续出问题的概率。

第一,记录驱动版本和安装日期。在/etc/apt/apt.conf.d/里锁定版本,或者干脆写个备注,下次出问题时能快速判断是不是某次升级引起的。第二,内核不要盲目升级。生产或者主力开发机上,可以暂时 hold 住内核包,等确认新内核和当前驱动兼容再升。第三,改动前备份/etc/X11/和/etc/modprobe.d/,这两个目录下的文件加起来不到几 KB,拷一份成本极低,出事时能快速对照。

我个人在实际操作中的体会是,Ubuntu 装 NVIDIA 驱动这件事,难点从来不在命令本身,而在“判断当前状态”和“准备退路”这两件事上。把lspci、nvidia-smi、dkms status、prime-select query这几条命令练成条件反射,遇到问题先看状态再动手,基本就不会陷入反复重装的循环里。另外,如果一台机器已经折腾了好几次,各种残留文件混在一起,与其继续修,不如备份数据后重装一遍系统,从干净状态走一遍 apt 流程,往往比花两小时排查更快。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询