Qt应用程序管理器

Qt应用程序管理器是一个无头守护进程,它帮助您创建包含高度复杂的UI设置的嵌入式Linux系统,您可以选择将其拆分为多进程设置以提高灵活性和稳定性。

Qt应用程序管理器架构

应用程序管理器的主要构建块包括

将这些构建块结合起来具有某些优势,如以下所述

Wayland窗口合成器

为了支持嵌入式Linux系统上的多个UI进程,您需要一个中央窗口合成器:Wayland合成器是当今此问题最先进的解决方案。因此,应用程序管理器集成了与Wayland协议完全兼容的合成器,基于QtWayland模块

窗口合成部分是项目特定的,您可以使用QtQuick元素来编写,为您提供QML的所有功能以实现丰富流体动画。

除了Qt Wayland Compositor之外,应用程序管理器还提供了一个接口,您可以将任意元数据附加到任何Wayland窗口。此接口特别适用于定制嵌入式UI系统,其中顶级UI元素可能不遵循经典的桌面为中心的“应用程序窗口”、“模态对话框”和“弹出菜单”窗口分类方法。

应用程序启动器

启动器部分是应用程序生命周期管理的中央组件:它根据显式请求或对外部触发器的自动反应启动和停止应用(内部或第三方)。

由于UI应用程序通常需要在嵌入式系统的整个运行时间内多次停止和启动,并且考虑到大多数客户对UI应用程序启动时间的严格限制,应用程序管理器实施了一些技巧来提高启动性能:任何依赖于运行时组件的应用程序类型,如QML或HTML,可以快速启动。

实际实现取决于运行时类型。应用程序管理器提供了一种QML快速启动器,您可以将至少一个带有完全初始化的QML引擎的进程保留在后台(取决于实际CPU负载)。在这种情况下,启动应用程序只需要您将应用程序的QML文件加载到现有引擎中。

可以通过外部独立运行时启动程序二进制文件添加对其他运行时的支持。

除了运行时抽象之外,应用管理器还能够在一个容器中运行任何应用程序,而不是仅仅作为一个外部Unix进程。对基于容器的解决方案的支持必须由客户方提供,这可以从完整的容器解决方案如KVM或XEN,到LXC,甚至到强制访问控制框架如AppArmor或SELinux。应用管理器包含了Pelagicore的软件容器的一个示例集成,这些容器基于Linux容器(LXC)。

用户输入管理

由于大多数嵌入式UI应用程序都依赖于虚拟键盘,Qt虚拟键盘模块可以集成到系统UI和合成器中。通过Wayland协议,这个虚拟键盘组件可以透明地在任何Qt/QML应用程序中使用,以实现全国际化文本输入,无需在应用端做出特别配置。相比之下,非Qt应用程序需要提供对所需的开源Wayland文本输入协议的支持。

通知

应用管理器在D-Bus上作为遵循freedesktop.org标准的通知服务器。对于QtQuick应用程序,提供了一项QML组件,它封装了freedesktop.org通知协议的客户端。

客户端和服务器端都提供了Qt样式的API,可以使用遵循标准的机制扩展任何通知请求,增加额外的元数据。

应用程序安装

除了作为系统UI或基本安装的一部分而内置的应用程序之外,应用管理器还支持第三方应用程序,这些应用程序是动态安装、更新和卸载的。

与第三方应用程序相比,开发内置应用程序并没有太大区别,只是对于第三方应用程序还需要额外的打包步骤。应用管理器提供了一种简单的打包格式以及一个用来创建和数字签名这些包的工具。

应用管理器的安装器组件可以在后台线程中安装和更新这些包,使用的是纯HTTP(S)传输或通过从客户特定的本地套接字连接接收数据。为了支持磁盘空间有限的设备,所有包的安装和更新都是在它们下载到设备时发生的。这比首先下载整个包然后进行安装或更新更有效率。

使用自定义的包格式而不是传统的Unix格式是刻意为之的,原因有两点:它们要么使用支持传统格式的库,要么包含任意shell脚本的钩子;这些钩子可能被用来绕过安全措施。

相反,应用管理器使用TAR存档,对内容的类型和一些名为YAML的元数据文件的一些额外限制,这些文件是应用管理器特有的。这些包通过BSD标准的libarchive库进行解析,该库也是实际tar命令的基础。

此外,这些包可以由开发者和生产应用商店服务器进行加密签名。设备的“开发者模式”允许只使用开发者签名或完全禁用此签名验证。

优势

将这些构建块聚合到单个守护进程中,可以更有效地协同工作。

  • 当应用程序请求显示窗口时,合成器可以执行安全检查,因为它有权访问由应用管理器启动的所有应用程序的进程ID。默认情况下,来自未知进程的窗口不会显示在屏幕上。
  • 应用程序管理器对其内部IPC机制的用法执行策略,同时为系统中间件提供D-Bus接口,以允许其他进程和库验证应用程序管理器启动的应用程序的资源使用情况。这是由于应用程序的能力,这些能力存储在数字签名的清单中,以及应用程序管理器对应用程序到PID映射的了解。

应用程序管理器能够在单进程和多进程模式下同时运行相同的系统UI和QML应用程序,也具有一定的优势——不仅在开发阶段,生产扩大阶段也是如此。通常,这不需要对系统UI或QML应用程序本身进行任何更改。

  • 作为开发者,你可以选择你希望开发的桌面操作系统。对于单进程测试,你可以选择Windows、macOS或Linux;无需Wayland。对于多进程,你可以选择Linux或macOS。在Linux上,应用程序管理器使用嵌套Wayland。在macOS上,Wayland支持是实验性的。
  • 两种模式可以混合使用,例如,第三方应用程序可以在单独的进程中运行(甚至可以在安全容器中运行),而内置的QML应用程序可以在进程中加载。这种配置会导致启动时间更快。
  • 在目标系统上运行的UI代码与开发者机器上运行的代码相同。
  • 应用程序管理器允许你通过节省系统内存、图形内存和启动时间来减轻产品的硬件要求。你可以通过将所有或部分关键应用程序从多进程模式移动到单进程模式来实现这一点。

请注意,任何非QML应用程序,如原生的C++编译可执行文件,将破坏没有Wayland支持的机器上的开发人员设置。

尽管如此,还有一些项目需要使用QML、HTML或原生的OpenGL渲染等技术多种UI技术的应用程序。在这种情况下,应用程序管理器支持各种运行时的能力,使得这些应用程序可以无缝地组合成一致的用户体验。

© 2024 Qt公司有限公司。本文件包含的贡献的文档版权属于其各自的拥有者。本文件中提供的文档是根据自由软件基金会发布的GNU自由文档许可证第1.3版的条款许可的。Qt和相关商标是芬兰及其它世界各地的Qt公司注册商标。所有其他商标属于其各自的权利人。