结论(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 会话) |
| B02 | X 直接起不来(登录界面都不出现,黑屏),TTY 里能看到 X 已退出 | services.xserver.videoDrivers 里含 modesetting | modesetting 生成的 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) |
黑屏时的自救与定位(不看画面也能定位)
- 先切会话 VT:
Ctrl+Alt+F1(本机会话固定在 tty1)。若显示停在空 VT,这一步就恢复了。
- 仍黑则从 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。
- 确认 X 是否活着:
ps -eo pid,cmd | grep -E 'X |sddm';xrandr --listproviders 应为 2 个(AMD Radeon 780M + NVIDIA-G0),只有 1 个说明 4060 那路没接进来(B04)。
- 改配置前先预检,避免又黑一次:用候选
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 |
| B02 | X 存活(systemctl is-active display-manager = active,有 X 进程),日志中 failed to create screen resources 与 Failed to create pixmap 计数为 0 |
| B03 | Ctrl+Alt+F1 能回到桌面;loginctl 显示会话 VT = tty1 |
| B04 | xrandr --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:双显卡驱动成功(当前默认) |