问题描述
Ubuntu 24.04 LTS 工作站,安装 NVIDIA 闭源驱动(nvidia-driver-580)后,通过 Windows 远程桌面连接(mstsc)使用 GNOME 内置 RDP 服务连接时,出现灰屏或黑屏,无法正常显示桌面。
环境信息:
- 系统:Ubuntu 24.04 LTS (Noble Numbat)
- 内核:6.17.0-19-generic
- 独显:NVIDIA GeForce RTX 4070
- 驱动:nvidia-driver-580 (580.126.09)
- 远程桌面服务:GNOME Remote Desktop (gnome-remote-desktop 46.2)
- 客户端:Windows 11 远程桌面连接 (mstsc)
根因分析
GNOME Remote Desktop 的 RDP 连接链路如下:
1 | Windows mstsc → GNOME Remote Desktop (系统级) |
问题的根本原因是 Ubuntu 24.04 默认安装的 gnome-shell(46.0-0ubuntu6~24.04.3)和 gnome-remote-desktop(46.2)版本过低,在 NVIDIA 闭源驱动环境下存在以下 bug:
gnome-shell 在 RDP handover 时 segfault:通过 RDP 登录触发用户会话创建时,gnome-shell 在
libc.so.6中发生 general protection fault 崩溃,导致用户会话无法注册,GDM 报Session never registered, failing。gnome-remote-desktop handover 超时:即使 gnome-shell 不崩溃,旧版 gnome-remote-desktop 在 NVIDIA + Wayland 环境下的 handover 流程也存在缺陷,日志表现为
Failed to request remote desktop handover: Timeout was reached。
通过对比一台配置相似但 RDP 工作正常的机器(同样使用 NVIDIA 闭源驱动 580 + Wayland),发现其 gnome-shell 版本为 46.0-0ubuntu6~24.04.13,gnome-remote-desktop 版本为 46.3-0ubuntu1.2,均高于出问题的机器。升级后问题解决。
解决方案
一条命令:
1 | sudo apt update && sudo apt install -y gnome-shell gnome-remote-desktop mutter |
升级后重启:
1 | sudo reboot |
验证
1 | # 确认版本 |
使用 Windows 远程桌面连接,输入 IP、用户名和密码,即可正常看到桌面。NVIDIA GPU 的 CUDA 计算能力不受影响。
版本对比
| 包 | 修复前(黑屏) | 修复后(正常) |
|---|---|---|
| gnome-shell | 46.0-0ubuntu6~24.04.3 | 46.0-0ubuntu6~24.04.13 |
| gnome-remote-desktop | 46.2-1~ubuntu24.04.2 | 46.3-0ubuntu1.2 |
| mutter | 旧版 | 46.2-1ubuntu0.24.04.14 |
总结
这个问题不是 NVIDIA 驱动本身的兼容性问题,而是 Ubuntu 24.04 早期版本的 gnome-shell 和 gnome-remote-desktop 在 NVIDIA 驱动环境下存在 bug。升级到最新的补丁版本即可修复,无需切换核显、修改 prime-select 或更换远程桌面工具。
说些什么吧!