硬件:780M集显MST外接屏幕启动黑屏问题

结论(2026-10-07,NixOS 26.05 / 内核 6.18.54 / X11 + Plasma 6.6.6)

"启动黑屏"在本机(780M 核显 + 4060 外接,OcuLink)不是同一个问题,实测可分成四类,现象都是黑的但机理与修法完全不同。逐条如下(每条一行)。

四类黑屏对照

编号现象触发条件机理修法
B01开机后 greeter 黑屏,等到登录界面始终不出现SDDM 的 greeter 跑 Wayland,且外接屏(2560x1440)接着KWin-Wayland 的 DRM 后端反复报 kwin_wayland_drm: Atomic modeset test failed! 设备上没有空间 (ENOSPC) → greeter 什么都画不出来;拔掉外接屏后输出集变小、原子提交能过,登录界面才出现services.displayManager.sddm.wayland.enable = false(greeter 走 X11;登录后仍可选 Plasma Wayland 会话)
B02X 直接起不来(登录界面都不出现,黑屏),TTY 里能看到 X 已退出services.xserver.videoDrivers 里含 modesettingmodesetting 生成的 Device 段不带 BusID → X 去抓 PCI 首块显示卡(eGPU 上电后 = 01:00.0,即 4060)→ modeset(G0): Failed to create pixmap → failed to create screen resources → X 退出services.xserver.videoDrivers = [ "amdgpu" "nvidia" ](第一屏用核显自家 DDX),并把 prime.amdgpuBusId / nvidiaBusId 钉死
B03"全黑",连光标都没有,但机器活着(键盘有反应)显示被切到空的 VT(本次是 tty3),而会话在 tty1不是故障,是活跃 VT 上没有内容;journal 有 AIGLX: Suspending/Resuming AIGLX clients for VT switch 佐证loginctl activate 4,或键盘 Ctrl+Alt+F1 切回会话所在 VT
B04外接屏不是黑而是冻在开机日志/最后画面外接屏接在 4060 的 DP 上X 里只有 1 个 provider,nvidia 的 Device 段没被任何 Screen 引用也无 Inactive → nvidia 驱动从未实例化 → 4060 的 connector 永远 disabled,屏上留的是开机阶段 fbcon 写在 nvidia-drmdrmfb 上的残帧hardware.nvidia.prime.reverseSync.enable = true(生成 Inactive + AllowNVIDIAGPUScreens,SDDM 的 Xsetup 执行 xrandr --setprovideroutputsource NVIDIA-G0 "<AMD>" + xrandr --auto)→ 详见「多屏扩展时内屏竖块乱序问题」(JRIPwT8qe7O2) 与「oculink 4060显卡在linux驱动安装」(z2306yyV0zRz)

黑屏时的自救与定位(不看画面也能定位)

  1. 先切会话 VT:Ctrl+Alt+F1(本机会话固定在 tty1)。若显示停在空 VT,这一步就恢复了。
  2. 仍黑则从 TTY 登入(Ctrl+Alt+F3),先看显示管理器:
    journalctl -b -u display-manager --no-pager | grep -iE 'xserver-wrapper|\(EE\)|Fatal|no screens'
    判断口径:出现 failed to create screen resources 或 Failed to create pixmap → 是 B02;出现 kwin_wayland_drm + ENOSPC → 是 B01。
  3. 确认 X 是否活着:ps -eo pid,cmd | grep -E 'X |sddm';xrandr --listproviders 应为 2 个(AMD Radeon 780M + NVIDIA-G0),只有 1 个说明 4060 那路没接进来(B04)。
  4. 改配置前先预检,避免又黑一次:用候选 xserver.conf 起临时 X,只认日志不听天由命:
X :1 -config <候选的 xserver.conf> -logfile /tmp/pf.log -ac -noreset -nolisten tcp -novtswitch &
sleep 14
grep -c 'failed to create screen resources\|Failed to create pixmap\|no screens found' /tmp/pf.log   # 必须为 0
kill %1

本机既有做法:改 NixOS 配置一律走「stage 副本 → build → 用新 xserver.conf 在 :1 预检(同一套断言)→ 干净才写盘 + nixos-rebuild switch」,预检不干净就完全不落地(脚本见 ~/.hermes/cache/scratch/apply-x-fix*.sh)。

最终生效的相关配置(本机 /etc/nixos/hardware-configuration.nix)

services.xserver.videoDrivers = [ "amdgpu" "nvidia" ];     # B02: 不带 modesetting
hardware.nvidia = {
  open = true;
  modesetting.enable = true;
  package = nvidiaPkg;                                      # 595.71.05 钉版
  prime = {
    offload.enable = true;
    reverseSync.enable = true;                              # B04: 4060 输出接进核显主屏
    amdgpuBusId = "PCI:102:0:0";
    nvidiaBusId = "PCI:1:0:0";
  };
};
services.displayManager.sddm.wayland.enable = false;        # B01: greeter 走 X11

判据汇总(怎么认定修好了)

项判据
B01登录界面(greeter)能出现,且 journal 里不再有 kwin_wayland_drm/ENOSPC
B02X 存活(systemctl is-active display-manager = active,有 X 进程),日志中 failed to create screen resources 与 Failed to create pixmap 计数为 0
B03Ctrl+Alt+F1 能回到桌面;loginctl 显示会话 VT = tty1
B04xrandr --listproviders 有 2 个 provider;外接屏输出(DP-1-2 等)能被 enable 出画面

发生时的环境

项值
机型 / 屏GPD G1619-04,内屏 2560x1600;外接屏 2560x1440(接 4060 的 DP)
系统NixOS 26.05.11045.774debe7a0d1,内核 6.18.54(linuxPackages_6_18)
会话X11 + KDE Plasma 6.6.6(startplasma-x11),SDDM(greeter 走 X11)
显示侧reverse PRIME(provider NVIDIA-G0),4060 钉版 595.71.05
本机世代gen34 = 20261007-1554:双显卡驱动成功(当前默认)