搭建QNX Software Center的Docker环境

背景

本人使用 Ubuntu Server 22.04 服务器,所以没有图形界面,而 QNX Software Center 需要图形界面。为了保证服务器环境的整理,计划使用Docker部署QNX Software Center 一瓶安装图形界面。本方既是实现方案的记录。

资源

  • Dockerfile,Docker 创建脚本;
  • start-vnc.sh,VNC 启动脚本;
  • qnx-setup-2.0.4-202501021438-linux.run, qnx 安装包(官网下载 [链接])

方案

处理一、跳过qnx安装时提示

qnx安装时,大致有三个询问的交互接口:

  1. [press q to scroll to the bottom of this agreement],输入q并回车,跳至用户协议底部;
  2. Please type y to accept, n otherwise:,输入y并回车,同意用户协议;
  3. Specify installation path (default: /home/gaoyang3513/qnx):,输入 /opt/qnx,安装至 /opt/qnx 目录下;

参考 qnx 安装的help信息,跳过交互并修改安装目录为/opt/qnx的命令如下:

qnx-setup-2.0.4-202501021438-linux.run --quiet --noexec --nox11 --target /opt/qnx

处理二、支持图形显示与交互

当前 Ubuntu Server 宿主机无图形界面,参考AI工具给到的建议:选用 Xvfb 虚拟显示 + VNC 客户端 的方式支持用户连接并操作。其中 Xvfb(X Virtual Framebuffer) 是一个在内存中运行的虚拟 X11 服务器,它本身不提供可视化的图形界面,但可以运行需要图形环境的应用程序。将 Xvfb 的虚拟显示内容通过 VNC 暴露给用户。

  1. 安装 Xvfb 和 VNC 服务器

    sudo apt-get install xvfb x11vnc
    
  2. 启动 Xvfb 并绑定 VNC 服务

    # 启动 Xvfb(显示号 99)
    Xvfb :99 -screen 0 1280x1024x24 &
    
    # 启动 VNC 服务器,绑定到 Xvfb 的显示号
    x11vnc -display :99 -forever -shared -nopw &
    
  3. 通过 VNC 客户端连接

    • 使用 VNC 客户端(如 TigerVNC、RealVNC)连接到服务器的 5900 端口。
    • 此时可以看到 Xvfb 的虚拟显示界面,并操作其中的应用程序。

展示

启动Docker

# 构建Docker   
docker build -t qnx-vnc .

# 启动Docker
docker run -it -v ${HOME}:${HOME} -v /opt/qnx:/opt/qnx -w ${PWD} -p 5901:5901 --privileged --name Ubuntu22_QNX qnx-vnc

安装 SDP8

在这里插入图片描述

附件

  • Dockerfile

    # 基于 Ubuntu 22.04
    FROM ubuntu:22.04
    
    # 安装基础工具和依赖(新增 tini 进程管理器)
    RUN apt-get update && apt-get install -y \
        vim \
        wget \
        xvfb \
        fluxbox \
        x11vnc \
        xterm \
        libgtk-3-0 \
        libnss3 \
        libx11-xcb1 \
        libxtst6 \
        libasound2 \
        expect \
        dbus-x11 \
        gnome-session-bin \
        libswt-gtk-4-jni \
        sudo
    
    # 复制安装包和脚本
    COPY qnx-setup-2.0.4-202501021438-linux.run /tmp
    RUN chmod +x /tmp/qnx-setup-2.0.4-202501021438-linux.run
    
    # 创建非 root 用户
    RUN useradd -m -s /bin/bash gaoyang3513 && \
        echo "gaoyang3513 ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
    
    # 配置启动脚本
    COPY start-vnc.sh /start-vnc.sh
    RUN chmod +x /start-vnc.sh
    
    # 设置环境变量
    ENV DISPLAY=:1 \
        VNC_PORT=5901 \
        RESOLUTION=1280x1024x24
    
    # 切换为非 root 用户
    USER gaoyang3513
    
    # 启动命令
    CMD ["/start-vnc.sh"]
    
  • start-vnc.sh

    #!/bin/bash
    
    # 清理残留文件
    rm -rf /tmp/.X11-unix/X${DISPLAY#:} /tmp/.X*-lock
    
    # 启动 Xvfb 并启用 RANDR 和 DPMS 扩展
    Xvfb $DISPLAY -screen 0 $RESOLUTION +extension RANDR +extension DPMS &
    XVFB_PID=$!
    
    # 等待 Xvfb 初始化
    for i in {1..10}; do
      if xdpyinfo -display $DISPLAY >/dev/null 2>&1; then break; fi
      sleep 1
    done
    
    # 检查 Xvfb 是否支持 DPMS
    if ! xdpyinfo -display $DISPLAY | grep -q DPMS; then
      echo "[WARN] Xvfb 未启用 DPMS 扩展,部分功能可能受限"
    fi
    
    # 启动 Fluxbox 和 x11vnc
    fluxbox &
    x11vnc -display $DISPLAY -forever -shared -rfbport $VNC_PORT -bg -nopw &
    
    # 运行自动化安装
    if [ ! -e /opt/qnx/qnxsoftwarecenter/qnxsoftwarecenter ]; then 
      sudo /tmp/qnx-setup-2.0.4-202501021438-linux.run --quiet --noexec --nox11 --target /opt/qnx
    fi
    
    # 启动 QNX
    exec /opt/qnx/qnxsoftwarecenter/qnxsoftwarecenter
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值