主题
Ubuntu 宿主机 TigerVNC 安装与配置手册
适用范围
- 操作系统:Ubuntu 22.04 LTS
- 桌面环境:GNOME(已安装) + XFCE4(作为 VNC 桌面)
- VNC 软件:TigerVNC Standalone Server
- 运行用户:普通用户(示例为
xxx)
一、安装前检查
1.1 确认系统信息
bash
uname -a
cat /etc/os-release | head -5
whoami
systemctl get-default1.2 确认是否已有桌面环境
bash
which gnome-session xfce4-session startx1.3 检查现有 VNC 服务
bash
dpkg -l | grep -iE "vnc|tiger|tight|x11vnc"
ps aux | grep -E "Xvnc|Xtigervnc|Xorg" | grep -v grep
ss -tlnp | grep -E "5900|5901|5902"注意:libvirt/QEMU 虚拟机控制台默认占用
5900端口,宿主机的 VNC 服务应选择其他端口(如5901、5902)。
1.4 检查防火墙
bash
sudo ufw status verbose二、安装 TigerVNC 和 XFCE4
2.1 更新软件源
bash
sudo apt update2.2 安装 TigerVNC 和 XFCE4
bash
sudo DEBIAN_FRONTEND=noninteractive apt install -y \
tigervnc-standalone-server \
tigervnc-common \
xfce4 \
xfce4-goodies \
dbus-x11三、配置 VNC
3.1 创建 VNC 启动脚本
bash
mkdir -p ~/.vnc
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
# 启动新的 dbus 会话,避免与现有 GNOME 会话冲突
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
eval $(dbus-launch --sh-syntax --exit-with-session)
fi
# 启动 XFCE 桌面
exec startxfce4
EOF
chmod +x ~/.vnc/xstartup3.2 设置 VNC 密码
bash
vncpasswd按提示输入两次密码。是否设置 view-only 密码按需选择。
密码文件保存在:
text
~/.vnc/passwd四、配置 systemd 自启动服务
4.1 创建启动包装脚本
因为 TigerVNC 的 vncserver 命令会 fork 后退出,直接使用 Type=forking 会遇到 PID 文件权限问题。这里使用一个包装脚本让 systemd 能正确管理进程。
bash
sudo tee /usr/local/bin/vncserver-wrapper.sh << 'EOF'
#!/bin/bash
DISPLAY_NUM="${1:-:1}"
NUM=$(echo "$DISPLAY_NUM" | sed 's/://')
PORT=$((5900 + NUM))
export USER="xxx"
export HOME="/home/xxx"
export DISPLAY=":$NUM"
/usr/bin/vncserver "$DISPLAY_NUM" -geometry 1920x1080 -depth 24 -localhost no
PIDFILE="$HOME/.vnc/$(hostname):${PORT}.pid"
if [ -f "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
echo "Monitoring VNC PID $PID on $DISPLAY_NUM (port $PORT)"
while kill -0 "$PID" 2>/dev/null; do
sleep 5
done
fi
EOF
sudo chmod +x /usr/local/bin/vncserver-wrapper.sh根据实际用户名修改
USER和HOME。
4.2 创建 systemd 服务文件
bash
sudo tee /etc/systemd/system/vncserver@.service << 'EOF'
[Unit]
Description=Remote desktop service (VNC) for display :%i
After=syslog.target network.target
[Service]
Type=simple
User=xxx
PAMName=login
WorkingDirectory=/home/xxx
ExecStartPre=/bin/sh -c "/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :"
ExecStart=/usr/local/bin/vncserver-wrapper.sh :%i
ExecStop=/usr/bin/vncserver -kill :%i
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF根据实际用户名修改
User和WorkingDirectory。
4.3 启动并启用服务
以 display :2(端口 5902)为例:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@2.service五、防火墙配置
5.1 添加 ufw 规则
bash
sudo ufw allow 5902/tcp comment 'TigerVNC'
sudo ufw allow 22/tcp comment 'SSH'5.2 按需启用 ufw
如果当前 ufw 未启用,可以按需启用:
bash
sudo ufw enable注意:启用 ufw 前请确认已放行 SSH(22)端口,避免断开远程连接。
六、验证连接
6.1 检查服务状态
bash
sudo systemctl status vncserver@2.service6.2 检查监听端口
bash
ss -tlnp | grep 5902预期输出:
text
LISTEN 0 5 0.0.0.0:5902 0.0.0.0:* users:(("Xtigervnc",pid=...,fd=...))6.3 使用 VNC Viewer 连接
text
<宿主机IP>:5902密码为前面设置的 VNC 密码。
七、常见问题排查
7.1 A X11 server is already running for display :1
原因:本地已有 Xorg 会话占用 :1。
解决:换用其他 display 号,例如 :2(端口 5902)。
bash
sudo systemctl enable --now vncserver@2.service7.2 systemd 报错 PID file is not owned by root
原因:TigerVNC 生成的 PID 文件属于运行用户,systemd Type=forking 模式下权限校验失败。
解决:改用 Type=simple + 包装脚本(见 4.1)。
7.3 XFCE 启动后立即退出
原因:与现有 GNOME 会话的 D-Bus 冲突。
解决:在 ~/.vnc/xstartup 中启动独立的 D-Bus 会话:
bash
eval $(dbus-launch --sh-syntax --exit-with-session)7.4 端口 5900 被占用
原因:libvirt/QEMU 虚拟机控制台默认监听 5900。
解决:宿主机的 VNC 服务使用 5901、5902 等端口。
7.5 连接后黑屏
原因:桌面环境未正确启动,或 xstartup 脚本有问题。
排查:
bash
tail -50 ~/.vnc/$(hostname):5902.log八、管理命令
bash
# 查看状态
sudo systemctl status vncserver@2.service
# 启动
sudo systemctl start vncserver@2.service
# 停止
sudo systemctl stop vncserver@2.service
# 重启
sudo systemctl restart vncserver@2.service
# 开机自启
sudo systemctl enable vncserver@2.service
# 禁止开机自启
sudo systemctl disable vncserver@2.service
# 手动启动(调试用)
vncserver :2 -geometry 1920x1080 -depth 24 -localhost no
# 手动停止
vncserver -kill :2九、新增其他 VNC 会话
如需同时开启多个 VNC 桌面,例如 :3(端口 5903):
bash
sudo systemctl enable --now vncserver@3.service
sudo ufw allow 5903/tcp连接地址:
text
<宿主机IP>:5903十、安全建议
- 不要使用弱密码:生产环境应使用强密码或禁用密码认证改用 SSH 隧道。
- 限制访问来源:
bash
sudo ufw allow from 192.168.122.0/24 to any port 5902- 使用 SSH 隧道:更安全的访问方式是通过 SSH 转发 VNC 端口。
bash
ssh -L 5902:localhost:5902 user@<宿主机IP>然后本地 VNC Viewer 连接 localhost:5902。
- 禁用 VNC 密码文件权限过宽:
bash
chmod 600 ~/.vnc/passwd参考命令汇总
bash
# 安装
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt install -y tigervnc-standalone-server tigervnc-common xfce4 xfce4-goodies dbus-x11
# 配置
mkdir -p ~/.vnc
vncpasswd
sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@2.service
sudo ufw allow 5902/tcp
# 验证
sudo systemctl status vncserver@2.service
ss -tlnp | grep 5902记录时间:2026-07-16
涉及版本:Ubuntu 22.04.5 LTS, TigerVNC 1.12.0, XFCE 4.16