Ubuntu 远程桌面为什么有两个开关:远程登录、桌面共享与端口映射

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处
UbuntuWindows远程桌面RDPGNOME

我只是想换到 Windows 电脑上,继续操作 Ubuntu 里已经打开的 Codex。路由器的公网 3389 端口也映射好了,按理说打开远程桌面、填地址就能用。

结果 Ubuntu 的设置里有两个入口:“远程登录”和“桌面共享”。开了前者,又被告知应该开后者;接着端口变成了 3390。想改回 3389,发现那个位置只能复制,不能编辑。

绕了几轮才发现,得先说清楚自己要连接哪个桌面,再看端口。Windows 的“远程桌面连接”只是客户端名字,Ubuntu 的这两个选项都能通过 RDP 连接。

我要的是已经打开 Codex 的那个桌面

我的需求很具体:Ubuntu 上的 Codex、浏览器和终端都已经开着,我不想重新登录后再找一遍窗口。

这对应 Ubuntu 的“桌面共享”。Windows 连接后看到的是本地正在显示的桌面,远程操作也会反映到本地屏幕上。要能操作鼠标和键盘,还要打开“远程控制”。“共享”这个名字容易让人以为只能看屏幕,其实它也能控制。

“远程登录”则用于从远端进入登录流程。按照 Ubuntu 官方对两种模式的说明,同一账号已在本地登录时,远程连接者会得到结束现有会话再登录的选项。因此,它不能直接当作“接着操作眼前这些窗口”使用。

也别把远程登录理解为在当前桌面里多开一个窗口。这里的区别是桌面会话:桌面共享操作已有会话,远程登录走另一套登录流程。

开关打开了,不代表开的是我要的模式

这次环境是 Ubuntu 26.04.1 LTS、GNOME Shell 50.1,使用 Wayland。最初检查时,用户级桌面共享服务没有启动。

打开设置中的开关后,检查结果仍显示桌面共享未启用,但 3389 已经在监听。继续检查系统级服务才确认,我打开的是“远程登录”。当时的状态可以简化成:

桌面共享:disabled,用户服务 inactive
远程登录:enabled,系统服务 active,端口 3389

这也解释了为什么单看端口容易误判。3389 在监听,只说明有服务接收连接,不能说明它会把我带到当前桌面。

以后排查,可以分别检查两种模式:

# 用户级:当前桌面的共享服务
grdctl status
systemctl --user is-active gnome-remote-desktop.service

# 系统级:远程登录服务
grdctl --system status
systemctl is-active gnome-remote-desktop.service

# 查看实际监听端口
ss -lnt | rg ':(3389|3390)\b'

grdctl status 重点看 RDP 的 Status、Port 和 View-only。如果 View-only 是 yes,就还不能远程操作。命令的权限要求和输出细节可能随版本变化,设置页面也要一起核对。

桌面共享也能用 Windows 的远程桌面连接

Ubuntu 上的入口是“设置 → 系统 → 远程桌面 → 桌面共享”。开启共享和远程控制后,记下页面里的端口,以及为桌面共享设置的用户名、密码。这里使用的是共享页面中的连接凭据,不要直接假定它与 Ubuntu 登录密码相同。

在 Windows 按 Win + R,输入 mstsc,就能打开“远程桌面连接”。如果 Ubuntu 桌面共享页面显示端口为 3390,可以先在同一局域网连接:

mstsc /v:192.168.2.71:3390

这里的 192.168.2.71 是这台 Ubuntu 当时的内网地址,换电脑时要替换成实际地址。首次连接应核对服务器身份或证书指纹,再输入凭据。

不用为“桌面共享”另找一个 Windows 客户端。Ubuntu 文档说明桌面共享使用 RDP,Windows 自带的客户端就能连接。

公网 3389 不必和内网端口相同

最让我别扭的是端口。我已经映射了公网 3389,看到桌面共享使用 3390,就以为还得新增一个公网入口。

Ubuntu 的端口分配说明写得很明确:两种模式默认都使用 3389,同时开启时,远程登录保留 3389,桌面共享使用 3390。

公网入口和内网服务端口可以不同。路由器可以这样转发:

Windows 远程桌面连接
  → 公网地址:3389
  → 路由器端口映射
  → Ubuntu 192.168.2.71:3390
  → 当前正在使用的桌面

Windows 继续填原来的公网地址和 3389。需要修改的是路由器规则里的目标端口,把内网目标改为 3390。改完以后,这条公网映射就通向桌面共享,不能再靠同一个入口同时选择两种模式。

Ubuntu 设置页面里的端口在本次操作中只能复制,不能编辑。要保留公网 3389,直接调整路由器映射就行,不必执着于把页面中的 3390 改掉。

如果只需要桌面共享,也可以关闭远程登录,再关闭并重新开启桌面共享,查看它是否使用空出来的 3389。这个切换后的实际端口尚未在本次记录中验证,不能保证关掉一个开关,另一个就立刻回到 3389。最终以设置页面和监听结果为准。

怎么确认连接到了正确的桌面

先在 Ubuntu 保持登录和唤醒状态,留一个容易辨认的窗口,比如当前 Codex 聊天。Windows 连上后,如果能看到这个窗口,而且远程鼠标操作也出现在本地显示器上,才算接到了想要的桌面。

若连到登录界面,应先检查是否接到了远程登录端口。若完全连不上,就按局域网、主机端口、路由器映射的顺序排查。Windows PowerShell 可以先测内网端口:

Test-NetConnection 192.168.2.71 -Port 3390

测试成功只代表 TCP 端口可达,账号、证书和桌面画面还需要实际连接确认。如果主机启用了防火墙,还要允许来源网络访问实际使用的 RDP 端口;单纯修改路由器映射无法绕过主机防火墙。

这篇记录确认了两种服务的状态区别,也整理了端口映射方法,但还没有完成 Windows 端连接、画面和控制的验证。锁屏、休眠及重启后的连接表现,也需要按实际使用场景再测。

公网直连另有风险。Ubuntu 官方建议私人远程访问优先使用 VPN。如果后续改成 VPN,就先接入内网,再连接 Ubuntu 的桌面共享地址;上面的公网映射用于解释这次已有规则,不作为长期暴露 RDP 的建议。

对我这次的需求,选择已经清楚了:使用桌面共享,接着操作已经打开的 Codex。端口只负责把连接送到对应服务,名字里有没有“共享”,并不决定 Windows 能不能连接。