
1. 动手之前先摸清底细显卡、系统版本和引导模式Ubuntu 装 NVIDIA 显卡驱动这件事看起来只是一条apt install命令但实际上它是新手最容易把系统搞成黑屏的操作之一。我见过太多人照着某篇帖子抄了一句命令重启之后只剩一个光标在闪然后开始在另一台电脑上疯狂搜索ubuntu 黑屏怎么救。问题的根源不在于命令本身而在于每个人的机器都不一样显卡型号、Ubuntu 版本、内核版本、是否开 Secure Boot、是不是笔记本双显卡这五个变量只要有一个不同合适的做法就可能完全不一样。所以这篇内容不打算直接甩给你一条命令让你抄而是按我自己的习惯把整件事拆成先侦察、再选路线、然后执行、最后验证和收尾四步走。Ubuntu、NVIDIA、显卡驱动这三个词背后的坑绝大多数都集中在开头没侦察清楚和结尾没验证到位这两头。看完之后你应该能做到知道自己的卡该用哪个分支的驱动知道三条安装路线各自的代价知道装完之后用哪几条命令判断到底成没成也知道真黑屏了怎么从 TTY 里爬回来。1.1 用 lspci 确认到底是哪块显卡在跑显示很多人第一步就错了看到机器里有一块 NVIDIA 卡就直接装驱动。但如果你的显示器实际接在主板的视频接口上跑显示的是 Intel 核显那 NVIDIA 卡装完驱动也不会出现在nvidia-smi里——不是装错了是它压根没参与工作。所以第一件事永远是确认硬件长什么样lspci | grep -Ei vga|3d|display输出大概长这样注意厂商和型号两段信息00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04) 01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)看到两块卡说明这是典型的双显卡机器笔记本或者带核显的台式。这时候光有型号还不够还要看内核当前挂的是哪个驱动模块lspci -k | grep -A 3 -i vga\|3dKernel driver in use:这一行会告诉你真相。如果 NVIDIA 那块写的是nouveau说明现在跑的是开源驱动如果写的是nvidia说明驱动已经装上了如果什么都没有说明当前没有任何驱动接管它。这三种状态对应的下一步动作完全不同不看这一行就动手等于闭着眼睛换轮胎。1.2 系统版本、内核版本和 Secure Boot 三个变量确认完显卡接着要确认三个直接影响安装方式的变量。第一条是系统版本lsb_release -aUbuntu 20.04、22.04、24.04 三个 LTS 各自仓库里能直接拿到的驱动版本差别很大。20.04 长期停留在 470/525 附近22.04 常见的是 535/55024.04 则可能直接给到 550 或更新。你在网上看到别人apt install nvidia-driver-535一把成功换到自己机器上可能报Unable to locate package原因大概率就是系统版本不同仓库里根本没有这个包。第二条是内核版本uname -r这条信息在后面排查驱动装完重启就掉的问题时是决定性的。NVIDIA 的闭源驱动是通过 DKMS 机制针对当前内核现场编译模块的内核换了模块就得重编。如果你用的是 HWE 内核比如 22.04 上跑 6.5 或 6.8而驱动包还没跟上就会出现装的时候一切正常重启后nvidia-smi报错的经典现象。第三条也是最容易被忽略的一条是 Secure Boot 状态mokutil --sb-state如果是SecureBoot enabled那么任何未经签名的内核模块在系统启动时都会被拒绝加载。Ubuntu 仓库里的 NVIDIA 驱动包是签过名的但签名需要你在安装过程中手动确认导入一次也就是那个突然弹出来的蓝色界面。很多人按了下一步一路回车过去结果驱动模块被安全启动拦在门外表现为同一句报错nvidia-smi has failed because it couldnt communicate with the nvidia driver。这个坑我在后面第 4 章会专门展开怎么补救。1.3 留退路快照、TTY 和一条能救命的 grub 参数装驱动之前给自己留条后路这不是胆小是专业习惯。如果你的系统在虚拟机里比如 VMware 里装的 Ubuntu动手之前直接打一个快照出问题三十秒回滚这是成本最低的保险。物理机没法快照那至少要确认自己能在出问题时进到 TTY在图形界面正常的时候按Ctrl Alt F3能切到文本终端登录说明你手里有救命的绳子。反过来如果按下去毫无反应那你出问题时大概率只能靠 GRUB 菜单里加参数了。GRUB 里的救命参数有两个非常管用nomodeset让内核不要在启动早期接管显示模式用来绕过显卡驱动导致的启动黑屏。systemd.unitmulti-user.target直接进多用户文本模式跳过图形界面。装官方.run包时必须手动进这个模式出问题时它也是最快的逃生通道。具体操作是开机时按住Shift部分机型是连续按Esc呼出 GRUB 菜单光标停在默认项上按e编辑找到以linux开头的那一行在末尾追加参数然后Ctrl X启动。这个动作值得你在正常状态下先演练一遍真出事的时候手才不会抖。2. 三条安装路线的取舍apt 源、官方 PPA、官方 .runUbuntu 装 NVIDIA 驱动本质上只有三条路系统主仓库、第三方 PPA、NVIDIA 官网的.run安装包。这三条路没有绝对优劣只有场景匹配。新手最常见的错误是看到网上某篇帖子推荐.run就跟着上了结果后面每次内核升级都要手动重装一次驱动烦到想重做系统。先给一张对照表把三者的取舍说清楚后面再逐个拆。路线版本新鲜度上手难度适合谁后续维护成本系统主仓库保守通常是经过验证的旧分支最低一条命令只要求能用、不追新版本低跟随系统更新graphics-drivers PPA较新分支可选多中等需要加源桌面用户、需要较新驱动低仍然走 apt官方 .run 包最新官网发布即可用高需要关显示管理器特殊型号、离线环境、特定版本需求高内核升级后要手动重来2.1 apt 主仓库最稳代价是版本偏老主仓库这条路的价值在于和系统其他部分保持一致。驱动包、libglx、nvidia-settings、DKMS 模块全部由发行方打包测试过装完之后系统升级、内核升级都有现成的钩子帮你处理遇到问题也更容易在网上搜到同版本的人。操作上其实就一句话sudo apt update sudo apt install nvidia-driver-535但版本号不能瞎填。正确姿势是先让系统自己推荐ubuntu-drivers devices它会列出当前硬件可用的所有分支并在推荐项后面标上recommended。直接用这个推荐值绝大多数情况不会错。如果推荐的是 535那就装 535如果推荐的是 550那你硬装 535 也不是不行但要确认仓库里真的有这个包。这条路唯一的缺点就是滞后。比如你手上是 RTX 50 系这种新架构的卡主仓库里的驱动很可能还没跟上装完直接起不来图形界面。这种情况就得上后面两条路了。2.2 graphics-drivers PPA桌面用户的主流选择这个 PPA 是我在桌面环境里用得最多的一条路原因很简单它既保留了 apt 的便利性又能拿到比主仓库新的分支。加源、更新、安装三步sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update ubuntu-drivers devices sudo apt install nvidia-driver-550先ubuntu-drivers devices再安装顺序别搞反。加完源之后可选项会明显变多这时候再挑那个带recommended标记的或者挑你明确需要的分支。提示PPA 属于第三方源加之前最好确认自己的系统版本在它的支持列表里。加完源之后如果apt update报签名错误或者 404说明这个 PPA 还没适配你的版本直接sudo add-apt-repository --remove ppa:graphics-drivers/ppa撤掉回到主仓库那条路别硬扛。另外有一个包名上的细节值得记住nvidia-driver-XXX是元包它依赖nvidia-dkms-XXX和一堆用户态组件。真正干活的 DKMS 模块在nvidia-dkms-XXX里。后面排查问题时如果你看到dkms status里对应版本没有installed那就是模块没编出来装再多遍元包也没用。2.3 官方 .run 包什么时候才值得用它.run包我能不用就不用但确实有些场景绕不开显卡太新或者太老仓库和 PPA 里都没有匹配的分支需要某个非常具体的版本号比如复现某个已知问题的修复版本完全离线环境连内网源都没有需要和特定版本的 CUDA 工具链严格配套。用它的代价也很明确它绕过包管理器装完之后系统不知道你装了什么内核一升级模块不会自动重编你得下次开机发现黑屏了才想起来这事。而且它默认要求关闭图形界面才能安装操作步骤明显更多。所以我的建议是能用 apt 就用 aptPPA 能解决的就别碰.run。真的要用把它当成临时方案而不是长期方案并且一定记下包文件名卸载的时候要用同一份安装包sudo ./NVIDIA-Linux-x86_64-550.90.07.run --uninstall3. 走 PPA 这条路从选版本到装完重启的完整过程这一段把最主流的那条路走一遍完整的流程。我按实际操作的顺序写每一步都说明为什么这么做你可以对照自己的机器执行。3.1 用 ubuntu-drivers devices 读出版本推荐先把工具装上有些精简安装的镜像里没有这个包sudo apt update sudo apt install ubuntu-drivers-common然后看推荐ubuntu-drivers devices典型输出 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 modalias : pci:v000010DEd00001C82sv00001462sd00001111bc03sc00i00 vendor : NVIDIA Corporation model : GP107 [GeForce GTX 1050 Ti] driver : nvidia-driver-550 - third-party non-free recommended driver : nvidia-driver-535 - third-party non-free driver : xserver-xorg-video-nouveau - distro free builtin这里要读懂三件事。recommended是系统给你的默认建议通常是最新且通过验证的分支下面列出的其他分支是备选项用于版本回退最后那个nouveau是开源驱动装闭源驱动的时候会被自动屏蔽掉你不用手动去删。注意输出里出现的available版本列表依赖于你已经加了哪些源。如果你刚加完 PPA 就想看新版本必须先sudo apt update刷新索引否则看到的还是老列表。3.2 安装命令与 nouveau 的自动处理确认版本之后就是安装sudo apt install nvidia-driver-550这一步会顺带做几件事值得你知道它在干什么出问题时才好定位把nouveau加入黑名单写进/etc/modprobe.d/下的配置文件安装 DKMS 模块并针对当前内核现场编译重建 initramfs 镜像让黑名单在下次开机生效如果开着 Secure Boot把签名好的模块和 MOK 密钥准备就绪。安装过程里如果 DKMS 编译失败终端会明确报出来。这种情况八成是内核头文件缺失补一句就行sudo apt install linux-headers-$(uname -r) sudo dpkg-reconfigure nvidia-dkms-550linux-headers这个包看起来和显卡驱动没关系但它是 DKMS 编译的必要条件很多精简系统默认不装这是新手踩得最多的一类隐形坑。3.3 重启前要做的检查以及重启后看什么装完之后先别急着重启花三十秒确认模块确实编出来了dkms status正常情况下应该能看到类似nvidia/550.xx, 6.8.0-xx-generic, x86_64: installed的一行。如果显示built但没installed或者干脆没有这一行那就要先解决编译问题再重启否则就是白跑一趟。确认没问题后重启sudo reboot重启之后用三条命令验证nvidia-smi cat /proc/driver/nvidia/version lsmod | grep nvidia第一条最直观输出一张表格包含显卡型号、驱动版本、显存占用、当前温度和正在使用显卡的进程。第二条读的是内核里加载的驱动版本号用来和nvidia-smi显示的版本互相印证。第三条应该能看到nvidia、nvidia_modeset、nvidia_uvm、nvidia_drm这几个模块同时lsmod | grep nouveau应该是空的——如果 nouveau 还在被加载说明黑名单没生效通常需要sudo update-initramfs -u之后再来一次。3.4 Secure Boot 开着的机器MOK 蓝屏那一步别跳过如果你在安装过程中看到过一个蓝底白字的界面标题类似 Perform MOK management那说明系统在让你确认导入密钥。这个界面出现的时候正确的操作顺序是选Enroll MOK选Continue选Yes然后输入你刚才设置的那个一次性密码选Reboot。整个过程只发生一次之后模块就能在 Secure Boot 下正常加载。我见过有人在这里直接按Esc退出了结果驱动明明装好了nvidia-smi就是报错折腾了两个小时才发现是密钥没导入。如果已经错过了可以手动补sudo mokutil --import /var/lib/shim-signed/mok/MOK.der执行后会让你设置一个临时密码重启时会在开机界面再弹一次 MOK 管理界面按上面同样的流程走一遍即可。4. 装完没生效怎么办四类高频故障的排查链路这一章是全文最值钱的部分。上面那些步骤按部就班走下来大概七成的人能一次成功剩下三成会撞上下面这几类问题。我把排查链路完整写出来你照着走别跳步。4.1 nvidia-smi 报 couldnt communicate with the nvidia driver 的含义拆解完整报错是这句NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.很多人看到 make sure that the latest NVIDIA driver is installed 就去重装驱动装了三遍还是一样。这句话只在说一件事nvidia-smi这个用户态程序想和内核里的驱动模块通信但没找到对方。至于为什么没找到它有至少五种可能必须一个个排除检查项命令期望结果不对说明什么模块是否加载lsmod | grep nvidia看到 nvidia 等模块驱动没被加载模块是否编译成功dkms statusinstalled针对当前内核没编出来安全启动状态mokutil --sb-state密钥已导入或已关闭模块被 Secure Boot 拦下内核日志dmesg | grep -i nvidia无严重错误有具体失败原因显卡是否被接管lspci -k | grep -A 3 -i nvidiaKernel driver in use: nvidia仍是 nouveau 或空按这个表从上到下走一遍绝大多数情况能在第三步或者第五步定位到问题。其中dmesg那一步信息量最大如果看到module verification failed或者Key was rejected by service基本就是安全启动的问题如果看到NVRM: API mismatch说明用户态库和内核模块版本对不上这通常是装了两个不同分支的驱动残留导致的。4.2 黑屏、卡登录界面、只剩光标从 TTY 一路退回去比nvidia-smi报错更麻烦的是根本进不去图形界面。表现有三种全黑只有光标在闪、卡在登录界面反复重启、屏幕分辨率变成低分辨率的文本模式。第一步永远是尝试切 TTYCtrl Alt F3。如果能进去并登录恭喜问题就降级成普通故障了。进去之后先看两个日志journalctl -b -1 -p err dmesg | grep -iE nvidia|nouveau|drm-b -1是看上一次启动的错误日志这在当前这次启动图形界面都没起来的情况下特别有用。如果 TTY 也进不去就得上 GRUB 参数。重启在 GRUB 菜单按e在linux那行末尾加上nomodesetCtrl X启动。能进桌面之后第一件事是把驱动卸干净再重来sudo apt purge ^nvidia-.* sudo apt autoremove sudo update-initramfs -u sudo reboot提示apt purge ^nvidia-.*这个通配符会连带卸掉nvidia-prime、nvidia-settings这些附属包笔记本上还会影响显卡切换。这是正常的重装驱动的时候它们会被一起带回来。但如果你的机器上装过nvidia-cuda-toolkit之类的开发包它也会被误伤卸载前先apt list --installed | grep nvidia看一眼列表心里有数。卸干净重启之后系统会用回 nouveau图形界面应该恢复正常。然后换一个分支重新装比如原来装 550 不行就换 535。新旧架构的卡和分支之间存在兼容性差异换一版就好是很常见的事。4.3 报错 glxserver_nvidia 加载失败和 Wayland 会话的关系另一个高频报错是这一句nvidia: failed to load module glxserver_nvidia (module does not exist, 0)这句话的关键词是glxserver_nvidia它是 Xorg 的 GLX 扩展模块只跟 X11 会话有关。所以出现这个报错第一件要确认的是当前会话类型echo $XDG_SESSION_TYPE如果输出是wayland那这个报错本身可能只是噪音图形界面其实是好的NVIDIA 驱动会走nvidia-drm这条路。如果输出是x11而 GLX 模块缺失那就是装驱动的时候用户态库没装全通常是元包没装完整导致的重装一次元包即可sudo apt install --reinstall nvidia-driver-550如果你确实需要切回 X11老版本的显卡切换工具、某些远程桌面、部分录屏软件在 Wayland 下表现不佳改一个配置就行sudo nano /etc/gdm3/custom.conf把#WaylandEnablefalse前面的注释去掉保存重启。反过来如果你在较新的驱动上想启用 Wayland就别去动这一行让它保持注释状态即可。近几年的驱动版本对 Wayland 的支持已经相当可用了特别是带显式同步支持的新版本日常办公基本感觉不到差别。4.4 双显卡笔记本与老卡、新卡的版本对不上版本选错是最隐蔽的一类问题因为它不报错只是某些东西不好使。下面这张表是我自己整理的经验对应关系具体到你的型号还是以官网驱动下载页的查询结果为准显卡架构代表型号大致可用分支备注KeplerGTX 600/700 系不含 750470 分支为最后支持再新的分支直接不支持MaxwellGTX 750/750 Ti、900 系580 分支为最后支持老机器上别盲目追新Pascal / VoltaGTX 10 系、部分专业卡同上可用较新分支Turing 及之后RTX 20 系及以后持续更新可以选-open结尾的开源内核模块版本BlackwellRTX 50 系需要较新的分支必须用 open 内核模块版本-open这个后缀值得单独说一句。NVIDIA 近几年提供了开源内核模块版本包名形如nvidia-driver-550-open。Turing 及之后的架构可以选它新架构的卡甚至必须用它。如果你在 24.04 上装 50 系的卡装完起不来先确认自己装的不是普通闭源版本。双显卡笔记本还多一层显卡切换。默认可能是按需切换模式想强制用独显跑某个程序时prime-select query # 查看当前模式 sudo prime-select on-demand # 按需切换改完需要注销重新登录才生效。有些笔记本外接显示器只认独显直连的接口切换模式之后外屏才有信号这部分和驱动版本关系不大属于硬件走线的限制。5. 装稳之后版本锁定、DKMS 维护与硬件加速验证驱动跑起来只是第一步后面还有几件事做完才算真正装稳。5.1 内核升级把驱动弄丢DKMS 在做什么DKMS 的全称是 Dynamic Kernel Module Support它做的工作很简单每次内核更新自动把 NVIDIA 的模块针对新内核重新编译一遍。装驱动的时候你看到的那些编译过程就是它在干活。理解这一点之后很多现象就解释得通了。为什么用 apt 装的驱动能扛住内核升级而.run包装的扛不住因为前者注册进了 DKMS后者没有。为什么升级内核之后偶尔会掉驱动因为 DKMS 编译失败但系统还是照常升级了内核下次启动新内核时没有对应模块。手动确认和修复的方法dkms status sudo dkms autoinstall第二条命令会扫描当前内核并尝试重新编译所有注册过的模块是内核升级后驱动失效时最快的一招。如果还不行重装一次 DKMS 包sudo apt install --reinstall nvidia-dkms-550注意dkms status里显示的版本号后面跟着内核版本一台机器上有多个内核时会有多行。只要当前uname -r对应的那一行是installed就没问题其他行的built状态不用管。5.2 nvidia-smi 里的 CUDA Version 不是你装了 CUDAnvidia-smi右上角那个CUDA Version: 12.4是全网被误解最多的一行字。它不代表你装了 CUDA 12.4它表示的是当前这个驱动版本所能支持的最高 CUDA 运行时版本。你机器上一个 CUDA 包都没装这一行照样会显示。真正判断有没有装 CUDA 工具链要用这几条which nvcc nvcc --version ls /usr/local/ | grep cudanvcc找不到就是没装 CUDA Toolkit跟驱动没关系。很多人因为看到nvidia-smi里写了 CUDA 版本就以为装驱动等于装 CUDA然后在编译项目的时候对着nvcc: command not found一脸茫然。反过来说如果项目明确要求某个 CUDA 版本那就要注意版本匹配驱动支持的 CUDA 上限必须大于等于你装的 CUDA 版本。装了个老驱动配新 CUDA运行时会直接报错这时候要么升驱动要么降 CUDA。5.3 用 ffmpeg 的 NVENC 做一次真实负载验证nvidia-smi显示正常只能说明驱动加载成功不能说明视频编码、计算这些功能真的可用。想确认驱动是全面可用最省事的验证方式是用 ffmpeg 跑一次硬件编码。先看当前 ffmpeg 有没有编译进 NVENC 支持ffmpeg -hide_banner -hwaccels ffmpeg -hide_banner -encoders | grep nvenc-hwaccels会列出可用的硬件加速方式-encoders里的h264_nvenc、hevc_nvenc是硬件编码器。两者都有的话跑一条转码命令ffmpeg -i input.mp4 -c:v h264_nvenc -preset p4 -b:v 6M -c:a copy output.mp4跑的时候另开一个终端执行nvidia-smi能看到一个编码进程挂在列表里说明整条链路是通的驱动、用户态库、编解码运行时全部正常。如果这里报Cannot load libnvidia-encode.so.1说明用户态编码库没装全补装元包一般能解决。这一步我强烈建议做一次因为它同时验证了驱动、CUDA 兼容层和视频加速三块能力比单纯看nvidia-smi的输出有意义得多。5.4 换版本、彻底卸载和离线安装的注意事项最后说说三种边角但很常见的场景。第一种是换版本。apt 路线的换版本很简单卸旧装新即可注意两者之间要重启一次别连着一口气做完sudo apt purge ^nvidia-.* sudo apt autoremove sudo reboot sudo apt install nvidia-driver-535 sudo reboot中间那次重启是为了让系统在没有 NVIDIA 模块的情况下干净地跑起来把残留的内存映射清掉。第二种是彻底卸载.run包装的驱动。必须用同一份安装包sudo ./NVIDIA-Linux-x86_64-550.90.07.run --uninstall安装包如果删了就得重新下载一模一样版本的包才能卸载这也是我不推荐.run的原因之一。第三种是离线安装。如果目标机器不能联网最省事的办法是在一台系统版本完全一致的联网机器上把 deb 包和依赖一起下下来sudo apt-get install --download-only --reinstall \ -o Dir::Cache::archives./nvidia-pkgs \ nvidia-driver-535注意--reinstall配合--download-only才会把已经存在的依赖也一并抓下来光用apt download只下一个包依赖还得自己一个个凑很容易在离线机器上卡住。把整个目录拷过去sudo dpkg -i *.deb最后用sudo apt -f install收尾补齐缺失项。还有一个容易被忽略的场景虚拟机里的 Ubuntu。VMware 或者 VirtualBox 里如果没做显卡直通虚拟机看到的是一块虚拟显卡lspci里根本不会出现 NVIDIA 的设备。这种情况下你装完驱动nvidia-smi照样报那句熟悉的错误因为物理卡压根没交给虚拟机。这不是操作问题是架构问题得先配置硬件直通再谈装驱动。装了这么多台机器我自己最大的体会是NVIDIA 驱动这块慢就是快。花五分钟把显卡型号、系统版本、内核版本、Secure Boot 状态查清楚比出问题之后花两小时救黑屏划算得多。另外养成一个习惯每次装完驱动之后立刻执行一遍nvidia-smi、dkms status、lsmod | grep nvidia这三条命令把正常的输出记下来。等你哪天真的遇到故障手里有一份正常状态长什么样的参照定位问题的速度会快上好几倍。