在 Ubuntu 20.04 云服务器上配置图形化界面(GUI),核心思路其实就两步:装桌面环境 + 开远程协议。
但这里有个巨大的坑需要先说清楚:绝大多数云厂商的默认安全组/防火墙策略,以及 Linux 本身的安全机制,都不推荐直接通过 VNC 或 RDP 连接裸奔的 GUI。 尤其是对于生产环境,这极其不安全且性能极差。
如果你是为了开发调试、运行需要 GUI 的应用(如浏览器测试、某些 IDE),或者单纯想有个可视化的操作习惯,以下是经过验证的最稳妥方案。我会分步骤讲,避免你踩坑。
第一步:基础环境准备
假设你已经通过 SSH 登录到了服务器。首先更新源并安装必要的依赖:
sudo apt update
sudo apt upgrade -y
第二步:选择并安装桌面环境
Ubuntu 默认没有预装完整的桌面环境。为了节省资源并保持稳定,我们通常不装最重的 GNOME(除非你内存够大,比如 8G+),而是选择轻量级的 XFCE 或 LXDE。这里以 XFCE 为例,它在性能和功能之间平衡得最好。
# 安装 XFCE 桌面环境
sudo apt install xfce4 xfce4-goodies -y
# 同时安装一些常用的辅助工具,比如字体和中文支持(防止乱码)
sudo apt install language-pack-zh-han* fonts-noto-cjk -y
注意:如果你的服务器内存小于 2GB,强烈建议不要装 GUI,或者只装
lxde。否则登录后系统会卡到怀疑人生。
第三步:配置远程访问协议(二选一)
这是最关键的一步。你有两种主流方式实现“远程看屏幕”:
方案 A:使用 Xrdp(推荐,体验像 Windows 远程桌面)
Xrdp 允许你使用 Windows 自带的“远程桌面连接”(RDP)客户端来连接 Linux。兼容性最好,不需要额外下载第三方软件。
-
安装 Xrdp:
sudo apt install xrdp -y -
配置启动会话(解决黑屏问题):
很多新手装完 Xrdp 后连上去是黑屏,这是因为 Xrdp 默认尝试启动 GNOME,而你可能装的是 XFCE。需要告诉它用 XFCE 启动。创建或修改配置文件:
echo "xfce4-session" > ~/.xsession重启 Xrdp 服务:
sudo systemctl restart xrdp -
开放端口:
Xrdp 默认使用 3389 端口。- 服务器内部防火墙:确保 ufw 放行了 3389。
sudo ufw allow 3389/tcp sudo ufw enable - 云平台安全组:去你的云厂商控制台(阿里云、腾讯云、AWS 等),在安全组规则中添加入方向规则,协议 TCP,端口 3389,来源 IP 设为你的本地 IP(千万不要设为 0.0.0.0/0,否则全世界都能撞库你的远程桌面)。
- 服务器内部防火墙:确保 ufw 放行了 3389。
-
连接:
在你的 Windows/Mac 电脑上打开“远程桌面连接”,输入服务器的公网 IP,用户名填你的 Linux 用户名,密码填 Linux 密码。
方案 B:使用 VNC(通用性强,适合 Mac/Linux 用户)
VNC 更传统,几乎所有平台都有客户端(如 RealVNC, TightVNC)。
-
安装 VNC Server:
sudo apt install tightvncserver -y -
初始化设置:
运行一次命令来设置 VNC 密码和分辨率:vncserver它会让你设置一个查看密码(View Password)和一个完全控制密码(Password)。记住这个密码。
-
配置开机自启和显示号:
VNC 默认监听:1端口(即 5901)。为了确保每次重启都能自动启动,可以创建一个 systemd 服务,或者简单地在/etc/rc.local中添加启动命令(不推荐太老的方式)。更规范的做法是编辑
~/.config/vncservers或使用 systemd 管理。但对于个人使用,最简单的方法是手动启动:# 先杀掉可能存在的旧实例 vncserver -kill :1 # 重新启动,指定分辨率和深度 vncserver :1 -geometry 1920x1080 -depth 24 -
开放端口:
VNC 使用 5901 端口(对应 :1)。同样需要在防火墙和安全组中放行 5901。 -
连接:
使用 VNC Viewer 客户端,地址填写IP:5901。
第四步:优化与避坑指南(重要!)
-
关于安全性:
- 绝对不要把 3389 或 5901 端口对全网开放。黑客脚本每天都在扫描这些端口进行暴力破解。
- 如果必须对外暴露,建议使用 SSH 隧道 转发,而不是直接开端口。
- SSH 隧道示例(Windows 使用 PuTTY 或命令行):
ssh -L 3389:localhost:3389 user@your_server_ip这样你本地访问
localhost:3389就会通过加密的 SSH 通道转发到服务器,无需在云厂商安全组开 3389 端口,安全性极高。
- SSH 隧道示例(Windows 使用 PuTTY 或命令行):
-
关于性能:
- 云服务器跑 GUI 本质上是“渲染在服务器上,通过网络传输画面”。带宽低、延迟高时,操作会非常卡顿。
- 建议在 Xrdp/VNC 设置中降低色彩深度(如 16 位色)和分辨率,以提升流畅度。
- 如果使用 Xrdp,可以在
~/.xsessionrc中禁用动画效果。
-
关于多用户并发:
- 默认情况下,VNC/Xrdp 只能一个用户登录。如果需要多用户同时登录,需要配置多个 Display(如 :1, :2, :3…),但这会增加复杂度,一般个人开发够用即可。
-
中文显示问题:
- 如果在远程桌面中看到中文方块,是因为缺少中文字体。请确保执行了第一步中的
fonts-noto-cjk安装。
- 如果在远程桌面中看到中文方块,是因为缺少中文字体。请确保执行了第一步中的
总结
- 追求简单、兼容性好 -> 选 Xrdp (端口 3389),用 Windows 远程桌面连。
- 跨平台、轻量级 -> 选 TightVNC (端口 5901),用 VNC Viewer 连。
- 安全第一 -> 务必使用 SSH 隧道 转发,不要在安全组直接开端口给公网。
- 资源限制 -> 如果服务器内存 < 4GB,建议谨慎使用 GUI,优先考虑命令行操作,或改用 Web 版工具(如 Code-server, Jupyter Notebook)来实现可视化交互。
按照以上步骤操作,你应该能顺利在 Ubuntu 20.04 上看到图形界面了。如果有具体报错,通常是权限或显示会话冲突问题,检查 ~/.xsession-errors 日志能快速定位。
云技术博客