@[TOC](无显示器Ubuntu远程原生 Wayland 桌面完整折腾记录)
环境: Ubuntu 25.04 / GNOME 50 / 无物理显示器 / 内网远程访问 / windows
背景
手里有一台 Ubuntu 桌面机,没接显示器,一直通过 VNC 远程使用。VNC 体验一般——画面模糊、延迟高、剪贴板时不时失灵。甚至有些应用直接打不开,因为 VNC 会话跑在 X11 + GNOME Flashback 下,而 gnome-control-center 只认 GNOME 和 Unity 桌面环境。
既然 Ubuntu 25.04 默认就是 Wayland,能不能直接远程 Wayland 桌面?折腾了一圈,答案是:可以,而且体验比 VNC 好很多。
![windows app远程wayland成功🥳
先说结论
| 方案 | 协议 | 端口 | 体验 | 无显示器 |
|---|---|---|---|---|
| xrdp + Xvnc | RDP→VNC | 3389 | 一般 | ✅ |
| xrdp + Xorg | RDP | 3389 | 黑屏闪退 | ✅ |
| gnome-remote-desktop headless | RDP | 3390 | 流畅 | ✅ |
最终方案:gnome-remote-desktop headless 模式 + GDM 自动登录,不需要物理显示器,RDP 直连 Wayland 桌面。
最终方案:GNOME Remote Desktop Headless 模式
Ubuntu 25.04 的 gnome-remote-desktop (50.0) 提供了 --headless 选项,专门解决无显示器的场景。配合 GDM 自动登录,开机就能用。
Step 1:开启 Wayland
编辑 /etc/gdm3/custom.conf,注释掉 Wayland 禁用行:
sudo nano /etc/gdm3/custom.conf
修改为:
[daemon]
# WaylandEnable=false ← 注释掉这行
Step 2:开启 GDM 自动登录
同一文件,设置自动登录你的用户:
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=jun
这样开机后 GDM 会自动以你的账号登录 Wayland 桌面,不需要物理操作。
Step 3:配置 gnome-remote-desktop headless 模式
# 启用 headless RDP
grdctl --headless rdp enable
# 设置 RDP 登录凭据
grdctl --headless rdp set-credentials jun 你的密码
# 允许远程控制(非只读)
grdctl --headless rdp disable-view-only
# 设置端口(避开 xrdp 的 3389)
grdctl --headless rdp set-port 3390
# 确认配置
grdctl --headless status --show-credentials
输出应该类似:
Overall:
Unit status: active
RDP:
Status: enabled
Port: 3390
Authentication methods: credentials
TLS certificate: /home/jun/.local/share/gnome-remote-desktop/rdp.crt
TLS fingerprint: 38:1c:15:91:...
Username: jun
Password: 你的密码
Step 4:重启并验证
sudo reboot
重启后等待约 30 秒,然后 SSH 进去检查:
# 检查端口监听
ss -tlnp | grep 3390
# → LISTEN 0 5 *:3390 *:* users:(("gnome-remote-de",...))
# 检查 Wayland 会话
loginctl list-sessions
# → 应该能看到 Wayland 用户会话(Type=wayland, seat0, tty2)
Step 5:Windows 远程桌面连接
打开 Windows 自带的"远程桌面连接"(mstsc.exe):
- 地址:
192.168.x.xxx:3390 - 用户名: xxx
- 密码: 你设置的密码
首次连接会提示证书不受信任(自签名证书),勾选信任继续即可。
清理:关掉 xrdp
既然以后用 Wayland RDP 了,xrdp 可以关掉:
sudo systemctl stop xrdp
sudo systemctl disable xrdp
关于 TPM 警告
配置 headless 时可能会看到:
Init TPM credentials failed because Failed to initialize transmission interface context:
tcti:IO failure, using GKeyFile as fallback.
不用担心。 这是因为机器没有 TPM 芯片(虚拟机或老硬件常见),gnome-remote-desktop 会自动回退到文件存储凭据,功能完全正常。
最终架构
graph TB
A[Windows 远程桌面 mstsc] -->|RDP 3390| B[gnome-remote-desktop]
B --> C[GNOME Shell - Wayland]
C --> D[GDM 自动登录]
D --> E[Ubuntu 25.04 - 192.168.31.161]
F[xrdp 已禁用] -.-> E
要点总结
- Wayland 远程不需要物理显示器,但需要 headless 模式 + GDM 自动登录
- gnome-remote-desktop 是官方方案,Ubuntu 25.04 自带,RDP 协议体验好
- xrdp + Xorg 在无 GPU 环境下容易崩,xrdp + Xvnc 能用但体验差
- 端口要错开,xrdp 默认 3389,gnome-remote-desktop 改 3390
- TPM 警告可以忽略,不影响功能
- 必须关闭自动锁屏,否则几分钟后远程桌面就连不上,报 "Session creation inhibited"
踩坑记录
下面是折腾过程中遇到的各种坑,供同样在摸索的同学参考。
坑 1:VNC 下系统设置打不开
通过 xrdp 连接 VNC 桌面后,点击"设置"没反应。手动运行 gnome-control-center 报错:
Running gnome-control-center is only supported under GNOME and Unity, exiting
原因: xrdp 的 VNC 会话启动脚本 /etc/xrdp/startwm.sh 将 XDG_CURRENT_DESKTOP 设成了 GNOME-Flashback,而 gnome-control-center 检查这个环境变量,只接受 GNOME 或 Unity。
修复:
sudo sed -i 's/XDG_CURRENT_DESKTOP=GNOME-Flashback/XDG_CURRENT_DESKTOP=GNOME/' /etc/xrdp/startwm.sh
或者临时在终端里启动:
DISPLAY=:10 XDG_CURRENT_DESKTOP=GNOME gnome-control-center
坑 2:xrdp 选 Xorg 黑屏闪退
xrdp 登录界面提供四个选项:Xorg、Xvnc、vnc-any、neutrinordp-any。选 Xorg 后黑屏闪退。
查看 xrdp-sesman 日志:
Window manager (pid 216896, display 11) exited with signal SIGABRT.
Window manager (pid 216896, display 11) exited quickly (1 secs).
This could indicate a window manager config problem
原因: gnome-session 在 xrdp 的 Xorg 会话中崩溃。这在没有物理 GPU / 没有正确 DRI 权限的机器上很常见。xorgxrdp 需要跟 Xorg 紧密配合,环境不匹配就崩。
结论: xrdp + Xorg 在这台机器上不靠谱,选 Xvnc 能用但体验差。
坑 3:Wayland 远程的鸡生蛋问题
==这是最大的坑。== gnome-remote-desktop 需要 Wayland 用户桌面会话才能监听 RDP 端口。但没有物理显示器、没有远程连接,就没有 Wayland 桌面会话——死循环。
具体表现:
# 服务启动了,但端口没监听
systemctl --user status gnome-remote-desktop.service
# → active (running)
ss -tlnp | grep 3390
# → 无输出!端口没有监听
原因: gnome-remote-desktop 必须跑在一个活跃的 Wayland compositor(GNOME Shell)下面,才能截取画面和注入输入。没有 Wayland 会话 = 没有画面 = 服务空转不监听。
解法: 开启 GDM 自动登录 + headless 模式,让系统开机自动创建 Wayland 会话,gnome-remote-desktop 就能正常工作了。
坑 4:自动锁屏导致连接闪退(最容易踩的坑!)
==这个坑藏得最深,折腾最久。== 配置好 headless 模式后,第一次连接成功,但过几分钟后再连就闪退。日志里反复出现:
Failed to start remote desktop session: GDBus.Error:org.freedesktop.DBus.Error.Failed: Session creation inhibited
还有认证失败:
client authentication failure
nla_recv() error: -1
原因: GDM 自动登录后,GNOME 会在几分钟后自动锁屏。锁屏状态下,xdg-desktop-portal 会拒绝所有远程桌面会话创建,直接返回 "Session creation inhibited"。而 Windows 远程桌面客户端收不到有效响应就闪退了。
验证方法:
# 检查是否锁屏
loginctl show-session <session-id> -p LockedHint
# LockedHint=yes ← 这就是连不上的原因
gdbus call --session --dest org.gnome.ScreenSaver \
--object-path /org/gnome/ScreenSaver \
--method org.gnome.ScreenSaver.GetActive
# (true,) ← 锁屏中
永久修复:关闭自动锁屏和屏保
gsettings set org.gnome.desktop.screensaver lock-enabled false
gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
⚠️ 安全提醒:关闭锁屏意味着任何人能物理接触到机器就能直接操作。如果是服务器/无显示器场景,可以接受。如果是笔记本,请三思。