Ubuntu 远程桌面配置踩坑实录:从 TightVNC 到 x11vnc 的折腾之旅

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)
适用场景 远程独立办公 远程协助/监控
性能 较好 略低(屏幕抓取)

踩坑心得

  1. 先确认会话类型:Ubuntu 22.04+ 默认 Wayland,很多传统工具不兼容
  2. 锁文件残留:VNC 异常退出后锁文件不自动清理,需手动删除
  3. 密码文件路径 :x11vnc 不会自动使用 ~/.vnc/passwd,必须显式指定 -rfbauth
  4. 灰屏≠连接失败:TightVNC 灰屏通常是 xstartup 配置问题,不是网络问题
  5. 端口规划: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

折腾完毕,希望这篇记录能帮你少走弯路。

相关推荐
网硕互联的小客服1 小时前
服务器防火墙是如何区分正常流量和攻击流量?
运维·服务器·网络
安当加密2 小时前
基于 RADIUS 的 Linux 服务器双因子认证:从 FreeRADIUS 到轻量级 ASP 方案的演进
linux·运维·服务器
66清小风2 小时前
服务器安装操作系统报X or window manager startup failed, falling back to mode
linux·kylin
A-刘晨阳2 小时前
【Prometheus】Alertmanager配置钉钉告警
运维·云原生·钉钉·prometheus·监控
wangqiaowq3 小时前
llama.cpp 启动命令优化
运维·服务器
double2li3 小时前
linux/unix 段错误捕获【续】
linux·运维·服务器·网络·unix
allway23 小时前
Linux / Unix last Command Examples
linux·运维·unix
dashizhi20153 小时前
禁止复制电脑文件、电脑机密数据禁止拷贝、禁止电脑文件复制到U盘和移动硬盘的方法
运维·网络·stm32·安全·电脑
嘿嘿嘿x34 小时前
MobaXterm 成功连接 Ubuntu 虚拟机
linux·运维·ubuntu