
1. 双显卡笔记本装完驱动就循环登录问题到底出在哪如果你手上有一台带核显加独立显卡的笔记本兴冲冲装完 Ubuntu 18.04接着按网上教程装 NVIDIA 驱动重启之后卡在登录界面——输入密码屏幕一黑又弹回登录界面如此反复——那你不是一个人。这个现象在双显卡机器上出现的概率高得离谱尤其是那些出厂默认开启核显输出、独显按需切换的机型。我前后在三四台不同品牌的双显卡笔记本上踩过这个坑每次的表现都略有差异有的是装完驱动直接黑屏有的是登录后桌面一闪就退回还有的是外接显示器能亮但内屏死活进不去。折腾多了才明白循环登录只是表象真正的病根在于驱动模块加载顺序、显示管理器与显卡输出通道之间的错配。这篇文章面向的是这样一类人你有一台核显加 NVIDIA 独显的笔记本想在这台机器上跑 Ubuntu 18.04需要用到独显做计算或者图形加速但被循环登录、黑屏、驱动装不上这些问题卡住了。我会把整个排查链路、每一步背后的原理、以及我实际验证过的操作步骤完整讲清楚。不管你是刚接触 Linux 的新手还是装过几次驱动但总在双显卡机器上翻车的老手都能从里面找到能直接抄的配置和判断方法。先说一个反直觉的结论循环登录往往不是驱动没装好而是驱动装“太全”了。很多人习惯性地把 NVIDIA 驱动、CUDA、cuDNN 一股脑全装上结果系统在启动时不知道该用核显还是独显来驱动显示管理器两个驱动抢同一个显示输出登录会话刚建立就崩溃于是退回登录界面。理解这一点后面的所有操作才有方向。2. 双显卡机器上驱动加载的底层逻辑2.1 核显和独显在 Linux 下是怎么分工的要搞懂循环登录得先明白双显卡机器在 Linux 下的显示输出是怎么走的。绝大多数笔记本的屏幕物理上是接在核显上的独显负责渲染渲染完的画面通过一个叫 PRIME 的机制“搬运”到核显再输出到屏幕。这个设计是为了省电——日常办公用核显需要性能时才唤醒独显。问题就出在这个“搬运”环节。NVIDIA 的闭源驱动和开源的 nouveau 驱动对 PRIME 的支持方式不一样而 Ubuntu 18.04 默认装的是 nouveau。当你手动装上 NVIDIA 闭源驱动后如果配置不当系统可能让独显直接去驱动显示管理器但屏幕又物理接在核显上两边对不上显示管理器启动失败于是循环登录。我实测下来判断当前是哪张卡在驱动显示最直接的办法是在能进系统的时候比如用 recovery 模式或者 tty跑一句lspci -k | grep -A 2 -E (VGA|3D)输出里会显示每张显卡当前绑定的内核驱动。如果 NVIDIA 那张卡绑的是nvidia核显绑的是i915说明驱动都加载了如果 NVIDIA 绑的是nouveau或者干脆没绑那就是驱动没生效。这个命令是我每次排查的第一步比瞎猜快得多。2.2 循环登录的本质显示管理器启动失败后的重试登录界面本身是一个叫显示管理器的程序Ubuntu 18.04 默认是 GDM3。你输入密码后GDM3 会尝试启动一个图形会话。如果这个会话在初始化显卡时失败GDM3 不会报错给你看而是默默重启会话于是你又看到登录界面。这就是循环登录的真相。那为什么显卡初始化会失败常见原因有三个一是 NVIDIA 驱动模块没正确编译进内核二是驱动模块加载了但和核显的 PRIME 配置冲突三是 Secure Boot 拦截了未签名的驱动模块。这三个原因对应的现象和排查方法完全不同后面我会逐个拆。提示循环登录时不要急着重装系统。先按 CtrlAltF2 切到 tty 终端用你的账号密码登录进去很多排查工作在这里就能做。如果 tty 也进不去那才需要考虑 recovery 模式。2.3 为什么 Ubuntu 18.04 特别容易出这个问题Ubuntu 18.04 用的是 4.15 内核这个版本对新一代 NVIDIA 显卡和 PRIME 的支持还在完善中。加上 18.04 的软件源里 NVIDIA 驱动版本偏旧很多人会去官网下.run文件手动装而.run安装方式最容易和系统自带的 nouveau 冲突。相比之下用apt从官方源装驱动虽然版本旧一点但和系统的集成度高得多出问题的概率小很多。我的建议很明确能用 apt 装就别用 .run。除非你有特殊需求必须用某个特定版本的驱动否则 apt 源里的版本足够日常使用而且升级、卸载都干净。这一点在后面选型章节还会细说。3. 装驱动前的准备工作这几步不做后面必翻车3.1 确认显卡型号和当前驱动状态动手之前先把家底摸清楚。跑这两条命令lspci | grep -E (VGA|3D) ubuntu-drivers devices第一条列出你的显卡硬件第二条会告诉你系统推荐装哪个版本的 NVIDIA 驱动。ubuntu-drivers devices这个工具在 18.04 上是自带的它会根据你的显卡型号给出推荐版本比如nvidia-driver-390或者nvidia-driver-470。记下这个推荐版本号后面装驱动就用它。我遇到过有人显卡是较新的型号但 18.04 源里只有旧驱动装完各种问题。这种情况要么升级系统要么去 NVIDIA 官网查这个型号支持的最低驱动版本再决定怎么办。别硬装不匹配的版本那是给自己找麻烦。3.2 关闭 Secure Boot 还是给驱动签名Secure Boot 是 UEFI 的一个安全机制它会拦截没有签名的内核模块。NVIDIA 的闭源驱动模块默认没有签名所以 Secure Boot 开着的时候驱动模块加载会被拒绝表现就是装完驱动重启后显卡没生效甚至循环登录。两个选择一是进 BIOS 关掉 Secure Boot简单粗暴二是给驱动模块签名保留 Secure Boot。我一般推荐关掉因为签名流程在 18.04 上比较繁琐而且对大多数个人用户来说 Secure Boot 带来的安全收益有限。关掉的方法因机器而异一般在 BIOS 的 Security 或 Boot 选项卡里找到 Secure Boot 设为 Disabled。注意关 Secure Boot 之前确认你的系统不是必须依赖它启动的。有些机器开了 Secure Boot 才能正常引导关掉后反而进不去系统。这种情况就得走签名路线或者保持 Secure Boot 开启但用 MOK 机制注册密钥。3.3 禁用 nouveau 驱动的正确姿势nouveau 是 NVIDIA 显卡的开源驱动Ubuntu 默认用它。装闭源驱动前必须禁用它否则两个驱动会打架。禁用方法是创建一个配置文件sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo update-initramfs -u第一行把 nouveau 加入黑名单第二行关闭它的 modeset 功能第三行更新 initramfs 让配置生效。做完这三步必须重启重启后用lsmod | grep nouveau确认没有输出才说明 nouveau 真的被禁用了。这里有个坑有些人只做了 blacklist 没做update-initramfs结果重启后 nouveau 还在。因为 initramfs 是启动时加载的临时文件系统不更新它黑名单配置不会在启动早期生效。这个细节很多教程都不提但恰恰是导致失败的高频原因。4. 驱动安装的三种路线与选型理由4.1 apt 源安装最稳但版本受限这是我最推荐的路线尤其对双显卡机器。命令很简单sudo apt update sudo apt install nvidia-driver-470把 470 换成ubuntu-drivers devices推荐的那个版本号。装完重启大概率就能正常进系统。apt 安装的好处是驱动和系统的集成已经做好了包括 DKMS 自动编译模块、PRIME 配置、显示管理器适配这些都不用你操心。缺点是版本可能偏旧。18.04 的源里比较新的是 470 系列如果你需要更新的特性比如某些新显卡的支持就得走别的路线。但对绝大多数场景470 够用了。4.2 官方 .run 文件安装灵活但坑多去 NVIDIA 官网下载对应型号的.run文件然后sudo telinit 3 sudo sh NVIDIA-Linux-x86_64-xxx.runtelinit 3是切换到文本模式因为.run安装器不能在图形界面运行。安装过程中它会问你要不要装 32 位兼容库、要不要更新 X 配置这些选项选错就容易出问题。.run安装最大的坑是它不会自动处理 DKMS内核升级后驱动可能失效而且卸载不干净会残留文件下次装 apt 版本时冲突。我个人的经验是除非 apt 源里实在没有你需要的版本否则别碰.run。4.3 混合方案apt 装主驱动加手动补丁还有一种折中方案用 apt 装驱动但手动调整 PRIME 配置或者补装某些组件。比如 apt 装的驱动默认可能没启用 PRIME 同步你可以手动配置。这个方案适合对系统比较熟、知道自己要什么的人。新手不建议一上来就走这条路容易把自己绕进去。三种路线的对比如下安装方式优点缺点适用场景apt 源集成度高、升级方便、卸载干净版本偏旧绝大多数双显卡笔记本.run 文件版本灵活、可选最新易冲突、升级麻烦apt 源无所需版本时混合方案兼顾稳定与定制配置复杂有特定需求的老手5. 循环登录的完整排查链路5.1 第一步确认能不能进 tty循环登录发生后第一件事是按 CtrlAltF2 到 F6 中的任意一个尝试切到文本终端。如果能进去并登录成功说明系统本身没坏只是图形会话起不来问题范围缩小到显卡驱动和显示管理器。如果 tty 也进不去那可能是驱动把内核搞崩了需要进 recovery 模式或者用 Live USB 修复。进 tty 后先看日志cat /var/log/Xorg.0.log | grep -i error journalctl -b | grep -i nvidiaXorg 日志里的错误能直接告诉你 X 服务为什么起不来常见的有“Failed to initialize the NVIDIA kernel module”或者“No devices detected”。journalctl 里能看到驱动模块加载的详细过程包括失败原因。5.2 第二步检查驱动模块是否真的加载了在 tty 里跑lsmod | grep nvidia nvidia-smi如果lsmod没有任何 nvidia 相关输出说明驱动模块根本没加载。原因可能是 Secure Boot 拦截、模块没编译成功、或者被 nouveau 占着。如果lsmod有输出但nvidia-smi报错说明模块加载了但和硬件通信有问题通常是版本不匹配。我遇到过一次lsmod显示 nvidia 模块在但nvidia-smi报“No devices were found”。查了半天发现是 BIOS 里独显被设成了“节能模式”系统根本没给独显供电。进 BIOS 改成“高性能”或者“自动”就好了。这种硬件层面的设置很容易被忽略。5.3 第三步看显示管理器到底在报什么错GDM3 的日志在/var/log/gdm3/或者用journalctl -u gdm3看。重点找会话启动失败的那几行。如果看到和 GLX、EGL 相关的错误基本可以确定是显卡驱动和显示管理器的接口对不上。这时候可以临时换个显示管理器试试比如装个 lightdmsudo apt install lightdm sudo dpkg-reconfigure lightdm如果换成 lightdm 后能进桌面说明问题出在 GDM3 和 NVIDIA 驱动的兼容性上。这个判断方法很实用能帮你快速定位是驱动问题还是显示管理器问题。5.4 第四步PRIME 配置是否指向了正确的输出双显卡机器上PRIME 的配置决定了画面从哪张卡输出。检查/etc/X11/xorg.conf或者/usr/share/X11/xorg.conf.d/下的配置文件看有没有把 NVIDIA 设成了主输出。如果屏幕物理接在核显上但配置让独显做主输出就会黑屏或循环登录。正确的做法通常是让核显负责输出独显负责渲染。可以用xrandr --setprovideroutputsource来设置或者在 X 配置里明确指定。这个配置在不同机器上差异较大需要结合具体硬件调。6. 我实际验证过的修复方案6.1 方案一彻底清理后重装 apt 驱动这是最通用、成功率最高的方案。步骤如下sudo apt purge nvidia-* sudo apt autoremove sudo apt install nvidia-driver-470 sudo reboot关键是第一步要 purge 干净把之前装的所有 NVIDIA 相关包都删掉包括.run安装残留的库文件。purge 完重启一次确认系统用 nouveau 能正常进桌面再装新驱动。这个“先回到干净状态”的思路很重要很多人直接在乱糟糟的环境上重装问题依旧。6.2 方案二手动指定 PRIME 输出源如果驱动装好了但循环登录依旧试试手动配置 PRIME。在 tty 里创建/etc/X11/xorg.conf.d/10-nvidia-prime.confSection OutputClass Identifier nvidia MatchDriver nvidia-drm Driver nvidia Option PrimaryGPU no EndSectionPrimaryGPU设为no是告诉系统别让独显做主输出交给核显。这个配置在我测试的几台机器上都有效尤其是那些屏幕接核显的机型。6.3 方案三内核参数里加 nomodeset 应急如果连 tty 都进不去可以在 GRUB 启动菜单里按e编辑启动项在linux那行末尾加nomodeset然后 CtrlX 启动。nomodeset会禁用内核的显卡模式设置让系统用最基本的显示方式启动通常能进桌面。进去之后再慢慢修驱动。nomodeset是应急手段不是长久之计因为它会禁用显卡加速。但作为救援入口它非常有用。修好驱动后记得把这个参数去掉。6.4 方案四换用开源驱动或软件渲染兜底如果折腾半天独显驱动就是搞不定而你的工作又不需要独显性能可以干脆用 nouveau 或者软件渲染。删掉 NVIDIA 驱动让系统回到 nouveau虽然性能差但至少能用。对于只是写代码、跑跑轻量任务的场景这个选择完全合理。7. 装完之后必须做的验证和收尾7.1 确认独显真的在工作装完驱动重启进桌面后跑nvidia-smi glxinfo | grep OpenGL renderernvidia-smi能列出显卡信息就说明驱动正常。glxinfo看当前 OpenGL 渲染器是哪张卡如果是 NVIDIA 说明独显在参与渲染。这两个命令是我每次装完驱动的验收标准缺一不可。7.2 处理内核升级后的驱动失效用 apt 装的驱动走 DKMS内核升级后会自动重新编译模块一般不用管。但如果你用的是.run装的内核一升级驱动就失效得手动重装。这就是我反复强调优先用 apt 的原因之一。7.3 备份一份能用的配置驱动调通之后把/etc/X11/xorg.conf.d/下的配置、/etc/modprobe.d/里的黑名单文件都备份一份。下次系统出问题或者重装直接恢复这些配置能省大量时间。我自己的习惯是把这些文件放到一个专门的目录配上说明文档换机器时直接拷过去。8. 几个容易忽略的细节和我的经验之谈第一个细节是外接显示器的影响。有些双显卡机器接着外接显示器时显示输出的拓扑会变导致原本能用的配置失效。如果你循环登录发生在接了外显之后先拔掉外显再试。这个我踩过查了半天驱动结果是外显的锅。第二个细节是BIOS 里的显卡模式。不少笔记本 BIOS 里有“独显直连”和“混合输出”的选项。独显直连模式下屏幕直接接独显这时候 PRIME 配置的逻辑完全不同。搞清楚你的机器是哪种模式配置才能对。这个选项的名字因厂商而异有的叫“Graphics Mode”有的叫“Display Mode”。第三个细节是驱动版本和 CUDA 版本的对应关系。如果你装驱动是为了跑 CUDA那驱动版本不能随便选得和你要用的 CUDA 版本匹配。比如 CUDA 11.x 需要 450 以上的驱动。这个对应表在 NVIDIA 官方文档里有装之前查一下免得装完发现 CUDA 跑不起来又得重装。第四个细节是日志里的时间戳。排查循环登录时日志里会有大量历史记录用journalctl -b只看本次启动的日志能过滤掉干扰信息。这个技巧能让你在几百行日志里快速找到关键错误。最后说个我自己的体会双显卡机器装驱动耐心比技术重要。每次只改一个变量改完重启验证记录下每次的结果。最怕的是一次改一堆配置出了问题不知道是哪个引起的。我现在的习惯是准备一个笔记本每步操作和结果都记下来翻车了能快速回退。这套方法看起来笨但在我折腾过的所有机器上它都是最快到达终点的路径。