努力
加油

Ubuntu 20.04或22.04如何配置远程图形化登录?

在 Ubuntu 20.04 或 22.04 上配置远程图形化登录,核心思路其实就两个方向:VNC 和 RDP。

作为在国内云计算环境(比如阿里云、腾讯云、华为云等)下工作的开发者,我强烈建议优先选择 RDP (Remote Desktop Protocol),而不是传统的 VNC。原因很简单:VNC 默认走的是 framebuffer 或者 X11 转发,带宽占用大、延迟高,而且很多云服务器厂商的安全组默认没开 5900 端口;而 RDP 协议更成熟,支持音频重定向、剪贴板共享、分辨率自适应,体验更接近本地 Windows 桌面。

下面我会以 xrdp 为核心方案,结合 Ubuntu 默认的 GNOME 桌面环境,给出最稳妥的配置步骤。如果你用的是轻量级桌面(如 XFCE),步骤略有不同,但原理一致。


一、 为什么选 xrdp?

Ubuntu 默认没有开启远程桌面服务。xrdp 是一个开源的 RDP 服务器,它能完美兼容 Windows 自带的“远程桌面连接”客户端,也支持 Remmina、FreeRDP 等跨平台客户端。

注意:不要尝试用 VNC(如 TightVNC, TigerVNC)配合 gnome-remote-desktop 来做生产环境的日常办公,除非你只是偶尔调试一下。VNC 在公网环境下容易遇到卡顿、黑屏问题,且安全性配置相对繁琐。


二、 标准配置流程(GNOME 桌面环境)

1. 安装 xrdp

打开终端,执行以下命令:

sudo apt update
sudo apt install xrdp -y

安装完成后,服务通常会自动启动。你可以检查状态:

sudo systemctl status xrdp

如果显示 active (running),说明服务正常。如果没有,手动启动并设置开机自启:

sudo systemctl enable xrdp
sudo systemctl start xrdp

2. 关键配置:解决黑屏/闪退问题(重点!)

这是新手最容易踩坑的地方。Ubuntu 20.04/22.04 默认使用 Wayland 或特定的 GNOME Session 管理,直接连 xrdp 很容易出现登录后黑屏,或者提示“会话已终止”。

我们需要修改 xrdp 的启动脚本,让它正确加载用户的 session。

步骤如下:

  1. 备份原始配置:

    sudo cp /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.bak
  2. 编辑 startwm.sh:

    sudo nano /etc/xrdp/startwm.sh
  3. 在文件末尾(test -x /etc/X11/Xsession 之前或之后,建议在文件最后添加以下内容):

    # 强制使用 Xorg 而非 Wayland,因为 xrdp 对 Wayland 支持不佳
    export XDG_SESSION_TYPE=x11
    
    # 如果是 Ubuntu 22.04,可能需要显式指定 GNOME 会话
    # 注意:不同版本路径可能略有差异,一般不需要改这里,除非上面方法无效
    
    # 保留原有的 session 启动逻辑
    . /etc/X11/Xsession

    更稳健的做法:有些用户反馈需要注释掉 /etc/X11/Xsession 这一行,然后手动调用 gnome-session。但对于大多数标准安装,上述 export XDG_SESSION_TYPE=x11 已经足够。如果依然黑屏,可以尝试将文件最后改为:

    unset DBUS_SESSION_BUS_ADDRESS
    export XDG_SESSION_TYPE=x11
    exec /usr/bin/gnome-session --session=ubuntu

    (注意:--session=ubuntu 是 Ubuntu 特有的会话名,Fedora 等可能是 gnome-classic)

  4. 保存退出(Ctrl+O, Enter, Ctrl+X)。

  5. 重启 xrdp 服务:

    sudo systemctl restart xrdp

3. 防火墙与安全组配置

本地防火墙(UFW):

sudo ufw allow 3389/tcp
sudo ufw reload

云服务器安全组(重要!):

