−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS
开始使用

如何在 Linux VPS 上安装桌面并用远程桌面连接(XFCE + xrdp)

给 Ubuntu 24.04 VPS 装上图形桌面,用普通的远程桌面应用就能打开:XFCE 和 xrdp,两个会把事情搞砸的默认设置(会话不对、没有 TLS),以及一种让 3389 端口完全不暴露在互联网上的做法。附实测的磁盘占用和每个会话的内存。

Linux 服务器没有屏幕,大多数时候也不需要。但有时需要:必须从服务器自己的地址运行的浏览器、只有图形界面的工具,或者一个可以一直开着、从任何电脑回来继续用的桌面。本指南为 Ubuntu 24.04 装上轻量桌面 XFCE 和 xrdp,让你用连接 Windows 服务器时同样的远程桌面应用打开它。

我们在自己的 Ubuntu 24.04 镜像上测试了每一步。有两个默认设置让第一次尝试失败了,下面把两个都修好。你需要一个带 sudo 的普通用户,Ubuntu 配置指南里会创建一个。示例中它叫 deploy。

1. 安装 XFCE 和 xrdp

sudo apt update
sudo apt install -y xfce4 xfce4-goodies xrdp

在我们 2 GB 的服务器上,这一步用了大约四分半钟,占用 1.7 GB 磁盘(安装前已用 2.7 GB,安装后 4.4 GB)。它会装上 xrdp 0.9.24,并立即启动,监听 3389 端口。

2. 让 xrdp 启动 XFCE,而不是 GNOME

用将要使用桌面的那个用户登录,然后运行:

echo xfce4-session > ~/.xsession

没有这个文件时,我们第一次登录启动的是 GNOME 而不是 XFCE,会话立刻以 "Oh no! Something has gone wrong" 结束。第 1 步的软件包会顺带装上 GNOME 的会话管理器,Ubuntu 会把它设为默认。有了 ~/.xsession,xrdp 就会启动 XFCE。

3. 让 xrdp 使用 TLS

xrdp 以自己的 xrdp 用户运行,这个用户读不了服务器的私钥。我们的第一次连接成功了,但 /var/log/xrdp.log 说明了为什么不该信任它:

Cannot read private key file /etc/xrdp/key.pem: Permission denied
Non-TLS connection established from ::ffff:127.0.0.1

没有私钥,xrdp 就会退回到旧的 RDP 加密,而不是 TLS。给它读取权限并重启:

sudo adduser xrdp ssl-cert
sudo systemctl restart xrdp

下一次连接在我们的日志里显示为 TLS connection established ... TLSv1.3。你也可以用同样的方法检查自己的服务器:

sudo grep -E "TLS connection|Non-TLS" /var/log/xrdp.log | tail -2

4. 别让 3389 端口暴露在互联网上

装好后,xrdp 会在所有地址上监听。和 Windows 不同,xrdp 没有 Network Level Authentication,所以任何能连到这个端口的人都会看到登录界面,可以在上面猜密码。让它只在服务器本机上监听:

sudo sed -i 's|^port=3389$|port=tcp://127.0.0.1:3389|' /etc/xrdp/xrdp.ini
sudo systemctl restart xrdp
ss -ltn | grep 3389

最后一行应该显示 127.0.0.1:3389。在我们的测试中,此后直接连接服务器地址的 3389 会被拒绝,而下一步的隧道照常可用。

5. 通过 SSH 连接

在你自己的电脑上打开隧道。Windows 的 PowerShell 里也有同样的 ssh 命令:

ssh -L 13389:localhost:3389 deploy@YOUR.SERVER.IP

NAT 套餐要加上 -p 和控制面板里的专属 SSH 端口。保持这个窗口不要关。然后把远程桌面应用指向 localhost:13389,用 deploy 和该用户的密码登录:

  • Windows: 远程桌面连接(mstsc)。
  • macOS: App Store 里的 Windows App。
  • Linux: Remmina,或 xfreerdp /v:localhost:13389 /u:deploy。

本地端口用 13389 而不是 3389,是因为你电脑上的 3389 可能已经被它自己的远程桌面占用了。第一次连接时,应用会提示一个它不认识的证书。那是服务器的自签名证书,而且连接本来就在 SSH 里加密了。

6. 你会得到什么

你会得到一个带面板、文件管理器和终端的 XFCE 桌面。在我们的服务器上,一个会话大约增加了 360 MB 内存:连接前已用 388 MB,会话期间 747 MB。

关闭远程桌面窗口并不会退出登录。在我们的测试中,断开连接后一个长时间运行的命令还在继续。再次连接时,xrdp 把我们送回了同一个会话(日志里是 reconnected session ... display :10)。要真正结束会话,请在 XFCE 菜单里点 Log Out。

选哪个套餐

桌面更吃内存而不是 CPU。Micro(2 vCPU、2 GB、25 GB,$5/月)跑 XFCE 和轻量工具很轻松。如果打算在会话里一直开着浏览器,选 Small,4 vCPU、4 GB,$8/月。两者都是 NAT 套餐,在这里没有影响:远程桌面走的是你的 SSH 端口。

如果你真正需要的是 Windows 软件,Windows VPS 可以直接运行,Windows-Small 起价 $11/月。Ubuntu 24.04 在 Ubuntu VPS 页面上,所有 VPS Linux 套餐都可选。支付方式为 Base、Ethereum 或 Polygon 网络上的 USDT、USDC 或 ETH。

常见问题

能用 Windows 自带的远程桌面应用连接吗?

能。xrdp 使用 RDP 协议,所以 Windows 自带的远程桌面连接、macOS 上的 Windows App,以及 Linux 上的 Remmina 或 xfreerdp 都可以用。连接的是经由 SSH 隧道的 localhost,而不是服务器地址。

NAT 套餐上能用吗?

能。RDP 连接走在 SSH 里面,而 SSH 正是 NAT 套餐转发到你服务器的唯一端口。本指南在所有套餐上都推荐这种做法,因为 3389 端口对互联网保持关闭。

桌面要用多少内存?

在我们的测试服务器上,一个 XFCE 会话大约增加了 360 MB:已用内存从 388 MB 涨到 747 MB。2 GB 的 Micro 套餐足够跑桌面和轻量工具。如果要在会话里用浏览器,4 GB 会更从容。

出现黑屏或 "Oh no! Something has gone wrong",怎么回事?

xrdp 启动的是 GNOME 而不是 XFCE。第 1 步的软件包会顺带装上 GNOME 的会话管理器,Ubuntu 会把它设为系统默认。为登录的用户创建内容为 xfce4-session 的 ~/.xsession,然后重新连接。

能用 root 通过 RDP 登录吗?

xrdp 默认允许(/etc/xrdp/sesman.ini 里的 AllowRootLogin=true),但还是用带 sudo 的普通用户更好。要禁止 root,把它设为 AllowRootLogin=false 并重启 xrdp。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。