新买了一台i7-4785T小主机,安装了 Ubuntu 26.04 当服务器,懒得给它接显示器和键鼠,想直接从 Windows 远程上去用。

Ubuntu 22.04 之后的 GNOME 桌面自带 RDP 远程桌面,可以通过mstsc直接远程到过来,到了26.04只要系统里装了桌面组件,几条命令就能通。因为一开始也没发现,问豆包兜兜转转问了一圈,踩了N个坑,所以就有了这个文章,记录一下来时的路。


坑逼豆包

谢谢给了我几十种百分百可以解决问题的方案。

刚开始时候问豆包,结果直接把我忽悠瘸了,先后折腾了三套方案,然后跟我说别浪费时间了Ubuntu 26.04现在是测试版不完善,让我重装24.04:

  1. gdm 方案 —— 遇到ssl证书报错,让我别折腾,没价值;
  2. xrdp 方案 —— 终端无法使用,让我别用图形界面的终端,直接用xshell登录服务器;
  3. vnc 方案 —— 端口打不开,跟我说新旧版VNC配置差异,搞了一圈又说系统不完善,让我换24.04。

三套方案来回试,新装的系统搞的乱七八糟的,最终返回来问腾讯的混元才解决。

说白了,Ubuntu 26.04 默认的内置的 gnome-remote-desktop本身内置RDP协议,Windows 用自带的远程桌面连接(mstsc)直接连,只需要补充一下ssl配置即可。


正解:gnome-remote-desktop

它分两种模式,这里一定要分清,不然又白忙:

  • 远程控制(用户态):共享你当前已经登录的桌面,适合"人坐在机器前"的场景;
  • 远程登录(system 态):机器没登录、甚至没接显示器,远程连上去进入登录界面,新建一个桌面会话。

由于新装的小主机,淡出一个小主机,没接鼠键、显示器,所以我要的是第二种,也就是 grdctl --system 那套。


问题 1:命令行不会自动生成证书

grdctl --system 命令行配置,TLS 证书它不会像图形界面那样自动帮你生成,查状态永远显示 TLS certificate: (null)。得手动用 openssl 生成再注册:

sudo openssl req -newkey rsa:2048 -nodes \
  -keyout /var/lib/gnome-remote-desktop/rdp-tls.key \
  -x509 -days 3650 \
  -out /var/lib/gnome-remote-desktop/rdp-tls.crt \
  -subj "/CN=$(hostname)"

sudo chown gnome-remote-desktop:gnome-remote-desktop \
  /var/lib/gnome-remote-desktop/rdp-tls.key \
  /var/lib/gnome-remote-desktop/rdp-tls.crt

sudo grdctl --system rdp set-tls-key /var/lib/gnome-remote-desktop/rdp-tls.key
sudo grdctl --system rdp set-tls-cert /var/lib/gnome-remote-desktop/rdp-tls.crt

问题 2:端口 3389 死活不监听

证书配好了,服务也 enabled 了,但 ss -lntp | grep 3389 一查,空的。服务状态显示 active,就是端口不起来。

这个坑当时卡了我挺久。system 态的 3389 端口,是由 GDM 登录界面触发监听的,不是 systemd 服务自己绑的。也就是说,机器上没有登录管理器在跑登录界面,端口就一直是空的。

排查命令一跑,真相大白:

$ systemctl status gdm
Unit gdm.service could not be found.

gdm 压根不存在。 就是前面豆包那几套方案折腾的时候,把 gdm3 给卸了。没有 GDM,gnome-remote-desktop 的守护进程就是空转,永远不绑端口。

问题 3:补装桌面 + GDM 起不来

确认是桌面组件缺了之后,把桌面装回来:

sudo apt update
sudo apt install -y ubuntu-desktop-minimal
sudo apt autoremove -y   # 顺手清掉之前 lightdm、tigervnc 那些残留

装的过程很顺利,gdm3、gnome-shell 都装上了,但最后一步报错:

Job for gdm.service failed.

小主机上,GDM 起图形界面经常失败。啥配置都没改,直接 reboot 一次,重启后 GDM 自己就起来了。 这种"重启能解决"的问题,有时候真就是最优解。

问题 4:mstsc 登录失败

链路终于通了,mstsc 也能弹出验证窗口了,但输密码进去,报"登录没有成功"。

查了一圈,原因极其蠢:我之前设凭据的命令,只传了用户名,没传密码

# 错误示范:密码是空的
sudo grdctl --system rdp set-credentials lin

# 正确姿势:用户名 + 密码两个参数都带上
sudo grdctl --system rdp set-credentials lin 你的密码

密码是空的,mstsc 一验当然失败。补上密码,重启服务,重新连,进去了。

问题 5:最后弹个安全提示

登录成功后,mstsc 弹了个 Continue With Insecure Connection?,大意是"这条 RDP 连接没走 RDSTLS 加密,安全级别低,是否继续"。内网用的话直接点 Continue 就行,不影响功能。想彻底消掉这个弹窗,就把连接另存为 .rdp 文件,末尾加一行 use redirection server name:i:1


完整命令清单

# 1. 如果系统是 Server 版、或桌面组件被搞没了,先补桌面 + GDM
sudo apt update
sudo apt install -y ubuntu-desktop-minimal
sudo apt autoremove -y

# 2. 生成并注册 TLS 证书
sudo openssl req -newkey rsa:2048 -nodes \
  -keyout /var/lib/gnome-remote-desktop/rdp-tls.key \
  -x509 -days 3650 \
  -out /var/lib/gnome-remote-desktop/rdp-tls.crt \
  -subj "/CN=$(hostname)"
sudo chown gnome-remote-desktop:gnome-remote-desktop \
  /var/lib/gnome-remote-desktop/rdp-tls.key \
  /var/lib/gnome-remote-desktop/rdp-tls.crt
sudo grdctl --system rdp set-tls-key /var/lib/gnome-remote-desktop/rdp-tls.key
sudo grdctl --system rdp set-tls-cert /var/lib/gnome-remote-desktop/rdp-tls.crt

# 3. 设凭据(用户名 + 密码,两个参数都带)
sudo grdctl --system rdp set-credentials lin 你的密码

# 4. 启用 + 重启
sudo grdctl --system rdp enable
sudo systemctl restart gnome-remote-desktop.service

# 5. 重启系统,让 GDM 进入登录界面
sudo reboot

# 6. 验证
sudo ss -lntp | grep 3389
sudo grdctl --system status --show-credentials

Windows 侧就三步:Win+Rmstsc → 填 IP。连接时要输两套凭据

  • 第一层(mstsc 弹窗):set-credentials 设的用户名 + 密码;
  • 第二层(GDM 登录界面):Ubuntu 系统账号 + 系统密码。

建议两层密码设成一样的,省得记两套。


复盘

回头看,最大的坑不是技术本身,而是一开始问错了对象。xrdp 和 vnc 在 Ubuntu 22.04+ 的 GNOME 桌面上,真没必要碰,内置的 gnome-remote-desktop 一条路就够。剩下的坑都是小细节:证书要手动生成、小主机 3389 靠 GDM 触发、set-credentials 要带密码。

最后修改:2026 年 09 月 07 日
如果觉得我的文章对你有用,请随意赞赏