ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu安装NVIDIA驱动全攻略:从装前准备到卸载排查一条龙

Ubuntu安装NVIDIA驱动全攻略:从装前准备到卸载排查一条龙 1. 动手之前先花十分钟搞清楚这三件事我相信大多数人第一次在Ubuntu上折腾NVIDIA驱动都是从“开机之后分辨率非常感人”或者“跑深度学习时发现GPU用不了”开始的。我在Ubuntu 18.04到24.04之间翻来覆去装了无数次驱动踩过键盘失灵、登录界面死循环、开机黑屏、内核升级后驱动消失等各种坑。回头总结下来绝大多数问题都不是驱动本身难装而是装之前没想清楚三件事你的显卡是什么型号、你的Ubuntu是什么版本、你打算靠哪个渠道装驱动。这三件事决定着你接下来走哪条路也直接决定你后面会不会多花两三个小时在救砖、救桌面环境上。1.1 你的显卡到底在不在系统里被识别很多人上来就敲nvidia-smi发现报错“NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver”第一反应是驱动没装。这判断本身没错但我想让你先做另一件事确认系统层面到底看到显卡没有。在终端依次执行lspci | grep -i nvidia lshw -C displaylspci能看到NVIDIA设备是不是挂在PCI总线上lshw -C display则会把当前显示控制器列出来。如果这两条命令看不到任何NVIDIA设备那问题可能根本不在驱动而是BIOS里把独显禁用了或者你这台机器是双显卡而当前显卡切换模式压根没把NVIDIA亮出来。我自己就碰到过一次这种情况一台老笔记本装Ubuntu 20.04折腾一晚上驱动都装不上最后进BIOS发现显卡模式是“SG Read Only”而不是可切换的“Discrete Graphics”把模式改掉之后系统秒认显卡。所以装驱动前先花两分钟确认硬件被系统识别这是很多教程没说但特别重要的一步。1.2 你的Ubuntu版本决定驱动获取渠道Ubuntu 18.04到24.04这中间隔了好几代而不同版本的驱动获取渠道、依赖库版本、内核版本都不一样。我用一张表给你列清楚Ubuntu版本内核版本区间推荐驱动获取方式需要注意的问题18.044.15-5.4官方源或graphics-drivers PPA较新驱动对GCC版本有要求PPA里部分新版驱动可能拉不起来20.045.4-5.15ubuntu-drivers自动识别或官方源无重大坑最多遇到Secure Boot签名问题22.045.15-6.5ubuntu-drivers自动识别官方源内核更新频繁升级后驱动容易失效24.046.8官方源、ubuntu-drivers新内核对旧版驱动兼容性差老卡建议用官网runfile手动装很多人觉得Ubuntu版本越新越好其实对NVIDIA驱动来说新版本系统带的新内核有时反而会让旧驱动无法编译。比如RTX 20系显卡在Ubuntu 24.04下如果系统源里给出的默认驱动版本太旧你可能得去官网下对应最新版runfile才能顺利加载。所以先确认自己系统版本再决定用哪个渠道这才是最省时间的做法。1.3 驱动版本号不是越大越好适合自己的才是最好的NVIDIA驱动版本号从4xx到5xx一路涨到现在我看很多教程动不动就让人装最新版但实际工作上我真的劝你不要盲目追新。判断驱动版本是否合适主要看三方面第一你的显卡架构是否被该版本支持比如GTX 16系、RTX 20系、RTX 30系、RTX 40系、RTX 50系各自有对应的最低支持版本第二你要跑的软件是否有特定的CUDA版本要求比如PyTorch或TensorFlow的官方容器往往需要驱动版本大于某个阈值太新的驱动反而可能和旧CUDA工具链起冲突第三系统源里推荐的版本通常是经过Ubuntu官方稳定性验证的开箱即用。如果你实在拿不准最简单的做法是执行下面这条命令让系统自己判断ubuntu-drivers devices它会列出当前显卡以及系统认为可用、推荐的驱动版本推荐的那个一般会带有recommended标记。这个推荐值通常是最稳妥的适合绝大多数场景。2. 最省心的路径用系统源和官方源安装如果你不是要跑特别新的显卡或者不是对CUDA版本有特殊要求我强烈建议你不要去官网下runfile而是直接走系统源安装。原因很简单系统源里的驱动包经过Ubuntu的测试装完之后和桌面环境、内核模块、依赖库的配合度是最好的升级内核后驱动也会跟着从源里重新编译省掉一大半手动维护的麻烦。很多刚接触Linux的朋友会有一个误解觉得从官网下载的就是“最官方”的、最好的。实际上Ubuntu官方源和NVIDIA官网驱动本质上是同一个东西只是系统源里多了一层针对当前系统的适配和验证。对于90%的用户场景这层适配就足够我放心了。2.1 为什么我不推荐一上来就在官网下.run包先说结论runfile安装在特定场景下必须用比如你要装一个不在系统源里的新版本驱动或者你的系统是精简版缺了某个包。但在日常使用中runfile安装有两个不容易被新手察觉的问题。第一runfile安装是脱离包管理器进行的。这意味着之后你想卸载、想升级都不能用apt命令管理驱动文件散落在/usr/lib/nvidia、/usr/lib/x86_64-linux-gnu、/opt/nvidia等目录里系统不知道它们的存在。等哪天你想换驱动版本或者彻底清除残留就不得不手动去翻这些目录。第二runfile安装容易和系统自带的nouveau开源驱动冲突。虽然安装器会自动帮你写blacklist但如果你中途安装失败中断了blacklist文件有时会残留导致开源驱动被禁用但闭源驱动又没装上显卡直接躺平桌面都进不去。所以我的建议是能用apt就别碰runfile先把系统源这条简单路径走通遇到问题了再考虑runfile。2.2 从纯命令行界面安装的完整流程这里我以Ubuntu 22.04和24.04为例走一遍我实际用过的完整流程。首先更新系统和安装工具包sudo apt update sudo apt upgrade -y sudo apt install ubuntu-drivers-common build-essentialbuild-essential不是装驱动本身必需的但后面如果触发DKMS编译内核模块GCC、make这些工具就得就位。接着查看系统推荐的驱动版本ubuntu-drivers devices如果显示类似driver : nvidia-driver-535 - third-party - recommended那么直接执行sudo ubuntu-drivers install这条命令会自动安装推荐版本的驱动。如果你明确知道自己要装哪个版本也可以手动指定sudo apt install nvidia-driver-535装完之后重启sudo reboot重启后先别急着跑别的先验证两件事lsmod | grep nvidia nvidia-smilsmod能看到nvidia相关内核模块被加载nvidia-smi能看到显卡信息和驱动版本号。如果这两个输出正常恭喜你你已经完成了整个安装流程的80%。2.3 安装完成后的验证动作有的用户会问为什么明明装好了但跑游戏或跑训练时总觉得性能不对这里我推荐几个验证命令可以帮你排查。nvidia-settings这个命令会打开NVIDIA控制面板里面能看到GPU温度、风扇转速、显存占用这些实时数据。还有一个图形界面工具sudo apt install mesa-utils glxinfo | grep OpenGL rendererglxinfo查看OpenGL渲染器是否是NVIDIA如果显示的是llvmpipe这类软件渲染器说明显卡没真正参与渲染那驱动大概率还是有问题。另外如果你跑的是ffmpeg硬编解码装完NVIDIA驱动后会自动多出NVDEC/NVENC能力可以用下面命令快速测试ffmpeg -hide_banner -encoders | grep nvidia能看到h264_nvenc、hevc_nvenc这些编码器就说明硬编解码通道已经通了。很多人不知道NVIDIA驱动没装好ffmpeg的-hwaccel cuda参数就算写了也会静默回退到CPU性能差好几倍。3. 什么时候必须用runfile手动安装完整流程在这里前面说过90%的场景用系统源就够了。但我这半年在Ubuntu 24.04上给RTX 50系显卡装驱动时就碰上了系统源里还没有合适版本的窘境最后只能去官网下载runfile。所以runfile这条路你躲不掉最好还是搞清楚流程。另外如果你经常用最新版CUDA或者跑一些需要特定驱动小版本的容器镜像官方runfile反而是最精准的选择因为你可以精确控制驱动版本。比如某些老项目要求驱动版本必须在550.107.02这个特定小版本系统源给不了runfile就能满足。3.1 runfile不是洪水猛兽但你要清楚代价先说清楚runfile安装的代价免得你走一半又后悔。第一安装前必须停掉图形界面也就是X服务或Wayland显示服务否则驱动模块加载时会发现显示服务还占着显卡直接报错退出第二卸载时没有包管理器兜底只能用NVIDIA自带的nvidia-uninstall脚本或者手动清理一堆散落文件第三如果装到一半断电、断网或者被你CtrlC中断系统可能处于半驱动状态桌面进不去还得进救援模式收拾残局。但反过来runfile安装也有它的独特优势不依赖系统源装哪个版本完全由你自己决定驱动二进制文件直接放到固定目录不用跑DKMS重新编译某些情况下加载模块的时间点也比包管理器方式更好控制。所以我的建议是给自己留出一条“退路”装runfile之前先把当前系统状态和重要数据做个快照或者备份。我自己的习惯是装前用Timeshift打一个系统快照万一翻车10分钟就能恢复。3.2 手动安装前必须停掉图形界面这个步骤是runfile安装最容易出错的地方。如果你直接在图形桌面开着的情况下执行安装器大概率会看到类似“You appear to be running an X server”的提示然后自动退出。正确的做法是这样的。先切换到纯命令行模式sudo telinit 3这个命令会把系统切换到运行级别3也就是多用户文本模式图形界面服务会被停止。或者如果你知道当前系统用的是GDM还是LightDM也可以手动停掉对应服务sudo systemctl stop gdm3 # 或者 lightdm、sddm这里我建议用telinit 3因为它不依赖你到底用哪个显示管理器对新手更友好。切换到命令行模式后用CtrlAltF3或F2、F4重新登录一个tty终端然后执行安装器。3.3 run安装器里每个选项怎么选从NVIDIA官网下载对应你显卡架构和系统架构的NVIDIA-Linux-x86_64-xxx.xx.run文件后先加执行权限chmod x NVIDIA-Linux-x86_64-550.120.run sudo sh NVIDIA-Linux-x86_64-550.120.run安装器会先做一系列预检查然后问你几个问题。这里我把常见选项和我的建议列一下问题选项我的建议Install NVIDIAs 32-bit compatibility libraries?Yes/No如果你要跑32位应用或Steam老游戏选Yes否则选No减少多余文件Would you like to run nvidia-xconfig?Yes/No老系统建议Yes会生成/etc/X11/xorg.confUbuntu桌面版建议No让系统自动检测DKMS installationYes/No强烈建议Yes这样内核升级时会自动重编驱动模块Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 xxx?OK直接确认这里面最关键是DKMS选项。如果你选了No驱动装一次就固定在当前内核版本上以后系统升级内核新内核一启动就会找不到nvidia模块又得重新手动装一遍。选YesDKMS会在内核更新后自动重新编译模块省心太多。安装完成后重启sudo reboot如果一切正常桌面能起来nvidia-smi也能看到信息。如果桌面没起来看看是不是Xorg配置有问题这个留到后面故障排查部分详细说。4. 干净卸载NVIDIA驱动的完整链路卸载NVIDIA驱动这事情往往比安装更考验人。很多人装驱动的时候觉得很顺利到了卸载的时候发现各种残留删不干净重启后新驱动装上又出现诡异问题比如OpenGL渲染错误、libnvidia版本冲突、Xorg起不来。我花了很长时间才总结出一个相对保险的卸载套路先明确驱动来源再用对应方式卸载最后清理残留并验证。4.1 卸载前先问自己驱动是哪个渠道装的这是最重要的一步。很多人在卸载时看不懂报错就是因为没搞清楚驱动到底是apt渠道装的还是runfile渠道装的。两个渠道安装的文件位置和卸载工具完全不一样混着用命令轻则残留重则把系统其他包也连带删掉。判断方法很简单dpkg -l | grep -i nvidia如果有大量ii开头的nvidia相关包说明你是用apt装的。如果没有任何输出或者只有零散几个无关包那很可能就是runfile装的。还可以检查是否有NVIDIA自带的卸载脚本ls /usr/bin/nvidia-uninstall有输出就说明当初是用runfile方式装的。不一样请先判断清楚再动手。4.2 apt/dpkg系驱动的卸载操作如果确认是apt方式装的卸载的第一步是列出所有nvidia相关包dpkg -l | grep -i nvidia你会看到类似nvidia-driver-535、libnvidia-gl-535、nvidia-kernel-source-535这样的包。然后用purge把这些包全部卸载掉顺带清理配置sudo apt purge nvidia-driver-* nvidia-kernel-* libnvidia-* nvidia-compute-*有人担心nvidia-*通配符会不会误删其他软件实际操作中基本不会因为它只匹配以nvidia开头的包不会碰libnvidia之外的库。如果不放心可以先用dpkg -l | grep -i nvidia | awk {print $2} nvidia_packages.txt把清单先导出来手动检查一遍再执行循环卸载sudo apt purge $(cat nvidia_packages.txt)卸载完成后运行一次自动移除清理依赖sudo apt autoremove --purge -y sudo apt clean4.3 runfile驱动的卸载与残留清理runfile渠道卸载的核心命令是sudo nvidia-uninstall这个脚本会从系统中移除NVIDIA驱动文件并尽量恢复Xorg相关配置。如果系统提示找不到nvidia-uninstall也可以去你当初下载的runfile目录里执行sudo sh NVIDIA-Linux-x86_64-550.120.run --uninstall脚本执行完并不代表系统就干净了因为runfile方式会在安装时留下不少零散文件脚本不一定能全部清掉。接下来要手动检查这些目录ls /usr/lib/nvidia* /usr/lib/x86_64-linux-gnu/libnvidia* /opt/nvidia 2/dev/null如果还有残留直接删除sudo rm -rf /usr/lib/nvidia /usr/lib/x86_64-linux-gnu/libnvidia* sudo rm -rf /opt/nvidia还有一个容易被忽视的地方是DKMS残留。用dkms status查看是否有nvidia相关的DKMS模块残留如果有手动移除sudo dkms remove nvidia/550.120 --all最后检查/etc/modprobe.d/下的blacklist文件。如果当初禁用了nouveau卸载后建议把黑名单注释掉或删除让系统恢复原生的开源nouveau驱动避免影响后续其他显卡或虚拟机使用sudo rm -f /etc/modprobe.d/blacklist-nvidia-nouveau.conf反正我个人已经把这套流程整理成了三段固定的命令序列换机器、换版本时直接改驱动版本号就行十几分钟能弄完。4.4 卸载后如何验证系统真的“干净”了卸载的收尾动作比卸载本身更重要因为只有验证干净了你才能放心装下一版驱动。三步验证lsmod | grep nvidia没有输出说明内核模块已经卸载干净。再查包管理器dpkg -l | grep -i nvidia没有输出说明apt侧已无残留。最后看文件系统find /usr -name *nvidia* -o -name *NVIDIA* 2/dev/null | head -50这里如果还有输出先别慌要看路径。某些路径下会保留NVIDIA驱动相关的日志目录或者旧配置文件只要不是出现在/usr/lib或者/opt这些驱动安装目录里就可以不管。我之前碰到过一种情况卸载后nvidia-smi还能调用发现是/usr/bin/nvidia-smi这个可执行文件还在。其实只要dpkg -l没有nvidia包、内核模块也卸载了这个可执行文件就只是一个“空壳”不影响后续重装。但为了干净我一般会把它手动删掉sudo rm -f /usr/bin/nvidia-smi /usr/bin/nvidia-settings5. 驱动装了却跑不起来常见故障现场复盘驱动安装的报错千奇百怪但本质上逃不过几个核心环节内核模块没加载、Xorg配置错误、Secure Boot签名被拒、依赖库版本冲突。下面这几个是我遇到最多、也是网上搜到频率最高的几个故障把它们一次聊透。5.1 nvidia-smi提示could not communicate with nvidia driver这个错误几乎每个装过NVIDIA驱动的Ubuntu用户都会碰到它本身是个通用提示意思是nvidia-smi这个用户态工具已经找到了但内核里的nvidia驱动模块没有正常加载或者通信不上。排查链路是这样的。第一步查模块lsmod | grep nvidia如果完全没输出说明模块没加载。这时候先尝试手动加载sudo modprobe nvidia然后立刻再看dmesg日志dmesg | grep -i nvidia如果日志里有类似“module verification failed: signature not found”的错误那基本可以断定是Secure Boot或模块签名问题。Ubuntu在支持UEFI Secure Boot的机器上默认只允许加载经过签名的内核模块NVIDIA闭源驱动没有微软或Ubuntu官方签名所以必须关掉Secure Boot或者用MOK工具自己签一遍名。如果你确认Secure Boot是关闭的那就要查内核版本和驱动版本是否匹配。特别是刚升级过内核的情况下modprobe nvidia会提示找不到对应版本的模块这时看/lib/modules/$(uname -r)下有没有nvidia相关目录没有就说明DKMS没有在新内核上重新编译。解决办法sudo dkms autoinstall跑完再试一次基本能解决。5.2 循环登录和GLX模块加载失败循环登录是个经典症状输入密码后屏幕黑一下又重新回到登录界面永远进不了桌面。很多教程会把这问题一股脑甩给NVIDIA驱动但其实有两个完全不同的原因排查思路完全不一样。第一个原因是Xorg的配置里指定了Driver nvidia但实际驱动模块没装好X服务起不来就退回登录。这种情况下看日志cat /var/log/Xorg.0.log | grep -i nvidia如果看到类似(EE) NVIDIA: Failed to load module glxserver_nvidia (module does not exist, 0)说明Xorg尝试加载NVIDIA的GLX扩展模块时找不到对应的.so文件。这通常发生在混合卸载或驱动升级不彻底之后libglxserver_nvidia.so这个库丢了或者版本不匹配。解决办法有两种。一是重新安装一遍同版本驱动让GLX模块补齐二是在确认驱动版本没问题的情况下手动创建软链接把正确的libglxserver_nvidia.so指过去sudo ln -s /usr/lib/x86_64-linux-gnu/libglxserver_nvidia.so.535 /usr/lib/x86_64-linux-gnu/xorg/extra-modules/libglxserver_nvidia.so注意版本号要和你当前安装的驱动一致。这个方法在部分老驱动上救过我的命。另一个原因是Wayland和NVIDIA驱动的兼容性问题。从Ubuntu 22.04开始GDM默认使用Wayland而某些NVIDIA驱动版本在Wayland下表现不稳定也会导致登录界面反复重启。解决办法是强制GDM用Xorg启动sudo nano /etc/gdm3/custom.conf把#WaylandEnablefalse这一行的注释去掉改成WaylandEnablefalse保存后重启。这个改动对绝大多数桌面用户没有副作用因为它只是让登录会话回到Xorg不会影响日常使用。5.3 Secure Boot没关导致每次开机驱动加载失败Secure Boot这个坑我见过太多人踩了。你会发现一个诡异现象驱动装好了重启后nvidia-smi能跑但再重启一次又不行了。或者第一次能进桌面第二次进不了。这种“随机性”其实是模块签名策略在不同启动阶段导致的差异。如果你用的是Ubuntu预装系统或者笔记本预装Windows后改装UbuntuBIOS里大概率默认开启了Secure Boot。这时你安装NVIDIA驱动时DKMS生成的模块没有有效签名Linux内核的锁定策略会拒绝加载它。dmesg里能看到明显的签名验证失败提示。解决方式有两种。第一种最省事进BIOS把Secure Boot关掉。不同主板的菜单位置不一样华硕、微星、戴尔各有各的叫法但基本都在Boot或Security菜单下找“Secure Boot Control”或“Secure Boot”选项设为Disabled即可。第二种更优雅用MOKMachine Owner Key机制自己签名。在NVIDIA驱动安装过程中如果检测到Secure Boot开启会提示你设置一个MOK密码然后让你重启后进入蓝色MOK管理界面选择“Enroll MOK”输入密码完成签名。这个流程我也走通过但对新手来说密码设置和界面操作都很容易做错所以我的建议是除非你有必须开Secure Boot的理由否则直接关掉别在这个环节浪费时间。5.4 内核升级后驱动消失怎么办Ubuntu定期更新内核刷版本号是家常便饭而每次内核升级后NVIDIA驱动都容易“掉链子”。典型表现是系统更新完重启nvidia-smi报无法通信桌面特效全没了。这个问题的根源在于驱动模块是针对具体内核版本编译的旧内核的模块不能给新内核用。如果你是apt装的驱动且安装了DKMS那么正常情况下系统会自动为新内核重新编译模块。但有时候DKMS会在编译时失败原因可能是新内核还没安装对应的headers包或者GCC版本和编译驱动时不一致。手动排查四步走uname -r先看当前内核版本。然后sudo apt install linux-headers-$(uname -r) build-essential确保headers包就位。接着dkms status确认nvidia模块是否进入“installed”状态。如果状态是“built”但没“installed”或者干脆显示“failed”就手动重装sudo dkms install nvidia/535.x -k $(uname -r)这里的版本号要对应dkms status里看到的实际版本。跑完再重启驱动基本就回来了。6. 折腾这么多年几个我觉得值得记住的经验最后聊点实在的不列命令就是几个我反复踩坑后悟出来的经验。第一如果你用的是双显卡笔记本IntelNVIDIA装完驱动后一定要检查一下prime-select是否设置正确。有时候切到NVIDIA独显模式后风扇狂转、发热严重可能就是电源管理策略没跟上可以试着用nvidia-smi -pm 1打开持久模式让GPU不会因为短时间空闲就反复重置电源状态。这个参数看起来不起眼但对笔记本体验提升非常明显。第二不要在驱动已经能正常工作的机器上手痒去升级驱动。Linux圈子有句老话叫“It works, dont touch it”放在驱动上尤其适用。我见过太多人因为系统提示有新版驱动就顺手升了结果升完发现CUDA工具链崩了或者某个深度学习框架直接打不开了。如果你没有明确需求就一直用当前稳定版本。第三重装系统前把驱动包备份一下。特别是runfile方式把那几个.run文件往U盘里放一份。很多离线服务器不能随便访问外网网上现找驱动很容易踩到版本雷区手头有本地文件会从容很多。第四遇到各种奇怪问题先翻/var/log/syslog和/var/log/Xorg.0.log别急着卸载重装。80%的驱动问题都能从日志里找到准确线索日志里的关键字比你在论坛里猜半天准得多。我每次帮人排查驱动问题第一句话永远是“把日志给我看看。”NVIDIA驱动在Ubuntu上的安装和卸载本质上就是个“模块管理”的活内核模块能加载、用户态工具能通信、显示服务能调用GLX这就是一次成功。搞清楚这个逻辑之后你会发现版本号之间的差异、安装渠道之间的差异其实都没那么可怕。我最常遇到的情况是驱动出问题——卸载不干净——残留冲突——重装又出问题形成恶性循环。所以这篇我把“干净卸载”放在和“安装”同等重要的位置来写就是希望大家少走这个循环。
返回列表