搭建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安装时,大致有三个询问的交互接口:
[press q to scroll to the bottom of this agreement]
,输入q
并回车,跳至用户协议底部;Please type y to accept, n otherwise:
,输入y
并回车,同意用户协议;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 暴露给用户。
-
安装 Xvfb 和 VNC 服务器:
sudo apt-get install xvfb x11vnc
-
启动 Xvfb 并绑定 VNC 服务:
# 启动 Xvfb(显示号 99) Xvfb :99 -screen 0 1280x1024x24 & # 启动 VNC 服务器,绑定到 Xvfb 的显示号 x11vnc -display :99 -forever -shared -nopw &
-
通过 VNC 客户端连接:
- 使用 VNC 客户端(如 TigerVNC、RealVNC)连接到服务器的
5900
端口。 - 此时可以看到 Xvfb 的虚拟显示界面,并操作其中的应用程序。
- 使用 VNC 客户端(如 TigerVNC、RealVNC)连接到服务器的
构建&运行
命令如下:
# 构建Docker
docker build -t qnx-vnc .
# 运行
docker run -it -p 5901:5901 --name qnx-vnc-container qnx-vnc
展示
附件
-
Dockerfile
# 基于 Ubuntu 22.04 FROM ubuntu:22.04 # 安装基础工具和依赖 RUN apt-get update && apt-get install -y \ 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/ COPY install_qnx.exp /tmp/ # 运行自动化安装 RUN chmod +x /tmp/qnx-setup-2.0.4-202501021438-linux.run && \ /tmp/qnx-setup-2.0.4-202501021438-linux.run --quiet --noexec --nox11 --target /opt/qnx # 创建非 root 用户(避免权限问题) RUN useradd -m -s /bin/bash qnxuser && \ echo "qnxuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers # 配置启动脚本 COPY start-vnc.sh /start-vnc.sh RUN chmod +x /start-vnc.sh # 设置 VNC 端口和显示变量 ENV DISPLAY=:1 \ VNC_PORT=5901 \ RESOLUTION=1280x1024x24 # 切换到非 root 用户 USER qnxuser WORKDIR /home/qnxuser # 启动 VNC 服务和 QNX Software Center CMD ["/start-vnc.sh"]
-
start-vnc.sh
#!/bin/bash # 启动 Xvfb 虚拟显示 Xvfb $DISPLAY -screen 0 $RESOLUTION & # 启动 Fluxbox 窗口管理器 fluxbox & # 启动 x11vnc 服务器(监听 VNC 端口) x11vnc -display $DISPLAY -forever -shared -rfbport $VNC_PORT -bg -nopw & # 启动 QNX Software Center /opt/qnx/qnxsoftwarecenter/qnxsoftwarecenter