Ubuntu 远程桌面配置踩坑实录:从 TightVNC 到 x11vnc 的折腾之旅
前言
最近需要在 Windows 上远程控制 Ubuntu 桌面,本以为是个简单的任务,没想到在 TightVNC 和 x11vnc 之间反复折腾,还踩了 Wayland 的坑。特此记录,供后人参考。
第一轮:TightVNC Server 的尝试
安装与初始配置
bash
sudo apt install tightvncserver -y
设置密码(最多8位):
bash
vncpasswd
启动服务:
bash
vncserver :1 -geometry 1920x1080 -depth 24
遇到的第一个坑:端口占用
执行 vncserver -list 报错:
Warning: mbwikipc:1 is taken because of /tmp/.X1-lock
Remove this file if there is no X server mbwikipc:1
Couldn't start Xtightvnc; trying default font path.
Please set correct fontPath in the vncserver script.
检查锁文件:
bash
ls -la /tmp/.X*-lock /tmp/.X11-unix/
发现残留锁文件,清理:
bash
rm -f /tmp/.X1-lock /tmp/.X11-unix/X1
pkill -f Xtightvnc
遇到的第二个坑:字体错误
启动时提示:
Couldn't start Xtightvnc; trying default font path.
Please set correct fontPath in the vncserver script.
安装字体解决:
bash
sudo apt install -y xfonts-base xfonts-100dpi xfonts-75dpi
遇到的第三个坑:灰屏问题
Windows 能连接,但显示灰蒙蒙一片,没有桌面。
原因是 ~/.vnc/xstartup 未配置。创建启动脚本:
bash
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME"
export XDG_SESSION_DESKTOP="gnome"
export XDG_SESSION_TYPE="x11"
gnome-session &
EOF
chmod +x ~/.vnc/xstartup
重启 VNC:
bash
vncserver -kill :1
vncserver :1 -geometry 1920x1080 -depth 24
TightVNC 的本质问题
配置完成后意识到:TightVNC 创建的是独立虚拟桌面(:1),不是共享当前显示器(:0)。
这意味着:
- VNC 连进去是新会话,需要重新登录
- 本地显示器和远程桌面完全独立
- 适合远程办公,不适合远程协助
第二轮:转向 x11vnc
需求变更:共享当前桌面
需要直接查看 Ubuntu 当前显示器内容,决定改用 x11vnc。
卸载 TightVNC:
bash
vncserver -kill :1 2>/dev/null || true
pkill -f Xtightvnc
sudo apt remove --purge tightvncserver -y
rm -rf ~/.vnc
安装 x11vnc:
bash
sudo apt install x11vnc -y
配置密码
bash
x11vnc -storepasswd
# 输入密码,保存到 ~/.vnc/passwd
启动 x11vnc
bash
x11vnc -display :0 -rfbport 5900 -forever -shared
注意 :必须加 -rfbauth ~/.vnc/passwd 参数,否则提示无密码警告。
最大的坑:Wayland 不支持
启动报错:
10/03/2026 14:26:51 Wayland display server detected.
10/03/2026 14:26:51 Wayland sessions are as of now only supported via -rawfb and the bundled deskshot utility. Exiting.
Ubuntu 默认使用 Wayland,而 x11vnc 不支持。
解决方案:切换回 X11
注销当前用户,在登录界面选择 "Ubuntu on Xorg":
登录界面 → 点击用户名 → 右下角齿轮图标 → 选择 "Ubuntu on Xorg"
验证会话类型:
bash
echo $XDG_SESSION_TYPE
# 输出 x11 表示成功
正确启动命令
bash
x11vnc -display :0 -rfbport 5900 -forever -shared -rfbauth ~/.vnc/passwd
参数说明:
-display :0:共享本地显示器-rfbport 5900:VNC 端口-forever:保持监听,不断开-shared:允许多客户端同时连接-rfbauth:指定密码文件
第三轮:配置开机自启
创建 systemd 服务:
bash
sudo nano /etc/systemd/system/x11vnc.service
内容:
ini
[Unit]
Description=x11vnc server
After=display-manager.service network.target
[Service]
Type=simple
User=mbwiki
ExecStart=/usr/bin/x11vnc -display :0 -rfbport 5900 -forever -shared -rfbauth /home/mbwiki/.vnc/passwd
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
启用服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable x11vnc
sudo systemctl start x11vnc
防火墙放行:
bash
sudo ufw allow 5900/tcp
方案对比总结
| 特性 | TightVNC | x11vnc |
|---|---|---|
| 桌面类型 | 新建虚拟桌面 | 共享当前桌面 |
| 显示号 | :1, :2... | :0(物理显示器) |
| 会话独立性 | 独立,需重新登录 | 同步,已登录状态 |
| Wayland 支持 | 不支持 | 不支持(需 X11) |
| 适用场景 | 远程独立办公 | 远程协助/监控 |
| 性能 | 较好 | 略低(屏幕抓取) |
踩坑心得
- 先确认会话类型:Ubuntu 22.04+ 默认 Wayland,很多传统工具不兼容
- 锁文件残留:VNC 异常退出后锁文件不自动清理,需手动删除
- 密码文件路径 :x11vnc 不会自动使用 ~/.vnc/passwd,必须显式指定
-rfbauth - 灰屏≠连接失败:TightVNC 灰屏通常是 xstartup 配置问题,不是网络问题
- 端口规划:xrdp(3389)、VNC(5900+) 可并存,但注意防火墙放行
最终配置
当前稳定运行的方案:
- 桌面会话:Ubuntu on Xorg(非 Wayland)
- 远程工具:x11vnc
- 连接地址:
IP:5900 - 密码验证:~/.vnc/passwd
- 自启动:systemd 服务
Windows 使用 RealVNC/TightVNC Viewer 连接,即可实时查看 Ubuntu 当前屏幕。
附录:快速诊断命令
bash
# 检查会话类型
echo $XDG_SESSION_TYPE
# 检查 VNC 端口
sudo ss -tlnp | grep 5900
# 检查 x11vnc 进程
ps aux | grep x11vnc
# 查看日志
sudo journalctl -u x11vnc -f
# 手动测试启动
x11vnc -display :0 -rfbport 5900 -forever -shared -rfbauth ~/.vnc/passwd
折腾完毕,希望这篇记录能帮你少走弯路。