背景
本人使用 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