SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

Ubuntu 26.04 无显示器远程桌面配置

Ubuntu 26.04 上 xrdp 无法提供 GNOME,会话仅支持 Wayland。本文通过 SSH 配置 GNOME Remote Login,并使用 3389 端口、SSH 隧道或 Tailscale 连接无显示器主机。

如何在没有显示器的情况下使用 Ubuntu 远程桌面

要在没有显示器的情况下使用 Ubuntu 远程桌面,请将 GNOME Remote Desktop 启用为 Remote Login 模式。Remote Login 会从登录屏幕启动独立的 GNOME 会话,因此计算机无需连接显示器,也无需已有用户登录。您只需通过 SSH 使用 grdctl 完成一次设置,之后即可通过任意 RDP(远程桌面协议)客户端连接到 3389 端口。

本指南适用于未连接显示器的 Ubuntu Desktop 计算机,例如家用服务器或迷你电脑。内容首先介绍 Ubuntu 26.04 LTS,然后说明 Ubuntu 24.04 LTS 的差异。如果您的计算机是使用精简 XFCE 桌面的 VPS(虚拟专用服务器),则仍适合使用 xrdp;使用 xrdp 和 XFCE 在 Linux VPS 上配置远程桌面对此进行了介绍。本指南不重复相关内容。

为什么 xrdp 无法在 Ubuntu 26.04 上与 GNOME 配合使用

许多旧教程会安装 xrdp。但在 Ubuntu 26.04 上,这不会提供 GNOME 桌面。原因见 26.04 发行说明:GNOME Shell 不再能以 X.org 会话运行,Ubuntu Desktop 会话现在只能使用 Wayland 后端。xrdp 只能使用 Xorg,因此没有可启动的 GNOME 会话。

c-nergy.be 提供的常用 xrdp 安装脚本也说明了这一点。其 1.6 版本发布于 2026 年 5 月;如果检测到 GNOME 桌面不支持 X11,就不会安装 xrdp 软件包。作者表示,Ubuntu 26.04 与 GNOME 不受支持,并建议 GNOME 用户使用内置的 GNOME Remote Desktop。

其他桌面环境仍有选择。发行说明称,KDE on X11、Xfce、MATE、i3 以及许多其他桌面环境仍可启动 X.org 会话,X11 应用仍可通过 XWayland 运行。要了解本发行版后续的变化,请阅读Ubuntu 26.04.1 的变化以及何时升级。

桌面共享还是远程登录:您需要哪一种?

GNOME Remote Desktop 是 GNOME 自带的 RDP 服务器。上游文档介绍了 3 种运行方式:远程协助、单用户无头模式和无头远程登录。Settings 应用会以两个名称显示其中两种。

  • 桌面共享 是远程协助。它镜像计算机上已经运行的会话。您看到的画面与坐在这台计算机前的用户看到的相同。
  • 远程登录 是无头远程登录。您的 RDP 客户端首先显示 GDM(GNOME 显示管理器)登录界面,然后您在此登录并创建新会话。远程登录仅支持 RDP,不支持 VNC(虚拟网络计算)。

对于没有显示器的计算机,应使用远程登录模式。桌面共享需要已经存在的会话。重启后没有用户登录,因此桌面共享没有可供镜像的会话。

桌面共享还有另一个问题。上游配置说明指出,在远程协助模式下,锁定屏幕也会关闭远程连接。因此,计算机上的会话锁定时,桌面共享连接也会断开。远程登录不依赖本地会话,因此适合无人直接使用的计算机。

两种模式还会监听不同的端口。GNOME 帮助文档说明远程登录使用端口 3389。桌面共享随后使用其他端口,例如 3390,因此您可能需要在客户端中输入该端口。服务器的 46 版本增加了对系统 daemon 与按用户运行的 daemon 之间这一端口冲突的处理。

检查已安装的版本

lsb_release -ds
apt-cache policy gnome-remote-desktop

apt-cache policy 应显示包含版本号的 Installed: 行。截至 2026 年 11 月 1 日,Launchpad 在 26.04 的 updates pocket 中列出 50.2-0ubuntu0.1,在 24.04 中列出 46.3-0ubuntu1.2。如果 Installed: 显示为 (none),请安装该软件包:

