新买了一台i7-4785T小主机,安装了 Ubuntu 26.04 当服务器,懒得给它接显示器和键鼠,想直接从 Windows 远程上去用。
Ubuntu 22.04 之后的 GNOME 桌面自带 RDP 远程桌面,可以通过mstsc直接远程到过来,到了26.04只要系统里装了桌面组件,几条命令就能通。因为一开始也没发现,问豆包兜兜转转问了一圈,踩了N个坑,所以就有了这个文章,记录一下来时的路。
坑逼豆包
谢谢给了我几十种百分百可以解决问题的方案。
刚开始时候问豆包,结果直接把我忽悠瘸了,先后折腾了三套方案,然后跟我说别浪费时间了Ubuntu 26.04现在是测试版不完善,让我重装24.04:
- gdm 方案 —— 遇到ssl证书报错,让我别折腾,没价值;
- xrdp 方案 —— 终端无法使用,让我别用图形界面的终端,直接用xshell登录服务器;
- 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-credentialsWindows 侧就三步:Win+R → mstsc → 填 IP。连接时要输两套凭据:
- 第一层(mstsc 弹窗):
set-credentials设的用户名 + 密码; - 第二层(GDM 登录界面):Ubuntu 系统账号 + 系统密码。
建议两层密码设成一样的,省得记两套。
复盘
回头看,最大的坑不是技术本身,而是一开始问错了对象。xrdp 和 vnc 在 Ubuntu 22.04+ 的 GNOME 桌面上,真没必要碰,内置的 gnome-remote-desktop 一条路就够。剩下的坑都是小细节:证书要手动生成、小主机 3389 靠 GDM 触发、set-credentials 要带密码。
1 条评论
感谢分享经验,谢谢站长!!已收藏