登录你的云厂商控制台(阿里云/腾讯云/华为云等),找到你的实例,在“安全组”规则中:

  • 添加入方向规则:
    • 协议:TCP
    • 端口范围:3389
    • 授权对象:0.0.0.0/0(测试时)或你自己的 IP 段(生产环境推荐限制 IP)

警告:不要直接在公网暴露 3389 端口而不做任何防护。建议使用跳板机、SSH 隧道,或者至少配置强密码 + Fail2ban。


三、 连接测试

  1. 在你的 Windows 电脑上,按 Win + R,输入 mstsc,回车。
  2. 输入服务器的公网 IP。
  3. 点击连接。
  4. 在弹出的 xrdp 登录窗口中:
    • Session: 选择 Xorg(不要选 VNC,除非你特意装了 VNC 后端)。
    • Username: 你的 Linux 用户名。
    • Password: 对应的 Linux 密码。
  5. 点击 OK。

如果一切顺利,你应该能看到完整的 GNOME 桌面。


四、 常见问题排查

Q1: 登录后黑屏,几秒后断开?

  • 原因:通常是 Wayland 冲突或权限问题。
  • 解决:
    1. 确保 startwm.sh 中设置了 export XDG_SESSION_TYPE=x11。
    2. 检查 /var/log/xrdp.log 和 /var/log/xrdp-sesman.log 是否有报错。
    3. 尝试在本地终端运行 sudo reboot 重启机器后再试。
    4. 如果是 Ubuntu 22.04,确认是否安装了 gnome-shell-extension-appindicator 等必要组件,有时缺少依赖会导致会话崩溃。

Q2: 中文乱码?

  • 原因:系统缺少中文字体或 locale 未正确设置。
  • 解决:
    sudo apt install fonts-wqy-zenhei fonts-wqy-microhei
    sudo dpkg-reconfigure locales
    # 选择 zh_CN.UTF-8

    重启后生效。

Q3: 剪贴板无法同步?

  • 原因:xrdp 默认不启用剪贴板同步,或者权限不足。
  • 解决:
    1. 确保安装了 xrdp-pulseaudio-installer(如果需要音频重定向)。
    2. 在 Windows 远程桌面客户端,点击“显示选项” -> “本地资源” -> “详细信息”,勾选“剪贴板”。
    3. 如果仍不行,尝试在 Linux 端安装 clipit 或 parcellite 等剪贴板管理器,并在 ~/.xprofile 中启动它们。

Q4: 多显示器支持?

  • xrdp 对多显示器的支持有限。通常只能看到一个主屏幕。如果需要扩展显示器,建议先在 Linux 端配置好虚拟显示器或使用 NVIDIA 驱动的多头模式,但这属于高级运维范畴,普通用户建议单屏使用。

五、 替代方案:KVM over IP / NoMachine

如果你发现 xrdp 性能还是不够好(比如看视频、做设计),可以考虑 NoMachine 或 Apache Guacamole。

  • NoMachine:基于 NX 协议,压缩率高,延迟低,适合高带宽需求场景。免费个人版功能很强。
  • Guacamole:HTML5 无客户端接入,适合通过浏览器访问,但部署复杂,需要 Java 环境。

对于大多数开发者日常写代码、跑 IDE、浏览网页,xrdp + Xorg 是最平衡的选择。


六、 安全建议(必读)

  1. 不要使用 root 登录:创建一个新的普通用户,赋予 sudo 权限,然后用这个用户登录远程桌面。
  2. 禁用密码登录,改用密钥:虽然 RDP 本身不支持 SSH 密钥认证,但你可以通过 SSH 隧道来映射 3389 端口,实现加密传输:
    ssh -L 3389:localhost:3389 user@your-server-ip

    然后在本地连接 localhost:3389。这样即使服务器开了 3389,也是通过 SSH 通道加密的,无需开放公网端口。

  3. 定期更新系统:sudo apt upgrade,修复已知漏洞。

总结:Ubuntu 20.04/22.04 远程桌面,装 xrdp,设 XDG_SESSION_TYPE=x11,开安全组 3389,用 Windows 自带 MSTSC 连接。这套流程经过大量实战验证,稳定可靠。