基于VNC远程连接服务器以及容器(获取图形化界面)

发布时间:2026/7/1 13:28:23

基于VNC远程连接服务器以及容器(获取图形化界面) 目录1. VNC远程连接服务器的步骤1.1.服务器安装VNC服务TigerVNC1.2. 启动VNC服务创建桌面会话1.3. SSH 登录到服务器1.4. 重置VNC 密码1.5. 客户端连接1.6. 关闭 / 清理 stale VNC2. VNC远程连接服务器的容器2.1 容器内安装GUI桌面环境以及创建会话2.2 用“端口转发”实现连接3. SSH和VNC方法比较3.1. SSH含 X11 转发3.2. VNC / TurboVNC VirtualGL已有问题基于SSH方式在linux服务器打开Isaac sim软件 GUI界面之后发现操作界面非常卡顿然后就基于VNC的方法连接服务器就可以解决这个问题。1. VNC远程连接服务器的步骤1.1.服务器安装VNC服务TigerVNCUbuntusudo apt install -y tigervnc-standalone-server tigervnc-common1.2. 启动VNC服务创建桌面会话vncserver -geometry 1920x1080 -localhost no :11.3. SSH 登录到服务器执行vncserver -list看到类似输出1.4. 重置VNC 密码vncserver -kill :1 # 先关掉原来的会话 rm -f ~/.vnc/passwd # 删除旧密码文件可选但保险 vncpasswd # 重新设置一个简单的 VNC 密码例如 12345678vncpasswd的时候输入两遍新密码建议只用数字/字母长度 ≤ 8先不要用复杂符号询问 “view-only password?” 直接输入n回车再重新启动 VNCvncserver -geometry 1920x1080 -localhost no :1 vncserver -list # 再看一眼确认 :1 已经起来1.5. 客户端连接本地 Windows 机器安装TurboVNC Viewer、RealVNC Viewer或者MobaXterm连接地址填服务器IP:1或服务器IP::5901弹出认证窗口时密码填刚才vncpasswd设置的那个。连上后就能看到服务器桌面在里面打开终端、运行 Isaac Sim 等程序了。1.6. 关闭 / 清理 stale VNC如果显示stale表示VNC 会话已经死掉但残留的 pid / lock 文件还在所以系统以为 session 还存在。1先确认没有真正的 VNC 进程ps -ef | grep Xtigervnc如果只看到grep说明确实没有运行中的 VNC。2删除相关残留文件删除.vnc残留ls ~/.vnc删除 pid 和 logrm -f ~/.vnc/*.pid rm -f ~/.vnc/*.log3再查看vncserver -list如果正常stale就消失了。2. VNC远程连接服务器的容器首先在服务器里进入容器内部2.1 容器内安装GUI桌面环境以及创建会话1. 安装相关软件apt update apt install -y dbus-x11 xfce4 xfce4-session2. 配置 VNC 启动脚本vim /root/.vnc/xstartup 添加以下内容#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS # 1) TigerVNC 正常会传入 DISPLAY比如 :1 / :2 # 2) 如果没传入就从该会话的端口/环境推不出来的话兜底用 :2 : ${DISPLAY::2} export DISPLAY export XDG_SESSION_TYPEx11 export XDG_RUNTIME_DIR/tmp/runtime-root mkdir -p $XDG_RUNTIME_DIR chmod 700 $XDG_RUNTIME_DIR exec dbus-launch --exit-with-session xfce4-session保存后chmod x /root/.vnc/xstartup删除相关vncserver -kill :2 # 杀死原有桌面会话2rm -f /root/.vnc/*:2.pid /root/.vnc/*:2.log重新创建会话vncserver -geometry 1920x1080 -localhost no :2vncserver -list # 显示如下代表VNC桌面会话创建成功2.2 用“端口转发”实现连接当前方法适用于容器已经创建容器里 已经启动VNC1找到容器 IPdocker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} 容器名假设输出是 172.17.0.32在服务器上做端口转发把服务器 5902 转到容器 5902退出容器进入到服务器中采用socat进行标准端口映射sudo apt install -y socat sudo socat TCP-LISTEN:5902,fork TCP:172.17.0.3:5902 # TCP-LISTEN:5902代表服务器的端口172.17.0.3:5902代表容器IP以及VNC会话端口注意执行sudo socat TCP-LISTEN:5902,fork TCP:172.17.0.3:5902之后不要关闭终端或者ctrlz 会断开连接但是进程还在否则VNC客户端无法连接ctrlz 断开连接后可以用 下述命令继续跑fg %4杀死socat进程sudo ss -lntp | grep :5902 sudo kill -9 pid一切完毕后然后 Windows 端通过下述方式就可以连接上容器连接地址填服务器IP:2或服务器IP::5902注意这里的服务器的5902端口会指向容器的5902端口3. SSH和VNC方法比较简单说一句SSH 用来“远程敲命令”VNC 用来“远程看整个桌面”。跑 Isaac Sim 这种 3D GUI基本就是SSH VNC或 TurboVNCVirtualGL / DCV而不是 SSH X11 转发。3.1. SSH含 X11 转发优点: 适合命令行、脚本、日志、轻量 GUI小对话框那种。缺点关键X11 转发非常不适合 3D / 大量图形每一帧都要把图像/绘图指令通过 SSH 传回本地延迟大、带宽占用高。Isaac Sim、Blender 这类 GPU 渲染程序几乎一定会“动一下就 1–5 FPS”。3.2. VNC / TurboVNC VirtualGL特点:服务端跑一个完整桌面会话:1 → 5901。更适合 3D 应用渲染在服务器 GPU 上完成只把压缩后的画面传回来。TurboVNC VirtualGL / NICE DCV 这类方案性能比 X11 转发好一个数量级。能看到完整桌面环境缺点需要额外安装/配置 vncserver、xstartup 等。结论SSH继续做日常开发、上传下载、跑脚本。VNC / TurboVNC专门用来进服务器“看桌面 跑 Isaac Sim GUI”。

相关新闻