Qt 应用程序管理器

Qt 应用程序管理器是一个守护进程,它帮助您创建具有高度复杂用户界面设置嵌入式 Linux 系统,您可以选择将其拆分为多进程设置以增加灵活性和稳定性。

Qt 应用程序管理器架构

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

结合这些构建块具有某些优势,如下所述。

Wayland 窗口合成器

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

窗口合成部分是项目特定的,您可以使用 QtQuick 元素进行编写,这为您提供了 QML 的所有能力来在合成器中实现丰富且流畅的动画。

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

应用程序启动器

启动器部分是应用程序生命周期管理的核心组件:它根据显式请求或自动对外部触发器的反应来启动和停止应用程序(内部或第三方)。例如,在内存不足的情况下,您可能希望优雅地终止用户在一段时间内未与之交互的应用程序。

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

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

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

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

用户输入管理

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

通知

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

客户端和服务器端都提供了类似于Qt的API,允许使用符合标准的方式扩展任何通知请求以包含额外的元数据。

应用程序安装

除了系统UI或基本安装中的内置应用程序外,应用程序管理器还支持动态安装、更新和卸载的第三方应用程序。

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

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

使用自定义包格式而非标准Unix格式是故意的,原因有两个:它们要么使用支持旧格式库,要么包含用于任意shell脚本的挂钩;这些挂钩可能被用来规避安全措施。

相反,应用程序管理器使用具有进一步内容类型限制和某些特定于应用程序管理器的命名YAML元数据文件的TAR归档。这些包通过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技术。在这种情况下,应用程序管理器支持多种运行时,使得所有这些应用程序可以无缝地集成到一致的用户体验中。

©2019 Luxoft Sweden AB。本文件中的文档贡献属于其各自所有者的版权。本文件提供的文档是根据由自由软件基金会发布的GNU自由文档许可证第1.3版许可的。Qt以及相关的商标是芬兰Qt公司及其它国际公司的商标。所有其他商标均属于其各自所有者。