AutoDL 上配置远程桌面运行 3DGS / SLAM 可视化:TurboVNC + XFCE + SSH 隧道完整可行流程

一、为什么需要在 AutoDL 上使用远程桌面?

在 AutoDL 上跑深度学习训练时,大多数任务只需要 SSH、JupyterLab 或 VSCode Remote 就够了。但是当任务涉及 3DGS、SLAM、OpenCV GUI、Pangolin、RViz、SIBR Viewer 这类实时可视化程序时,仅靠命令行就不太方便了。

例如:

复制代码
cv2.imshow(...)

或者 SLAM 程序中的 Pangolin 可视化窗口、3D Gaussian Splatting 的 viewer,都需要一个图形显示环境。如果没有远程桌面,程序可能会报:

复制代码
cannot open display
Gtk-WARNING: cannot open display
xterm: Xt error: Can't open display

AutoDL 官方文档也提到,如果不是强需求,建议尽量把 imshow 改成 imsave 保存图片再看;但对于 3DGS 和 SLAM 这类需要实时观察轨迹、点云、相机位姿、渲染效果的任务,远程桌面仍然是非常必要的。AutoDL 官方远程桌面文档说明,VNC 可以把键盘鼠标事件传到远程实例,并把远程图形画面传回本地,因此可以用来运行 GUI 程序。(AutoDL)

本文记录一次在 AutoDL 容器实例中配置远程桌面的完整过程,最终使用方案是:

复制代码
AutoDL 实例内:TurboVNC Server + XFCE 桌面
本地电脑:TurboVNC Viewer / RealVNC Viewer
连接方式:SSH 隧道转发 6006 端口

二、本文参考资料

主要参考了以下资料:

AutoDL 官方远程桌面文档:官方给出了 TurboVNC 的安装方式、6006 端口启动方法,以及本地 VNC 客户端连接方式。(AutoDL)

AutoDL 官方开放端口文档:里面提到 AutoDL 实例没有独立公网 IP,60066008 会被映射到公网地址,并且协议可以选择 TCP 或 HTTP;个人用户也可以使用 SSH 隧道代理端口到本地访问。(AutoDL)

马春杰杰的 AutoDL 远程桌面博客:这篇文章也给出了基于 TurboVNC 的安装和连接流程,可以作为额外参考。(Machun Jie)

TurboVNC 官网:可以下载 TurboVNC 客户端,也可以查看官方文档。(TurboVNC)

RealVNC Viewer 官网:如果不想用 TurboVNC Viewer,也可以用 RealVNC Viewer 作为客户端。(RealVNC®)

3D Gaussian Splatting 官方仓库:3DGS 的 network viewer 默认会尝试在 localhost:6009 与训练进程通信,因此 3DGS 可视化还可能涉及额外的端口转发。(GitHub)


三、需要下载哪些程序?

本地电脑需要安装一个 VNC 客户端。推荐两种:

方案 1:TurboVNC Viewer

AutoDL 官方远程桌面文档中提供了不同系统的 TurboVNC 客户端下载入口,包括 Ubuntu、macOS 和 Windows;也可以从 TurboVNC 官网下载。(AutoDL)

方案 2:RealVNC Viewer

RealVNC Viewer 也可以连接 VNC 服务端,Windows、macOS、Linux 都有客户端。(RealVNC®)

此外,本地电脑还需要能使用 SSH。Windows 用户可以直接使用 PowerShell / CMD 里的 ssh 命令,也可以用 Xshell、MobaXterm、Termius 等工具。macOS 和 Linux 一般自带 SSH 客户端。


四、一个很容易踩的坑:不要直接用 HTTPS 公网地址连 VNC

AutoDL 的自定义服务会显示类似这样的地址:

复制代码
http://127.0.0.1:6006 -> https://xxxx.seetacloud.com:8443

很多人会直接把这个 https://xxxx.seetacloud.com:8443 填进 VNC Viewer,结果连接失败,或者显示异常。

原因是:VNC 不是普通 HTTP 服务,而是 RFB/TCP 协议 。AutoDL 的 6006/6008 公网映射支持 TCP 或 HTTP,但如果默认是 HTTP 映射,就不适合直接拿来连 VNC。AutoDL 官方端口文档也说明,60066008 的映射协议支持 TCP 或 HTTP,需要根据服务类型选择。(AutoDL)

本文最终采用更稳的方式:SSH 隧道

也就是把 AutoDL 实例里的 6006 端口转发到本地电脑的 6006 端口,然后 VNC 客户端连接:

复制代码
127.0.0.1:6006

五、最终可行安装流程

下面所有命令,除特别说明外,都在 AutoDL 实例的 SSH 终端 中执行。

1. 安装 XFCE 桌面、TurboVNC 和必要组件

