在 Ubuntu Server(无图形界面的最小安装)上配置 VNC 远程图形界面,需手动安装桌面环境 + VNC 服务器。以下是安全、稳定、推荐的方案(以 Ubuntu 22.04/24.04 为例,使用 tigervnc + XFCE,避免 x11vnc 或老旧 vino 的兼容性与安全问题):
✅ 推荐组合:
xfce4(轻量、稳定) +tigervnc-standalone-server(官方维护、支持加密、性能好)
⚠️ 不推荐:gnome(资源高)、realvnc(社区版功能受限)、tightvnc(已过时)
✅ 一、基础准备(SSH 登录后执行)
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装必要依赖(编译工具、字体等)
sudo apt install -y software-properties-common curl wget gnupg2
✅ 二、安装轻量桌面环境(XFCE)
sudo apt install -y xfce4 xfce4-goodies
# 可选:安装中文支持(如需中文界面)
sudo apt install -y language-pack-zh-hans fonts-wqy-microhei ttf-wqy-microhei
💡 XFCE 启动快、内存占用低(约 300–500MB),适合服务器。
✅ 三、安装并配置 TigerVNC 服务
1. 安装 TigerVNC
sudo apt install -y tigervnc-standalone-server tigervnc-common
2. 为当前用户(如 ubuntu)设置 VNC 密码(必须先设置!)
# 切换到目标用户(勿用 root!)
su - ubuntu
vncpasswd
# ➤ 输入并确认密码(会保存到 ~/.vnc/passwd)
# ➤ 提示是否设置「仅查看」密码?输入 n(否)
exit
🔐 密码存储在
~/.vnc/passwd,权限自动设为600;切勿用 root 用户运行 VNC。
3. 创建 VNC 启动脚本 ~/.vnc/xstartup
mkdir -p ~/.vnc
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
EOF
chmod +x ~/.vnc/xstartup
✅ 此脚本确保启动 XFCE 桌面,并加载用户配置(如
.Xresources)。
❗ 若跳过此步,VNC 将黑屏或报错No session manager found。
4. (可选)配置分辨率与 DPI(提升体验)
编辑 ~/.vnc/config:
mkdir -p ~/.vnc
cat > ~/.vnc/config << EOF
geometry=1366x768
dpi=96
localhost
# 只允许本地端口转发(配合 SSH 隧道更安全)
# 更多选项见:man vncserver_config
EOF
✅ 四、创建 systemd 服务(开机自启、管理方便)
创建服务文件(以用户 ubuntu 为例):
sudo tee /etc/systemd/system/vncserver@.service << 'EOF'
[Unit]
Description=TigerVNC server for %i
After=syslog.target network.target
[Service]
Type=forking
User=%i
PAMName=login
PIDFile=/home/%i/.vnc/%H:%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -depth 24 -geometry 1366x768
ExecStop=/usr/bin/vncserver -kill %i
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
启用服务(绑定到用户 ubuntu,端口 :1 → 即 5901):
# 重载 systemd 配置
sudo systemctl daemon-reload
# 启用开机自启(仅对 ubuntu 用户)
sudo systemctl enable vncserver@ubuntu.service
# 启动服务
sudo systemctl start vncserver@ubuntu.service
# 查看状态(应显示 active (running))
sudo systemctl status vncserver@ubuntu.service
🌐 默认端口映射:
:1→5901,:2→5902… 可通过vncserver :2启动多会话。
✅ 五、安全访问(强烈建议!)
✅ 方案 A:SSH 隧道(最安全,推荐 ✅)
在本地电脑(macOS/Linux/WSL)执行:
ssh -L 5901:127.0.0.1:5901 -C -N -f -l ubuntu your-server-ip
然后用 VNC 客户端连接 localhost:5901(密码即 vncpasswd 设置的密码)。
🔒 所有流量经 SSH 加密,无需开放 5901 端口到公网!
✅ 方案 B:云服务器安全组(仅限可信网络)
- 在阿里云/腾讯云/AWS 控制台,仅放行
5901端口给你的 IP(非0.0.0.0/0!) - 同时在 Ubuntu 防火墙中放行:
sudo ufw allow from YOUR_TRUSTED_IP to any port 5901 sudo ufw enable
⚠️ 绝对禁止直接暴露
5901到公网!VNC 协议本身不加密(即使 TigerVNC 支持 TLS,配置复杂且客户端支持差)。
✅ 六、客户端连接
| 平台 | 推荐客户端 |
|---|---|
| Windows | TigerVNC Viewer(开源免费) |
| macOS | Chicken of the VNC 或 RealVNC Viewer |
| Linux | vinagre、remmina 或 tigervnc-viewer |
连接地址:your-server-ip:5901(若走 SSH 隧道则填 localhost:5901)
✅ 七、故障排查(高频问题)
| 现象 | 原因与解决 |
|---|---|
| 黑屏 / 灰屏 / 无法登录 | ~/.vnc/xstartup 权限不对或内容错误 → chmod +x ~/.vnc/xstartup,检查是否含 exec startxfce4 或 startxfce4 & |
| 连接被拒绝 | 服务未启动 → sudo systemctl status vncserver@ubuntu.service;端口被防火墙拦截 → sudo ufw status |
提示 Could not acquire name on session bus |
缺少 D-Bus → 在 xstartup 中添加 dbus-launch --sh-syntax --exit-with-session(见下方增强版 xstartup) |
| 中文乱码 | 安装中文字体 + 设置语言 → sudo locale-gen zh_CN.UTF-8 && sudo update-locale |
✅ 增强版 xstartup(防 dbus 报错):
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
xrdb $HOME/.Xresources
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
dbus-launch --sh-syntax --exit-with-session startxfce4 &
EOF
chmod +x ~/.vnc/xstartup
✅ 八、进阶建议(可选)
-
禁用屏幕锁(避免 VNC 被锁死):
Settings → Power Manager → Blank after → Never
Settings → Light Locker Settings → Uncheck "Enable light-locker" -
使用
systemd --user替代传统服务(更现代,但需loginctl enable-linger) -
集成 NoMachine(替代方案):比 VNC 更流畅,支持音频/USB,官网下载
✅ 总结命令速查(复制粘贴执行):
# 全流程一键(请替换 ubuntu 为你自己的用户名)
sudo apt update && sudo apt install -y xfce4 xfce4-goodies tigervnc-standalone-server
su - ubuntu -c "vncpasswd" # 设置密码
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
EOF
chmod +x ~/.vnc/xstartup
sudo cp /etc/systemd/system/vncserver@.service /etc/systemd/system/vncserver@ubuntu.service
sudo systemctl daemon-reload
sudo systemctl enable vncserver@ubuntu.service
sudo systemctl start vncserver@ubuntu.service
如需进一步优化(如 HTTPS X_X、多用户、TLS 加密),欢迎继续提问!🚀
CLOUD云计算