VNC(Virtual Network Computing )是一种图形化的桌面共享协议,它使用远程帧缓冲协议 (RFB) 来远程控制另一台计算机。 对于一般性的GUI 程序运行需求,用户可以借助 VNC 在不安装完整桌面环境的情况下方便快捷的实现。本文旨在介绍如何借助 TigerVNC 和 TurboVNC 工具,在 Ubuntu 22 系统的容器实例中运行 GUI 程序,并通过本地电脑访问。

前提条件

容器实例支持 SSH 访问

使用 TigerVNC 工具

  1. 访问容器实例后台

  2. 执行如下命令,安装 tigervnc 远程桌面。

    apt update && apt install -y tigervnc-standalone-server xterm
  3. 等待远程桌面安装完成后,执行如下命令,启动远程桌面。

    tigervncserver  -localhost no -display :3101  -xstartup /usr/bin/xterm
    注意
    • 由于 tigervncserver 的默认端口为 5900,故若用户想使用 9001 开放端口访问容器实例,则此命令行中需指定端口号为 3101。

    • 在启动过程中,用户需根据实际情况设置远程桌面的密码。

    • view-only 密码可不设置,根据提示直接输入 n 即可。

    help isaac sim 4
  4. 登录控制台,在左侧导航栏选择容器实例,在实例列表页面中,点击指定实例所在行的更多访问

  5. 查看并记录更多访问信息窗口中,开放端口 9001 所对应的地址。

    help isaac sim 7
  6. 用户本地电脑下载并安装 TigerVNC viewer 客户端

    说明
    • 用户根据本地电脑自行选择相应的安装包下载即可。

    • 本实践中使用 macOS 系统的 TigerVNC viewer 客户端,其他系统的客户端界面可能存在差异,以用户下载的版本界面为准。

  7. 启动 TigerVNC viewer 客户端,在弹出的连接窗口中,输入容器实例 9001 端口所对应的 IP 地址后,点击连接并输入密码后登录 VNC。

    help isaac sim 5
  8. 登录 VNC 后,用户可根据实际情况执相应命令。执行如下命令,可生成相应时钟图形。

    xclock

使用 TurboVNC 工具

  1. 访问容器实例后台

  2. 执行如下命令,安装 VNC 服务的基本依赖包。

    apt update && apt install -y libglu1-mesa-dev mesa-utils xterm xauth x11-xkb-utils xfonts-base xkb-data libxtst6 libxv1
  3. 执行如下命令,安装 libjpeg-turbo 和 turbovnc。

    export TURBOVNC_VERSION=2.2.5
    export LIBJPEG_VERSION=2.0.90
    wget http://aivc.ks3-cn-beijing.ksyun.com/packages/libjpeg-turbo/libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
    wget http://aivc.ks3-cn-beijing.ksyun.com/packages/turbovnc/turbovnc_${TURBOVNC_VERSION}_amd64.deb
    dpkg -i libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
    dpkg -i turbovnc_${TURBOVNC_VERSION}_amd64.deb
    rm -rf *.deb
  4. 执行如下命令,启动 VNC 服务。

    USER=root /opt/TurboVNC/bin/vncserver :1 -desktop X -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -fp /usr/share/fonts/X11/misc/,/usr/share/fonts -rfbport 6006
    说明

    此步骤运行过程中,需设置 VNC 服务的密码,用户自定义即可,该密码将用于后续 VNC 服务的连接。

  5. 执行如下命令,检查服务是否启动。若返回结果中有 vncserver 进程,则证明已启动。

    ps -ef | grep vnc
    faq vnc 2
  6. 根据本地电脑系统,从 TurboVNC 官网下载并安装客户端。

  7. 启动 VNCServer 服务(即步骤 4)时,手动设置了 rfbport=6006 端口,故需在本地电脑执行如下操作,使用 SSH 将容器实例中的端口代理至本地。

    1. 登录控制台,在左侧导航栏选择容器实例,在实例列表页面中,点击指定实例所在行的更多访问

      faq vnc 3
    2. 在弹出的窗口中,查看 SSH 访问信息,记录 SSH 命令以及初始密码。

      faq vnc 4
    3. 打开本地电脑终端,执行如下代理命令,并输入密码。

      ssh -CNg -L 6006:127.0.0.1:6006 root@139.198.179.206 -p 42151
      • 6006:127.0.0.1:6006 是指代理实例内 6006 端口到本地 6006 端口。

      • root@139.198.179.20642151 端口号为平台内容器实例 SSH 访问信息,需根据实际情况进行修改。

  8. 本地电脑打开 TurboVNC 客户端,VNC Server 中输入 127.0.0.1:6006,点击 Connect

    faq vnc 1
  9. 在新的弹窗中,输入启动 VNC 服务时设定的密码,即可看到 VNC 连接成功后的界面。

    faq vnc 5