AutoDL 官方远程桌面文档中给出了 TurboVNC 和图形库的基础安装命令。这里在此基础上额外补充了 xfce4xfce4-terminalthunardbus-x11 等组件,因为如果只安装基础图形库,可能能看到桌面,但终端、文件夹、应用菜单打不开。(AutoDL)

复制代码
apt update

DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \
  xorg xfce4 xfce4-terminal thunar dbus-x11 gvfs policykit-1 xdg-utils \
  libglu1-mesa-dev mesa-utils xterm xauth x11-xkb-utils \
  xfonts-base xkb-data libxtst6 libxv1 wget

安装 AutoDL 官方文档使用的 TurboVNC:

复制代码
cd /tmp

export TURBOVNC_VERSION=2.2.5
export LIBJPEG_VERSION=2.0.90

wget -q https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/vnc/libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
wget -q https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/vnc/turbovnc_${TURBOVNC_VERSION}_amd64.deb

dpkg -i libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb turbovnc_${TURBOVNC_VERSION}_amd64.deb || apt -f install -y

rm -f libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb turbovnc_${TURBOVNC_VERSION}_amd64.deb

2. 设置 VNC 密码

复制代码
mkdir -p /root/.vnc
/opt/TurboVNC/bin/vncpasswd

这里设置的密码是 VNC 远程桌面密码,不是 AutoDL 实例的 SSH 密码。


3. 配置 XFCE 启动脚本

这一步非常关键。之前遇到过"远程桌面能进入,但是双击打不开程序、文件夹和终端都没反应"的问题,最终原因是 XFCE 桌面会话没有在完整的 DBus 环境中启动。

写入如下配置:

复制代码
mkdir -p /root/.vnc

cat > /root/.vnc/xstartup <<'EOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

export XDG_RUNTIME_DIR=/tmp/runtime-root
mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"

[ -r "$HOME/.Xresources" ] && xrdb "$HOME/.Xresources"

exec dbus-launch --exit-with-session startxfce4
EOF

chmod +x /root/.vnc/xstartup
touch /root/.Xauthority

重点是这一句:

复制代码
exec dbus-launch --exit-with-session startxfce4

如果没有 dbus-launch,可能会出现 Thunar 文件管理器打不开、XFCE 终端打不开、桌面只显示但无法正常交互等问题。


4. 清理旧的 VNC 会话和端口占用

如果之前启动失败过,或者反复执行过启动命令,很容易出现:

复制代码
ListenOnTCPPort: Address already in use

这说明 6006 端口已经被旧的 VNC 进程占用。必须先清掉旧进程:

复制代码
/opt/TurboVNC/bin/vncserver -kill :1 2>/dev/null || true
pkill -9 -f "Xvnc" 2>/dev/null || true
pkill -9 -f "Xtigervnc" 2>/dev/null || true

pid=$(ss -lntp 2>/dev/null | awk '/:6006 / {print $NF}' | sed -n 's/.*pid=\([0-9]*\).*/\1/p' | head -n 1)
[ -n "$pid" ] && kill -9 "$pid" || true