sudo apt update
sudo apt install -y gnome-remote-desktop

主版本很重要,因为 grdctl 在 46 和 50 之间发生了变化。以下步骤会指出每一处差异。

在 Ubuntu 26.04 上设置通过 SSH 的远程登录

您需要能够通过 SSH 访问该主机。如果主机尚未运行 SSH 服务器,请连接一次屏幕并运行 sudo apt install -y openssh-server。如果您本来就已连接屏幕,也可以使用下一节中的“设置”路径,并跳过这些命令。

步骤 1:确认服务账户

grdctl --system 不会以您自己的用户身份修改设置。50.2 源代码显示,它会通过 pkexec --user gnome-remote-desktop 再次以自身身份运行,因此它读取的每个文件都必须对该账户可读。检查该账户是否存在:

id gnome-remote-desktop

您应看到一行 uid=。no such user 表示尚未安装该软件包。

步骤 2:创建 TLS 证书

GNOME Remote Desktop 中的 RDP 需要 TLS(传输层安全)密钥和证书。上游文档要求以 gnome-remote-desktop 用户身份为系统服务创建这些文件。以下是上游文档中的 OpenSSL 命令,请以该用户身份运行:

sudo -u gnome-remote-desktop sh -c 'mkdir -p ~gnome-remote-desktop/.local/share/gnome-remote-desktop && openssl req -new -newkey rsa:4096 -days 720 -nodes -x509 -subj /C=SE/ST=NONE/L=NONE/O=GNOME/CN=gnome.org -out ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.crt -keyout ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.key'

该证书的有效期为 720 天。请记下到期日期,因为您需要在证书到期前创建新证书。现在让系统守护进程使用这两个文件:

sudo grdctl --system rdp set-tls-key ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.key
sudo grdctl --system rdp set-tls-cert ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.crt

步骤 3:设置 RDP 凭据

这是单独的 RDP 用户名和密码,不是您的 Linux 账户。远程用户首先输入这组共享的用户名和密码,然后在 GDM 登录屏幕上使用自己的 Linux 账户登录。在 26.04 中,不带参数运行 set-credentials,它会从标准输入读取用户名和密码,因此密码不会写入 shell 历史记录:

sudo grdctl --system rdp set-credentials

步骤 4:启用 RDP 并启动服务

sudo grdctl --system rdp enable
sudo systemctl enable --now gnome-remote-desktop.service
systemctl is-active gdm.service

上游文档还会启用 gdm.service,因为“远程登录”会显示 GDM 登录屏幕。Ubuntu Desktop 已使用 GDM,因此最后一个命令应输出 active。如果没有输出,请运行 sudo systemctl enable --now gdm.service。

步骤 5:检查服务是否正在监听

sudo grdctl --system status --show-credentials
systemctl is-active gnome-remote-desktop.service
sudo ss -tlnp | grep 3389

grdctl --system status --show-credentials 应显示 RDP 部分已启用,端口为 3389,并列出您的 TLS 文件和用户名。不使用 --show-credentials 时,status 仍会打印端口和 TLS 文件,但会将用户名显示为 (hidden)。不同版本使用的确切标签可能不同。systemctl is-active 应输出 active,ss 应在端口 3389 上输出一行 LISTEN。如果 ss 没有输出任何行,说明没有进程正在监听,因此客户端会收到连接被拒绝的错误。使用 journalctl -u gnome-remote-desktop.service -n 50 查看日志,了解原因。

步骤 6:记录证书指纹

该证书是自签名证书,因此 RDP 客户端会在首次连接时发出警告。现在打印指纹,并在接受证书前将其与客户端显示的指纹进行比较:

sudo openssl x509 -in ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.crt -noout -fingerprint -sha256

某些客户端显示 SHA-1 指纹。在这种情况下,使用 -sha1 运行相同的命令。如果指纹不匹配,说明您连接的不是自己的主机。

如果可以接入一次显示器:设置路径

如果可以接入一次显示器,图形界面也能设置相同的模式。在当前版本的 GNOME 帮助中,路径为:打开 Settings,然后依次选择 System、Remote Desktop 和 Remote Login。点击 Unlock 并完成身份验证,然后启用 Remote Login。

