搭建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 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
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…

粘包问题解决方案

粘包问题详解:TCP协议中的常见问题及Go语言解决方案 一、什么是粘包问题? 粘包问题是指在TCP通信中,发送方发送的多个独立消息在接收方被合并成一个消息接收的现象。换句话说,发送方发送的多条消息在接收方被“粘”在一起&#…

vue:突然发现onok无法使用

const that this;this.$confirm({title: "修改商品提示",content: "如果当前商品存在于商品活动库,则在商品活动库的状态会下架",onOk: function () {that.submitForm();}}); 突然发现 this.$confirm无法进入onok 最终发现是主题冲突&#x…

redis hashtable 的sizemask理解

在 Redis 的哈希表实现中,index hash & dict->ht[0].sizemask 是计算键值对应存储位置的核心操作。这个操作看起来简单,但背后涉及哈希表的内存布局和性能优化策略。我们通过以下步骤逐步解析其原理: 一、哈希表的设计目标 快速定位…

Ruby 命令行选项

Ruby 命令行选项 概述 Ruby 是一种广泛使用的编程语言,它拥有强大的命令行工具,可以帮助开发者进行各种任务。了解 Ruby 的命令行选项对于提高开发效率至关重要。本文将详细介绍 Ruby 的常用命令行选项,帮助开发者更好地利用 Ruby 的命令行功能。 Ruby 命令行选项概述 R…

【STM32】WDG看门狗(学习笔记)

学习来源----->江协科技STM32 WDG简介 WDG(Watchdog)看门狗看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长…

Java 数据库连接池

HikariCP 老外开源的。 Spring Boot 2 之后默认选择的连接池。 号称性能最快的数据库连接池。 为什么性能好呢? ● 字节码级别的优化-尽量的利用 JIT 的内联手段 ● 字节码级别的优化-利用更容易被 JVM 优化的指令 ● 代码级别的优化-利用改造后的 FastList 代替…

Spring Boot中@Valid 与 @Validated 注解的详解

Spring Boot中Valid 与 Validated 注解的详解 引言Valid注解功能介绍使用场景代码样例 Validated注解功能介绍使用场景代码样例 Valid与Validated的区别结论 引言 在Spring Boot应用中,参数校验是确保数据完整性和一致性的重要手段。Valid和Validated注解是Spring …

C++搜索

功能扩展说明: 图类封装:将图数据结构封装为类,提高代码复用性 最短路径查找:基于BFS实现未加权图的最短路径查找 路径重构:通过parent数组回溯构建完整路径 异常处理:当路径不存在时返回空向量 复杂度分析…

2023第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组(真题题解)(C++/Java题解)

本来想刷省赛题呢,结果一不小心刷成国赛了 真是个小迷糊〒▽〒 但,又如何( •̀ ω •́ )✧ 记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 一、子2023-&#xff…

CSS学习笔记6——网页布局

目录 一、元素的浮动属性、清除浮动 清除浮动的其他方法 1、使用空标签清除浮动影响 2、使用overflow属性清除浮动 3、使用伪元素清除浮动影响 原理 overflow属性 二、元素的定位 1、相对定位 2、绝对定位 ​编辑 3、固定定位 z-index层叠等级属性 一、元素的浮动…

sqlalchemy:将mysql切换到OpenGauss

说明 之前python的项目使用的mysql,近期要切换到国产数据库OpenGauss。 之前的方案是fastapisqlalchemy,测试下来发现不用改代码,只要改下配置即可。 切换方案 安装openGauss-connector-python-psycopg2 其代码工程在:https:…

uniapp 获取dom信息(封装获取元素信息工具函数)

在uniapp开发中,需要获取到dom的信息,需要用到uniapp的指定方式 uni.createSelectorQuery(),但是每次需要用到的时候都需要很长一段的繁琐代码,本篇文章将呈现获取dom信息方法封装,话不多说,上菜&#xff1…

Linux之数据链路层

Linux之数据链路层 一.以太网1.1以太网帧格式1.2MAC地址1.3MTU 二.ARP协议2.1ARP协议工作流程2.2ARP协议格式 三.NAT技术四.代理服务4.1正向代理4.2反向代理 五.四大层的学习总结 一.以太网 在我们学习完了网络层后我们接下来就要进入数据链路层的学习了,在学习完网…

MySQL的基础语法2(函数-字符串函数、数值函数、日期函数和流程函数 )

目录 一、字符串函数 1.常见字符串函数 ​编辑 2.字符串函数的基本使用 3.字符串函数的数据库案例演示 二、数值函数 1.常见数值函数(如下): 2.数值函数的基本使用 3.数值函数的数据库案例演示 三、日期函数 1.常见的日期函数 2.日…

全新版租赁商城小程序源码系统 源码开源支持二开+图文搭建教程

在互联网商业的浪潮中,租赁业务凭借其独特的优势,正逐渐成为市场的新宠。对于开发者而言,快速搭建一个功能完备的租赁商城小程序,不仅能满足市场需求,还能为自己的业务拓展带来新的机遇。分享一款全新版租赁商城小程序…

Cent OS7+Docker+Dify

由于我之前安装了Dify v1.0.0,出现了一些问题:无法删除,包括:知识库中的文件、应用、智能体、工作流,都无法删除。现在把服务器初始化,一步步重新安装,从0到有。 目录 1、服务器重装系统和配置…

OSI 七层模型和四层模型(TCP/IP 模型)

文章目录 前言一、OSI 七层模型二、TCP/IP 四层模型三、运行协议及设备1. OSI 七层模型2. TCP/IP 四层模型3. 运行协议4. 各类设备的作用 总结 前言 OSI 七层模型和四层模型(TCP/IP 模型)是两种常见的网络协议分层架构,它们的主要区别如下&a…

AI的未来:机遇、挑战与发展方向

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 人工智能(AI)已经成为当今世界最具革命性的技术之一,它正在深刻改变各个行业&#x…

javascript实现一个函数,将字符串中的指定子串全部替换为另一个字符串的原理,以及多种方法实现。

大白话javascript实现一个函数,将字符串中的指定子串全部替换为另一个字符串的原理,以及多种方法实现。 在JavaScript里,要是你想把字符串里的指定子串都替换成另外一个字符串,有不少方法可以实现。下面我会详细介绍实现的原理&a…