尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Ubuntu Nvidia 显卡驱动安装、选型与常见问题排查

发布时间:2026/9/29 1:46:19

资讯中心
01
ARTICLE

Ubuntu Nvidia 显卡驱动安装、选型与常见问题排查

Ubuntu Nvidia 显卡驱动安装、选型与常见问题排查
1. 动手前先摸清家底显卡型号、驱动推荐和当前状态Ubuntu 装 Nvidia 显卡驱动这件事说难不难说简单也真能把人折腾到半夜。我自己第一次在 Ubuntu 上装 Nvidia 驱动是在一台装了 GTX 750 的老机器上照着一篇教程敲了apt install nvidia-driver-535结果重启直接黑屏只能按 CtrlAltF3 进 tty 把驱动卸掉重来。后来在 Ubuntu 20.04、22.04 的机器上反复装了几十次从桌面卡到 P600 这类专业卡、从台式机到笔记本双显卡才算把这里面的门道摸清楚。这篇文章想解决的就是一件事让你在 Ubuntu 上把 Nvidia 显卡驱动装对、装稳并且装完之后遇到问题能自己排查。适合刚接触 Ubuntu 的新手也适合那种以前能跑内核一升级就崩的老用户。核心关键词就三个Ubuntu、Nvidia、显卡驱动外加一个大头——常见问题解决。因为说实话装的过程只占三成时间剩下七成全花在排错上。1.1 为什么apt install nvidia-driver-535不能无脑敲很多人看到别人一条命令搞定就以为自己也能一条命令搞定。问题在于 Nvidia 驱动的版本号和显卡型号是强绑定的不是版本越新越好。GTX 750 这类 Maxwell 架构的老卡在比较新的驱动分支里已经被移出支持列表你硬装上去nvidia-smi大概率起不来或者 X 服务直接挂掉。反过来如果是 RTX 40 系这种新卡装 470 这种老驱动又会缺特性。还有一个坑是混装。你之前用官方 runfile 装过一次后来又用 apt 装了一遍两套文件同时在系统里/usr/lib/xorg/modules下面挂着两拨 glx 模块X 启动的时候自己都不知道该加载哪一个。这类问题的表现就是日志里那句著名的failed to load module glxserver_nvidia。提示装驱动之前先把机器上现有的 Nvidia 相关包列一遍确认是干净状态再动手。混合安装是后面 90% 玄学问题的根源。1.2 三条命令查清显卡型号与推荐驱动不用拆机箱三条命令就够。第一条看硬件lspci | grep -i -E vga|3d|display输出里会看到类似NVIDIA Corporation GA106 [GeForce RTX 3060]这样的字样这就是你的卡。如果是笔记本通常会看到两行一行 Intel 核显一行 Nvidia 独显。第二条看系统推荐的驱动版本这条最有用ubuntu-drivers devices它会列出driver : nvidia-driver-535 - distro non-free recommended这种信息带recommended的那个就是 Ubuntu 官方源认为最匹配你当前内核和硬件的版本。这个推荐值不是随便标的它是根据显卡 PCI ID 和内核 ABI 匹配出来的跟着它走翻车概率最低。第三条看当前驱动的实际状态nvidia-smi cat /proc/driver/nvidia/version如果nvidia-smi报has failed because it couldnt communicate with the nvidia driver说明驱动没加载或者加载失败正好印证了你需要重装。如果它能正常输出一张表格包含驱动版本、CUDA 版本、显存占用那说明驱动是活的你只需要确认版本是否合适。1.3 记录当前状态方便出问题回滚这一步很多人会跳过但真出事的时候能救命。先把关键信息存下来uname -r # 当前内核版本 lsmod | grep -E nvidia|nouveau # 当前加载的显卡模块 dpkg -l | grep -i nvidia # 已安装的 nvidia 相关包 cat /etc/X11/xorg.conf 2/dev/null # 有没有手写的 xorg 配置把这几条的输出贴到一个文本文件里存着。原因很简单驱动装崩之后你大概率进不了图形界面只能在 tty 里靠记忆排查有这份记录你能立刻知道自己之前装的是哪个版本、有没有残留配置。注意如果/etc/X11/xorg.conf存在并且里面有Driver nvidia说明这台机器以前被人手动配置过。这种情况下换驱动前最好先备份这个文件很多黑屏问题就是它能改回来。2. 安装方式选型四条路子各自适合谁Ubuntu 上装 Nvidia 驱动主流的路径有四条官方仓库 apt、Nvidia 官方 runfile、第三方 PPA、以及显卡厂商或整机厂商提供的预编译包。它们不是谁替代谁的关系而是对应不同的网络条件、内核环境和维护需求。选错了不是装不上而是后面维护起来会很痛苦。2.1 官方仓库 apt 安装桌面用户默认答案ubuntu-drivers和apt这条路子最大的优势是跟内核升级联动。你装的是nvidia-driver-535这个元包它背后依赖nvidia-dkms-535DKMS 会在每次内核更新后自动重新编译内核模块。也就是说下次apt upgrade把内核从 5.15.0-91 升到 5.15.0-94重启之后驱动还是活的不需要你手动干预。代价是版本受限于 Ubuntu 仓库通常比 Nvidia 官网的最新版落后几个小版本。对做深度学习、跑 CUDA 的人来说这个落后一般不致命因为 CUDA Toolkit 是独立安装的驱动只要满足最低版本要求就行。2.2 官方 runfile 安装离线环境和特定版本需求从 Nvidia 官网下载NVIDIA-Linux-x86_64-xxx.xx.run这种自解压安装包好处是版本完全自由官网出了哪个版本你就能装哪个。适合两种场景一是内网机器完全没外网二是你需要某个特定版本去匹配特定的 CUDA 或框架要求。坏处也很明显它不走 DKMS 的那套自动机制除非你在安装时选择注册 DKMS内核一升级模块就没了得手动重装一遍。所以用 runfile 的人通常会在装完之后自己写个脚本或者加个 DKMS 注册不然维护成本很高。2.3 PPA 与厂商预编译包谨慎使用有些第三方 PPA 会提供比官方仓库更新的驱动版本。这类源的好处是安装方式和 apt 一致坏处是源的维护质量参差不齐内核升级后包依赖断掉的情况时有发生。如果你只是想要一个新一点的版本优先看 Ubuntu 官方仓库里有没有-server后缀或者更新的分支实在没有再用 PPA。至于整机厂商的预编译包常见于品牌工作站和服务器这类包一般做了平台适配稳定性不错但版本通常很保守而且和公开源的包容易冲突装之前一定要确认它是不是要求你先把系统自带的 nvidia 包全部清掉。2.4 一张表看清怎么选安装方式版本自由度内核升级后是否自动重建适合场景主要风险官方仓库 apt中是走 DKMS桌面、常规服务器版本略旧官方 runfile高否需手动或注册 DKMS离线机、特定版本与 apt 包冲突第三方 PPA高视包而定追新版本依赖易断厂商预编译低视包而定品牌工作站与公开源冲突我个人的建议很明确能用 apt 就用 apt除非你有非常明确的理由不用。跑深度学习的人装的应该是nvidia-driver-535加上独立的 CUDA Toolkit而不是为了追一个新驱动去折腾 runfile。3. 版本号怎么定老卡、新卡、专业卡的分界线选版本这件事本质是在新特性和硬件兼容性之间做权衡。Nvidia 的驱动分支是按架构划支持的一代架构被移出支持列表之后新分支就彻底不管它了。所以你得先知道自己的卡属于哪一代。3.1 从 470 到 550 的支持范围差别470 这个分支是比较特殊的一个它是最后一批还完整支持 Kepler 架构的驱动之一很多老卡比如 GTX 600、700 系列的用户会停在 470。535 是一个长期稳定分支覆盖面很广从 Maxwell 到 Ada 基本都能用在 Ubuntu 22.04 的官方源里也是推荐常客。550 及更新的分支面向较新的架构对老卡的支持要么没有要么是残废状态。所以你的决策顺序应该是先用ubuntu-drivers devices看官方推荐如果推荐值在你的卡的支持列表里直接用如果官方推荐偏新而你的卡偏老就去查这个卡最后支持的驱动分支是哪个装那个分支的最后一个版本。3.2 常见型号与驱动版本对照下面这张表是我根据几次装机经验整理的供参考实际以ubuntu-drivers devices和 Nvidia 官方支持列表为准。显卡型号/架构建议驱动分支说明GTX 750 / 750 Ti (Maxwell)470 / 535新分支可能已停止支持470 最稳GTX 1050 / 1060 (Pascal)535覆盖面好P600 / P1000 (Pascal 专业卡)535专业卡跟随主流分支RTX 2060 / 3060 (Turing/Ampere)535 / 550可用较新分支RTX 4090 (Ada)550 及以上需要新分支才有完整特性这张表的意义在于当你手里的卡是 GTX 750 这种老家伙时不要看到别人装 550 就跟着装 550。强行装上去最常见的结果就是模块能编译但加载不了lsmod | grep nvidia是空的然后你陷入我明明装了为什么没生效的困惑。3.3 版本太新会出什么问题驱动版本和内核版本之间也有匹配关系。新驱动通常会要求一定版本以上的内核头文件才能编译。如果你在 Ubuntu 20.04 这种默认内核较老的系统上装非常新的驱动DKMS 编译阶段就可能报错日志在/var/lib/dkms/nvidia/version/build/make.log。这个日志非常值得看编译失败的具体原因都在里面比盲目搜索有用得多。提示DKMS 编译失败时第一件事是确认linux-headers-$(uname -r)已经安装。缺了内核头文件任何依赖 DKMS 的驱动都编译不出来报错还挺隐晦。4. 实战一apt 方式装驱动全流程这部分是桌面用户的主路径我按 Ubuntu 20.04 和 22.04 上的实际操作写26.04 这类新版本流程基本一致命令里的包名按ubuntu-drivers devices的输出替换即可。4.1 前置准备依赖、Secure Boot、nouveau先把基础工具装好sudo apt update sudo apt install -y build-essential gcc make linux-headers-$(uname -r)build-essential和linux-headers是 DKMS 编译的前提别省。接着处理 Secure Boot。用这条命令看状态mokutil --sb-state如果输出Secure Boot enabledapt 装驱动的时候会弹一个界面让你设置一个 MOK 密码重启时会进入蓝底的 MOK 管理界面选 Enroll MOK输入那个密码才能让签名的内核模块被加载。很多人装完重启没进这个界面结果驱动一直不生效就是卡在这一步。如果这台机器不需要 Secure Boot进 BIOS 关掉最省事。然后确认 nouveau 是否被占用lsmod | grep nouveau如果 apt 安装过程中你没手动禁用通常安装脚本会自动处理。但如果是手动 runfile 安装必须先自己禁用。创建/etc/modprobe.d/blacklist-nouveau.confblacklist nouveau options nouveau modeset0再执行sudo update-initramfs -u重启后lsmod | grep nouveau应该没有任何输出。4.2 执行安装与重启验证推荐用自动方式它会挑出推荐版本sudo ubuntu-drivers autoinstall或者指定版本更可控sudo apt install -y nvidia-driver-535安装过程会编译 DKMS 模块输出里能看到Building for ...之类的行。装完重启sudo reboot重启是必须的因为要重新加载内核模块并让 X 用新驱动启动。4.3 验证清单这几条全过才算成功重启之后不要急着开应用按顺序验证nvidia-smi lsmod | grep nvidia glxinfo | grep -i opengl renderer cat /proc/driver/nvidia/versionnvidia-smi应该输出表格右上角显示Driver Version: 535.xx。lsmod应该看到nvidia、nvidia_uvm、nvidia_modeset、nvidia_drm这几个模块。glxinfo的 OpenGL renderer 应该是你的 Nvidia 卡型号而不是llvmpipe或者 Intel 核显。如果glxinfo没装用sudo apt install mesa-utils补上。笔记本双显卡的机器glxinfo显示 Intel 不一定是坏事看你是不是在用 PRIME 的核显模式这个后面细说。注意nvidia-smi能出表格但glxinfo显示 llvmpipe说明内核模块加载了但 X 没接上通常是 X 配置或者 glx 模块的问题属于下一节的排查范围。5. 实战二runfile 离线安装内网机器、完全断网的机器只能走这条路。核心思路是把安装包和各路依赖提前准备好然后在关掉图形界面的情况下静默安装。5.1 依赖与内核头文件不能少runfile 安装需要编译器、内核头文件、以及 DKMS如果你要注册的话sudo apt install -y gcc make dkms linux-headers-$(uname -r)如果机器完全离线这些 deb 包也得从别的同版本系统上下载好带过去。做法是在有网的机器上用相同 Ubuntu 版本apt-get install --download-only -o Dir::Cache::archives/tmp/nvpkgs build-essential dkms linux-headers-$(uname -r)把/tmp/nvpkgs整个拷到目标机器然后sudo dpkg -i /tmp/nvpkgs/*.deb。5.2 关掉图形界面再执行安装runfile 安装时如果 X 在跑它会报错退出。切到文本模式sudo systemctl isolate multi-user.target或者用sudo telinit 3。然后给安装包加执行权限并运行chmod x NVIDIA-Linux-x86_64-535.xx.xx.run sudo ./NVIDIA-Linux-x86_64-535.xx.xx.run安装向导里有两个选项值得注意一个是询问是否注册 DKMS强烈建议选是这样以后内核升级能自动重建另一个是 32 位兼容库除非你明确要跑 32 位程序一般可以不装。如果你的内核开了 Secure Boot 且不想关安装时还要给模块签名参数里加--module-signing-secret-key之类配置起来比较麻烦实务上大多数人会选择关掉 Secure Boot。5.3 离线环境用本地源代替单包安装如果内网机器不止一台与其一台台拷 deb不如搭个本地 apt 源。把下载好的 deb 放在一个目录里执行dpkg-scanpackages . /dev/null | gzip -9c Packages.gz然后在目标机器上把deb [trustedyes] file:/path/to/repo ./写进/etc/apt/sources.list.d/local.listapt update之后就能像在线一样apt install nvidia-driver-535。这个办法在多机部署场景下省的时间非常多而且以后加新包也方便。6. 高频报错逐个击破装完之后出问题其实集中在几个固定的报错上。把这几类搞清楚基本能覆盖九成情况。6.1 nvidia-smi has failed because it couldnt communicate with the nvidia driver这句话的意思是用户态工具找不到内核里的驱动。排查顺序从下往上先看模块加载没加载lsmod | grep nvidia。空的话sudo modprobe nvidia试一下看报什么错。看内核日志dmesg | grep -i nvidia。常见的是NVRM: API mismatch说明用户态库和内核模块版本不一致属于混装后遗症。看 DKMS 状态dkms status。如果显示nvidia, 535.xx, 5.15.0-xx, x86_64: installed是正常的如果内核那一栏对不上你当前uname -r说明没为当前内核编译。如果内核升级过手动重建sudo dkms autoinstall或者直接重装模块包sudo apt install --reinstall nvidia-dkms-535。还有一种情况是/dev/nvidia0这些设备节点没生成通常是模块加载失败的结果而不是原因跟着上面几步走就行。6.2 failed to load module glxserver_nvidia这个报错出现在 X 的日志里路径通常是/var/log/Xorg.0.log。它的直接含义是 X 在找 Nvidia 的 GLX 扩展模块时失败。根本原因有两个方向。一个是残留的/etc/X11/xorg.conf里写死了Driver nvidia但驱动实际没装好或者装的是别的版本。处理办法是把 xorg.conf 删掉或改名让 X 走自动探测sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak另一个是混装导致的 glx 模块冲突。/usr/lib/xorg/modules/extensions/下面可能同时有libglxserver_nvidia.so和其他来源的 glx 文件。这种情况最干净的办法是把所有 nvidia 相关包彻底清一遍再重新装一种方式的驱动不要在 apt 和 runfile 之间反复横跳。6.3 黑屏、循环登录、分辨率异常黑屏分两种。一种是完全不显示只能靠 CtrlAltF3 进 tty这通常是驱动和显卡不匹配或者 X 配置写错。另一种是能进登录界面输密码之后又弹回来也就是循环登录常见原因是 greeter 和显卡驱动不兼容或者 Home 目录下的某些配置文件权限出问题。进 tty 之后的急救步骤sudo apt purge -y ^nvidia-.* ^libnvidia-.* sudo apt autoremove -y sudo reboot清干净之后系统会回落到 nouveau图形界面能正常起来然后再按第 4 节的流程重装。这一步虽然粗暴但是能把状态拉回已知可用的起点。分辨率异常比如只能 1024x768、无法识别外接显示器多数是驱动没真正生效或者内核模块版本不匹配。先lsmod确认再看xrandr的输出里有没有你的显示器接口。6.4 内核升级之后驱动突然失效这是最典型的无声故障昨天还好好的今天apt upgrade之后重启屏保一出分辨率就掉nvidia-smi报错。原因就是新内核装上了但 DKMS 没为新内核重建模块。先看dkms status确认然后sudo apt install --reinstall linux-headers-$(uname -r) sudo dkms autoinstall如果编译报错去看/var/lib/dkms/nvidia/*/build/make.log里面会明确告诉你缺什么头文件或者哪个符号找不到。6.5 常见问题速查表现象最可能原因首选处理nvidia-smi 通信失败模块未加载/版本不匹配lsmod → modprobe → dkms autoinstallglxserver_nvidia 加载失败xorg.conf 残留或混装移除 xorg.conf清理重装循环登录greeter 与驱动不兼容进 tty 清驱动回 nouveau内核升级后失效DKMS 未为新内核重建装新内核头文件后 dkms autoinstall分辨率异常驱动未生效确认 lsmod 与 xrandrDKMS 编译失败缺内核头文件装 linux-headers-$(uname -r)7. 卸干净、换版本驱动维护的正确姿势换版本之前必须先卸干净这是所有经验里最重要的一条。别在一个已经装着 535 的系统上直接apt install nvidia-driver-550然后祈祷它能自动处理依赖解析确实会做替换但残留的配置文件、xorg.conf、以及手工放进去的 runfile 文件不会自动消失。7.1 apt 包和 runfile 的卸载方式不同apt 装的用sudo apt purge -y ^nvidia-.* ^libnvidia-.* ^cuda-drivers.* sudo apt autoremove -y用通配符清是为了把nvidia-driver-535、nvidia-dkms-535、nvidia-utils-535这些衍生包一起带走。runfile 装的要用它自己的卸载参数sudo ./NVIDIA-Linux-x86_64-535.xx.xx.run --uninstall如果安装包已经删了可以试sudo nvidia-uninstall这个脚本通常在/usr/bin/下。卸载完检查一下/usr/lib/xorg/modules/extensions/里还有没有libglxserver_nvidia.so有的话确认没被引用再删。7.2 换版本的正确顺序顺序不能乱我一般这样走卸载现有驱动重启回 nouveau。ubuntu-drivers devices重新确认目标版本。安装新版本。重启跑第 4.3 节的验证清单。中途不要跳步骤。特别是不要卸载完不重启就装新版本因为旧模块可能还挂在内存里新模块加载会失败。提示如果你用过 DDU 这类工具的思路核心逻辑是一样的——先让系统回到没有 Nvidia 驱动的干净状态再装新的。Linux 上对应的就是 purge 加重启。8. 驱动装完之后CUDA、ffmpeg 硬解、容器和笔记本双显卡驱动只是地基上面还有几层常见的关联需求这里一并说说。8.1 CUDA 版本和驱动的对应关系CUDA Toolkit 对驱动有最低版本要求但驱动是向下兼容的。大致对应关系是这样驱动分支支持的最高 CUDA47011.452512.053512.255012.4也就是说如果你装的是 535跑需要 CUDA 12.2 的工具没问题想跑要求 12.4 的可能就有麻烦。判断方法很简单nvidia-smi右上角那个CUDA Version就是当前驱动支持的最高版本。装 CUDA Toolkit 之后nvcc -V显示的是 Toolkit 自己的版本两者不一致是正常的。8.2 ffmpeg 调用 Nvidia 硬编解码想让 ffmpeg 用显卡而不是 CPU 转码先确认它有没有编进 nvenc 支持ffmpeg -hwaccels ffmpeg -encoders | grep nvenc如果有h264_nvenc、hevc_nvenc就能这么用ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset p4 -b:v 6M output.mp4解码侧可以用-c:v h264_cuvid。转码速度提升非常明显尤其是批量处理视频的时候CPU 占用能从满核降到个位数。要注意的是 nvenc 的画质在同码率下一般略逊于 x264 的 slow 预设追求体积的话需要自己调-cq参数。8.3 Docker 里把显卡透进去容器里用显卡需要 nvidia-container-toolkit。装好之后运行容器时加--gpus all就行。如果报错说找不到 runtime检查/etc/docker/daemon.json里有没有配置nvidiaruntime配好之后sudo systemctl restart docker。容器里nvidia-smi能用说明设备节点挂载正常。8.4 笔记本双显卡的 PRIME 切换笔记本通常有 Intel 核显和 Nvidia 独显两块。Ubuntu 上可以用prime-select切模式prime-select query sudo prime-select nvidia # 全程用独显 sudo prime-select on-demand # 按需切换省电prime-select切完要重启或重新登录。on-demand 模式下想让某个程序用独显可以用__NV_PRIME_RENDER_OFFLOAD1 __GLX_VENDOR_LIBRARY_NAMEnvidia 程序名。这个组合是我试过最省心的方式平时核显待机跑重活的时候手动调独显。9. 我踩过的坑与几条不讲道理的经验有几次经历印象特别深。一次是在一台 P600 的机器上官方源推荐的是 535但装完之后glxinfo一直显示 llvmpipe折腾了半天发现是之前有人在/etc/X11/xorg.conf里写死了BusID换驱动之后那个 BusID 变了X 找不到设备就退回了软件渲染。删掉 xorg.conf 立刻正常。还有一次是帮人处理一台骁龙笔记本上的显卡问题Intel HD Graphics 630 核显加 Nvidia 独显的组合循环登录。最后定位到是 greeter 的问题切了个显示管理器就好了。这种问题很难从驱动本身找原因因为nvidia-smi明明是好的。几条我总结下来的经验第一装驱动前一定要备份 xorg.conf 并记录当前状态第二优先用 apt不要贪新版本第三内网机器提前把内核头文件、dkms、build-essential 的 deb 包准备好不然你会在离线环境里卡很久第四内核升级之后第一件事就是跑一遍nvidia-smi别等出问题了才发现第五任何混装的诱惑都要抵制住一种方式装到底。如果你现在正卡在某一步把dmesg | grep -i nvidia和/var/log/Xorg.0.log里报错的那几行翻出来对照第 6 节的表格找基本都能定位到方向。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。