该页面的 Login Details 部分会显示客户端所需的用户名和密码。Verify Encryption 会显示证书指纹,供您进行比对。完成后拔下显示器。Remote Login 不需要本地会话,因此仍会继续工作。

另一个页面中的 Remote Desktop 下有 Desktop Sharing。启用 Desktop Sharing 后,其他人可以查看屏幕;启用 Remote Control 后,其他人可以操作屏幕。只有在您同时保持会话登录的情况下,才应启用这些选项,原因同上。

Ubuntu 24.04 有哪些不同

24.04 同样提供 Remote Login。上游在 46.alpha 版本中通过 GDM 增加了无头远程登录功能,而 Noble 使用 46.3。46.2 版本还修复了 CVE-2024-5148,该漏洞存在于登录屏幕切换到用户会话的过程中,因此请确认 apt-cache policy 显示的是更新后的版本,而不是原始的 46.1。

Settings 的布局应当一致。GNOME Settings 46 增加了 Remote Login 页面,将旧的 Remote Desktop 页面重命名为 Desktop Sharing,并将 Remote Desktop 归入新的 System 面板。Noble 使用 Settings 46.7。不要将 Remote Login 与同一 System 面板中的 Secure Shell 混淆:Settings 46 将 SSH 开关命名为 Secure Shell,两者是不同的功能。

命令行方面最大的差异是 set-credentials。在 46.3 中,它需要将用户名和密码都作为参数传入,不会提示输入。请先将密码读入变量,避免密码出现在 shell 历史记录中:

read -rsp 'RDP password: ' GRD_PASS; echo
sudo grdctl --system rdp set-credentials rdpuser "$GRD_PASS"
unset GRD_PASS

上文 26.04 步骤中的其他命令,在 46.3 中形式相同:set-tls-key、set-tls-cert、enable 和 status。不过,24.04 缺少 3 项功能。持久远程登录会话在 47 版本中才加入,因此 46.x 版本不支持该功能。断开连接前请保存工作,并测试重新连接后会话的状态。50 版本还为无头 GDM 自动登录会话增加了远程登录和 Kerberos 身份验证。24.04 两者都不支持。

如果您需要在 GNOME 上使用 xrdp,c-nergy 脚本只会拒绝 GNOME 49 及更高版本,而 24.04 使用 GNOME 46。这也是部分用户继续使用旧版本的原因;从 Ubuntu 26.04 返回 24.04 会说明这一变更的实际代价。

自动登录:依赖前先进行测试

一些指南建议启用自动登录,以便系统重启后,Desktop Sharing 有可镜像的会话。GNOME 帮助将此开关置于 设置、系统、用户、解锁、自动登录下。该页面同时警告,任何启动计算机的人都可以使用您的账户和数据。

还需要考虑另一个原因。在用户模式下,源端通过 libsecret 将 Desktop Sharing 的 RDP 凭据存储在默认密钥环集合中。启用自动登录后,您在启动时不会输入密码。因此,请重启服务器,并在离开前测试 Desktop Sharing 连接。Remote Login 不需要这些设置,因为它从登录屏幕启动。

为什么绝不应让端口 3389 暴露在互联网中

不要在家用路由器上转发端口 3389。公开的 RDP 端口会收到陌生人的登录尝试,而他们与你的登录界面之间唯一的防线就是一个共用密码。应通过你已经控制的加密路径访问该主机。以下两种方式都很实用。

选项 1:SSH 隧道

如果你已经可以通过 SSH 访问该主机,请将本地端口转发到 RDP 端口:

ssh -N -L 13389:127.0.0.1:3389 you@home-box

-L 会将本地端口 13389 转发到主机上的端口 3389,-N 则告诉 SSH 不要运行远程命令,因为你只需要端口转发。保持该终端打开。将 RDP 客户端指向 127.0.0.1:13389。本地端口使用 13389,而不是 3389,因为已启用自身 Remote Desktop 服务器的 Windows 计算机通常已经占用 3389。只有 SSH 端口需要从外部访问。

选项 2:Tailscale

Tailscale 会将两台计算机置于同一个私有网络中,因此路由器无需开放端口。在 Ubuntu 主机上使用 Tailscale Linux 文档中的命令安装:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4