rm -f /tmp/.X1-lock
rm -f /tmp/.X11-unix/X1
rm -rf /root/.cache/sessions/*

检查 6006 是否已经释放:

复制代码
ss -lntp | grep 6006

如果没有任何输出,说明端口已经空出来了。


5. 启动 VNC 服务端

复制代码
USER=root HOME=/root /opt/TurboVNC/bin/vncserver :1 \
  -geometry 1920x1080 \
  -depth 24 \
  -rfbport 6006 \
  -rfbauth /root/.vnc/passwd \
  -auth /root/.Xauthority \
  -xstartup /root/.vnc/xstartup

检查是否启动成功:

复制代码
ss -lntp | grep 6006
ps -ef | grep -E "Xvnc|xfce|dbus" | grep -v grep

如果能看到 6006 端口处于监听状态,并且有 Xvncxfcedbus 相关进程,就说明服务端基本启动成功。


六、本地电脑通过 SSH 隧道连接

在 AutoDL 控制台复制 SSH 登录命令,通常类似:

复制代码
ssh -p 12345 root@region-xx.autodl.com

把它改成端口转发命令:

复制代码
ssh -CNg -L 6006:127.0.0.1:6006 root@你的AutoDL主机 -p 你的AutoDL端口

例如原始登录命令是:

复制代码
ssh -p 48332 root@region-3.autodl.com

那么隧道命令就是:

复制代码
ssh -CNg -L 6006:127.0.0.1:6006 root@region-3.autodl.com -p 48332

执行后这个终端会像"卡住"一样,没有输出。这是正常的,表示隧道正在保持连接。不要关掉这个窗口。

然后打开 TurboVNC Viewer 或 RealVNC Viewer,连接:

复制代码
127.0.0.1:6006

输入前面设置的 VNC 密码,即可进入 AutoDL 的远程桌面。


七、测试 GUI 是否正常

进入远程桌面后,可以在 SSH 终端中测试:

复制代码
export DISPLAY=:1
export XAUTHORITY=/root/.Xauthority

xterm &
xfce4-terminal &
thunar &

如果远程桌面里能弹出 xterm、XFCE 终端和文件管理器,说明桌面环境是正常的。

也可以测试 OpenGL:

复制代码
export DISPLAY=:1
glxinfo | grep -E "OpenGL vendor|OpenGL renderer|OpenGL version"

如果要运行自己的 SLAM 或 3DGS 程序,也需要在同一个终端里设置:

复制代码
export DISPLAY=:1
export XAUTHORITY=/root/.Xauthority

然后再运行程序:

复制代码
conda activate 你的环境
python your_slam_script.py

或者:

复制代码
conda activate 你的环境
python train.py ...

AutoDL 官方文档也强调,启动 GUI 程序前需要设置 export DISPLAY=:1,并且要在同一个终端中执行后续命令。(AutoDL)


八、常见问题与解决办法

问题 1:远程桌面能进入,但是双击打不开终端和文件夹

一般是 XFCE 会话不完整,或者缺少 DBus 组件。解决办法是安装:

复制代码
apt install -y dbus-x11 xfce4 xfce4-terminal thunar gvfs policykit-1 xdg-utils xterm

然后确保 /root/.vnc/xstartup 中使用:

复制代码
exec dbus-launch --exit-with-session startxfce4

最后清理旧会话并重启 VNC。


问题 2:日志里出现 Address already in use

报错类似:

复制代码
ListenOnTCPPort: Address already in use

说明 6006 端口已经被旧的 VNC 进程占用。执行:

复制代码
/opt/TurboVNC/bin/vncserver -kill :1 2>/dev/null || true
pkill -9 -f "Xvnc" 2>/dev/null || true

pid=$(ss -lntp 2>/dev/null | awk '/:6006 / {print $NF}' | sed -n 's/.*pid=\([0-9]*\).*/\1/p' | head -n 1)
[ -n "$pid" ] && kill -9 "$pid" || true

rm -f /tmp/.X1-lock
rm -f /tmp/.X11-unix/X1
rm -rf /root/.cache/sessions/*

然后重新启动 VNC。


问题 3:SSH 里运行 GUI 程序时报 cannot open display

先设置:

复制代码
export DISPLAY=:1
export XAUTHORITY=/root/.Xauthority

再运行程序。

如果还是不行,检查 VNC 是否真的在运行:

复制代码
ss -lntp | grep 6006
ps -ef | grep -E "Xvnc|xfce|dbus" | grep -v grep

问题 4:VNC Viewer 连接后只能看,不能操作

检查 VNC 客户端是否开启了 View Only 或"只读模式"。如果开启了,只能看画面,鼠标键盘事件不会真正发送到远程桌面。

TurboVNC Viewer 或 RealVNC Viewer 里都可能有类似选项,需要取消勾选。


问题 5:3DGS Viewer 很卡、黑屏或 OpenGL 报错

这和 VNC、OpenGL、CUDA/OpenGL interop 有关。3DGS 官方仓库说明,network viewer 默认会和训练进程通过 localhost:6009 通信,viewer 本身对 OpenGL 和 GPU 环境也有要求。(GitHub)

可以先检查 OpenGL:

复制代码
export DISPLAY=:1
glxinfo | grep -E "OpenGL vendor|OpenGL renderer|OpenGL version"

如果看到:

复制代码
OpenGL renderer string: llvmpipe

说明当前大概率是 CPU 软件渲染,能开窗口但 3DGS 交互 viewer 可能很慢。

对于 3DGS,另一个更推荐的方式是:

复制代码
AutoDL 负责训练
本地电脑运行 SIBR Viewer
通过 SSH 隧道转发 6009 端口

AutoDL 上运行训练:

复制代码
python train.py -s /path/to/data -m /path/to/output --ip 127.0.0.1 --port 6009

本地电脑再开一个 SSH 隧道:

复制代码
ssh -CNg -L 6009:127.0.0.1:6009 root@你的AutoDL主机 -p 你的AutoDL端口

然后本地启动 SIBR network viewer,连接:

复制代码
127.0.0.1:6009

这样比把 3DGS viewer 完全放在 VNC 桌面里跑更稳定。


九、一键整理版命令

最后给一个完整整理版。新实例中可以直接按顺序执行。

复制代码
apt update

DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \
  xorg xfce4 xfce4-terminal thunar dbus-x11 gvfs policykit-1 xdg-utils \
  libglu1-mesa-dev mesa-utils xterm xauth x11-xkb-utils \
  xfonts-base xkb-data libxtst6 libxv1 wget

cd /tmp

export TURBOVNC_VERSION=2.2.5
export LIBJPEG_VERSION=2.0.90

wget -q https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/vnc/libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
wget -q https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/vnc/turbovnc_${TURBOVNC_VERSION}_amd64.deb

dpkg -i libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb turbovnc_${TURBOVNC_VERSION}_amd64.deb || apt -f install -y

rm -f libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb turbovnc_${TURBOVNC_VERSION}_amd64.deb

mkdir -p /root/.vnc
/opt/TurboVNC/bin/vncpasswd

cat > /root/.vnc/xstartup <<'EOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

export XDG_RUNTIME_DIR=/tmp/runtime-root
mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"

[ -r "$HOME/.Xresources" ] && xrdb "$HOME/.Xresources"

exec dbus-launch --exit-with-session startxfce4
EOF

chmod +x /root/.vnc/xstartup
touch /root/.Xauthority

/opt/TurboVNC/bin/vncserver -kill :1 2>/dev/null || true
pkill -9 -f "Xvnc" 2>/dev/null || true
pkill -9 -f "Xtigervnc" 2>/dev/null || true

pid=$(ss -lntp 2>/dev/null | awk '/:6006 / {print $NF}' | sed -n 's/.*pid=\([0-9]*\).*/\1/p' | head -n 1)
[ -n "$pid" ] && kill -9 "$pid" || true

