在 Ubuntu 上使用 TigerVNC 远程控制的完整步骤
一 环境准备与安装
- 更新索引并安装 TigerVNC(桌面环境请提前安装,如未安装可先装 ubuntu-desktop 或 xfce4):
- sudo apt update
- sudo apt install -y tigervnc-standalone-server tigervnc-common
- 设置 VNC 访问密码(会在 ~/.vnc/passwd 保存):
- vncpasswd(建议仅设操作密码,不启用仅查看密码)
- 端口说明:显示编号 :1 对应端口 5901,:2 对应 5902,以此类推
二 配置桌面环境与 xstartup
- 若未生成配置目录,可先执行一次 vncserver 再 kill 掉,生成 ~/.vnc:
- vncserver
- vncserver -kill :1
- 编辑 ~/.vnc/xstartup,按所用桌面选择其一(务必 chmod +x ~/.vnc/xstartup):
Xfce(轻量稳定,推荐)
- #!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
GNOME(Ubuntu 默认)
- #!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” &
gnome-session &
三 启动与防火墙
- 启动会话(示例:显示编号 :1,分辨率 1920x1080,颜色深度 24):
- vncserver :1 -geometry 1920x1080 -depth 24
- 如仅监听本地导致外部连不上,使用:
- vncserver :1 -localhost no
- 查看/结束会话:
- vncserver -list
- vncserver -kill :1
- 防火墙放行(UFW):
- sudo ufw allow 5901/tcp && sudo ufw reload
四 客户端连接与加密方式
- 直连(明文,适合内网):在客户端输入 服务器IP:5901(或 IP:1)
- 推荐通过 SSH 隧道加密(更安全,适合公网/云主机):
- 本地端口转发:ssh -L 5901:127.0.0.1:5901 用户名@服务器IP
- 客户端连接:localhost:5901(或 localhost:1)
五 常见问题与开机自启
- 连接超时/被拒绝(仅监听 127.0.0.1):启动时加 -localhost no
- 黑屏/灰屏:确认已安装桌面环境(如 ubuntu-desktop 或 xfce4),并使用对应 xstartup
- 开机自启(systemd 模板,按需修改用户名与分辨率/色彩深度):
-
新建:sudo nano /etc/systemd/system/vncserver@.service
-
示例内容:
[Unit]
Description=Start TigerVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=你的用户名
Group=你的用户名
WorkingDirectory=/home/你的用户名
PIDFile=/home/你的用户名/.vnc/%H:590%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1920x1080 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
-
启用与启动:
- sudo systemctl daemon-reload
- sudo systemctl enable --now vncserver@1.service
- 多用户映射(可选,Ubuntu 22.04 常见做法):
- 编辑 /etc/tigervnc/vncserver.users,添加如::1=用户名(将显示编号与系统用户对应)