同时在客户端计算机上安装 Tailscale,然后将 RDP 客户端指向输出的地址 tailscale ip -4,端口使用 3389。如果安装脚本因错误停止,修复 Ubuntu 上的 Tailscale 安装错误介绍了常见问题。此处不需要 Tailscale SSH。Tailscale SSH 只提供端口 22,并且仅通过 Tailscale 地址提供;RDP 使用另一个端口。

如果主机上的 ufw 处于启用状态,可以仅允许来自 tailnet 接口的 RDP 访问:

sudo ufw allow in on tailscale0 to any port 3389 proto tcp

然后使用如何列出 Ubuntu 上处于活动状态的防火墙规则确认实际开放的内容。端口 3389 不应出现在允许来自任意位置的规则中。

连接失败时

客户端提示连接被拒绝。 您使用的端口没有进程监听。在服务器上运行 sudo ss -tlnp | grep 3389。没有输出表示服务已停止或未启用 RDP,因此请重复执行第 4 步,并查看 journalctl -u gnome-remote-desktop.service -n 50。如果使用 SSH 隧道,还要确认 ssh -N 窗口仍处于打开状态。

客户端要求输入两次密码。 Remote Login 正常会出现这种情况。第一次提示要求输入您通过 set-credentials 设置的 RDP 凭据。第二次是 GDM 登录界面,要求输入您的 Linux 账户凭据。在第一次提示中输入 Linux 密码会失败,因为这两组凭据彼此独立。

您原本希望进入已打开的会话,但看到的是登录界面。 您连接到了 3389 端口,该端口属于 Remote Login。启用 Remote Login 后,Desktop Sharing 会使用另一个端口,因此请查看其 Settings 页面中显示的端口。

Desktop Sharing 运行一段时间后断开。 服务器上的会话已锁定。在远程协助模式下,锁定屏幕会关闭远程连接。对于没有显示器的服务器,请使用 Remote Login。

set-credentials 在 24.04 上失败。 46.3 版本要求同时提供两个参数。请使用 24.04 部分中的 read -rsp 形式。

FAQ

我可以在 Ubuntu 26.04 上将 xrdp 与 GNOME 搭配使用吗?

不可以。Ubuntu 26.04 发行说明指出,GNOME Shell 已无法再作为 X.org 会话运行,而 xrdp 仅支持 Xorg。由于这一原因,c-nergy.be 安装程序拒绝在 GNOME 49 及更高版本上安装 xrdp。请使用带有远程登录功能的 GNOME Remote Desktop,或将 xrdp 与仍支持 X.org 会话的桌面环境搭配使用,例如 XFCE。

Ubuntu 远程桌面可以在未连接显示器时使用吗?

可以,但必须使用远程登录模式。上游项目将其称为无头远程登录:RDP 客户端会显示 GDM 登录界面,您可以登录到新会话,因此不需要本地屏幕,也不需要已有登录用户。桌面共享则不同。它会镜像已经运行的会话,因此重启后如果没有用户登录,就没有可共享的内容。

GNOME Remote Desktop 在 Ubuntu 上使用哪个端口?

远程登录使用 3389 端口,这是标准 RDP 端口,也是 gnome-remote-desktop 源码中的默认端口。启用远程登录后,桌面共享会改用其他端口,例如 3390,您需要在客户端中输入该端口。运行 sudo ss -tlnp 可在本机查看实际监听的端口。

在路由器上转发 3389 端口安全吗?

不要这样做。公开的 RDP 端口会引来登录尝试,而登录界面前只有一个共享密码提供保护。请使用 ssh -N -L 13389:127.0.0.1:3389 you@home-box 通过 SSH 转发本地端口,或让两台计算机加入 Tailscale,然后连接到本机的 Tailscale 地址和 3389 端口。

远程登录在 Ubuntu 24.04 上可用吗?

可以。无头远程登录在 gnome-remote-desktop 46 中加入,而 Ubuntu 24.04 附带 46.3。主要区别是,46.3 中的 grdctl --system rdp set-credentials 需要将用户名和密码作为参数传入,而 26.04 可以从标准输入读取这些信息。持久远程登录会话直到版本 47 才加入,因此在 Ubuntu 24.04 上断开连接前,请先保存工作。

这篇文章对您有帮助吗?