rm -f /tmp/.X1-lock
rm -f /tmp/.X11-unix/X1
rm -rf /root/.cache/sessions/*

USER=root HOME=/root /opt/TurboVNC/bin/vncserver :1 \
  -geometry 1920x1080 \
  -depth 24 \
  -rfbport 6006 \
  -rfbauth /root/.vnc/passwd \
  -auth /root/.Xauthority \
  -xstartup /root/.vnc/xstartup

本地电脑开启 SSH 隧道:

复制代码
ssh -CNg -L 6006:127.0.0.1:6006 root@你的AutoDL主机 -p 你的AutoDL端口

VNC Viewer 连接:

复制代码
127.0.0.1:6006

运行 GUI 程序前:

复制代码
export DISPLAY=:1
export XAUTHORITY=/root/.Xauthority

十、总结

AutoDL 上配置远程桌面的核心不是"把 6006 的 HTTPS 地址复制到 VNC Viewer",而是要理解 VNC 使用的是图形远程控制协议,最稳的连接方式是 VNC Server 监听 AutoDL 内部 6006 端口,然后用 SSH 隧道转发到本地,再让 VNC Viewer 连接本地的 127.0.0.1:6006

对于普通 OpenCV、SLAM GUI、Pangolin 窗口,这套方案基本够用。对于 3DGS 这类依赖 OpenGL 和实时 viewer 的任务,VNC 可以作为调试入口,但更推荐训练端放在 AutoDL,本地电脑运行 viewer,并通过 6009 端口与训练进程通信。这样稳定性和交互体验通常会更好。

相关推荐
rabbit_pro5 小时前
Docker compose部署Ollama使用模型
linux·运维·docker
迁移科技7 小时前
AI+3D视觉赋能铝制静盘自动化上下料,破解反光堆叠难题
人工智能·3d·自动化
笑洋仟7 小时前
docker的overlay2目录占用磁盘空间很大,清理办法
运维·docker·容器
木雷坞7 小时前
2026 年 5 月国内可用 Docker 镜像源列表与配置方法
运维·docker·容器
2301_780789668 小时前
“数字珍珠港”再现:西北能源基地DNS篡改事件深度复盘与防护升级
运维·服务器·网络·tcp/ip·网络安全·智能路由器·能源
3D小将8 小时前
3D格式转换之STP转GLTF格式技术文档
3d·solidworks模型·ug模型·sketchup模型·igs模型
老王谈企服8 小时前
2026制造业供应链韧性提升,智能化将成为核心解决方案吗?基于实在Agent的端到端自动化实践
运维·人工智能·ai·自动化
Ulyanov8 小时前
《从质点到位姿:基于Python与PyVista的导弹制导控制全栈仿真》: 可视化革命——基于 PyVista 的 3D 战场构建与实时渲染
开发语言·python·算法·3d·系统仿真
Agent手记8 小时前
工厂货物智能入库全流程自动化:基于实在Agent与ISSUT技术的2026工业自动化实战指南
运维·人工智能·ai·自动化
Agent手记10 小时前
供应商资质智能审核自动化、落地方法与合规校验方案:AGI时代下的企业级风控重塑
运维·人工智能·ai·自动化·agi