有些任务在图形桌面下更容易完成,比如在远程机器上运行浏览器、图形工具或桌面应用。XFCE 足够轻量,适合小型服务器,而 TigerVNC 让你可以在自己的电脑上看到它。本文在 VPS Linux Infrawire 上完成配置,并且 VNC 端口永远不会暴露到互联网:只能通过 SSH 隧道访问。
📋 前提条件
- 一台运行 Ubuntu 24.04 或 Debian 12、可用 root 通过 SSH 登录的 VPS(在客户中心可以找到 VPS 的 IP 和 root 密码)。
- 至少 2 GB 内存,以获得流畅的桌面体验。
- 本地电脑上有 SSH 客户端和 VNC 查看器(RealVNC Viewer 或 TigerVNC Viewer)。
- 一个普通用户账号:不要以 root 身份运行桌面。
📦 安装 XFCE 和 TigerVNC
先更新系统,再安装桌面和服务器。dbus-x11 可避免常见的灰屏问题。
Bashapt update && apt upgrade -y apt install -y xfce4 xfce4-goodies tigervnc-standalone-server tigervnc-common dbus-x11
如果还没有专用用户,请先创建:
Bashadduser USER usermod -aG sudo USER
🔑 设置 VNC 密码与会话
切换到该用户并设置 VNC 密码(最多只有前 8 个字符有效):
Bashsu - USER vncpasswd
对于只读密码的提问,回答 n。然后让 TigerVNC 启动 XFCE:
Bashmkdir -p ~/.vnc cat > ~/.vnc/xstartup <<'EOF' #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4 EOF chmod +x ~/.vnc/xstartup
手动测试,只监听 localhost:
Bashvncserver :1 -localhost yes -geometry 1920x1080 -depth 24 vncserver -list vncserver -kill :1
⚙️ 用 systemd 自动启动
回到 root,创建一个为你的用户运行会话的单元文件。显示号 :1 对应 TCP 端口 5901。
INI1# /etc/systemd/system/vncserver@.service 2[Unit] 3Description=TigerVNC server on display %i 4After=network.target 5 6[Service] 7Type=forking 8User=USER 9Group=USER 10WorkingDirectory=/home/USER 11PIDFile=/home/USER/.vnc/%H:%i.pid 12ExecStartPre=-/usr/bin/vncserver -kill :%i 13ExecStart=/usr/bin/vncserver :%i -localhost yes -geometry 1920x1080 -depth 24 14ExecStop=/usr/bin/vncserver -kill :%i 15 16[Install] 17WantedBy=multi-user.target
Bashsystemctl daemon-reload systemctl enable --now vncserver@1.service systemctl status vncserver@1.service
如需第二个用户,请用另一个名称复制该单元文件,改用那个用户和显示号 :2(端口 5902)。
🔒 通过 SSH 隧道连接
-localhost yes 选项让 VNC 只监听 127.0.0.1,因此外部无法访问。在你自己的电脑上建立隧道:
Bashssh -N -L 5901:localhost:5901 USER@VPS_IP
保持该窗口打开。在 VNC 查看器中连接 localhost:5901 并输入 VNC 密码。同样的命令在 Windows PowerShell 和 macOS 终端中都能使用。不要在任何防火墙中放行 5901 端口。
✅ 验证
在 VPS 上确认 VNC 只监听回环地址:
Bashss -tlnp | grep 5901 systemctl is-active vncserver@1.service
你应当看到 127.0.0.1:5901,而不是 0.0.0.0:5901。在本地电脑上,隧道建立后查看器应显示 XFCE 桌面。
🛠️ 故障排查
灰屏或没有桌面。 检查 ~/.vnc/xstartup 是否可执行、dbus-x11 是否已安装,并用 cat ~/.vnc/*.log 查看日志。最常见的原因是缺少 exec startxfce4 这一行。
“A VNC server is already running as :1”。 残留了过期的锁文件。执行 vncserver -kill :1,若仍存在则删除 /tmp/.X1-lock 和 /tmp/.X11-unix/X1,然后重启服务。
隧道拒绝连接。 服务多半已停止:请检查 systemctl status vncserver@1.service。同时确认本机的 5901 端口没有被占用,或换一个端口,例如 -L 5999:localhost:5901。
🎉 你的 VPS 现在提供一个私有的 XFCE 桌面,只能通过你的 SSH 隧道访问。