软件容器插件示例

了解如何将软件容器与应用程序管理器集成。

SoftwareContainer Plugin Example

注意:如果您想在 Linux 机器上构建示例,请阅读此内容

简介

此示例展示了如何将 Pelagicore 的软件容器与应用程序管理器集成。

注意:作为先决条件,在之前熟悉 容器

softwarecontainer.cpp 中,部分容器的配置是硬编码的;所有的功能定义都在位于 service-manifest.d/io.qt.AppliciationManager.Application/ 的 JSON 清单文件中。

对 intel GPU 和 VMWare 的虚拟 GPU 进行了 Wayland/OpenGL 透传的测试。

运行软件容器代理

要运行 softwarecontainer-agent,您必须以 root 身份启动它。默认情况下,该代理在系统 D-Bus 上注册自己。因此,您需要有一个策略文件,以便允许代理在系统总线上注册自己。

如果您想通过 --session-bus 参数在会话总线上运行代理,那么您必须将以下行添加到您的其中一个 config.yaml 文件中

containers:
  softwarecontainer:
    dbus: 'session'

必须通过 -m 传递与插件一起提供的服务清单目录。否则,由于缺少 io.qt.ApplicationManager.Application 功能,容器设置将失败。

如果您的意图是转发的总线,确保代理可以访问与应用程序管理器使用的相同会话总线。如果代理以 root 身份运行,而应用程序管理器未运行,这可能会很棘手——因为大多数 Linux 发行版的默认会话总线策略禁止 root 访问用户会话总线。然而,您可以通过在 /etc/dbus-1/session.conf 中的 <policy context="default"> 元素内添加 <allow user="root"/> 策略来解决这个问题。

此外,请确保在 sudo 运行时告知代理有关您的环境信息

sudo XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR
DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS softwarecontainer-agent -m
/path/to/application-manager/examples/softwarecontainer-plugin/service-manifest.d/

在应用程序管理器方面,您需要通过向您的 config.yaml 文件添加类似以下行来激活插件

plugins:
   container: [ "/path/to/libsoftwarecontainer-plugin.so" ]

要实际在软件容器中运行应用程序,您必须添加容器选择配置。有关更多信息,请参阅 容器选择配置

为了简化桌面开发,通常,您希望将您的 $HOME 目录以只读模式挂载到容器中。这样,您就不需要在每次构建后都将应用程序管理器安装到 /usr/。只有当您的构建目录位于 $HOME 中时,此行为才有效,否则容器将看不到 appman-launcher-qml 二进制文件。默认情况下,此行为是禁用的;但是,您可以在 config.yaml 文件中通过以下行激活它

containers:
  softwarecontainer:
    bindMountHome: yes

示例项目 @ code.qt.io

© 2024 Qt公司有限公司。此处包含的文档贡献的版权归各自所有者所有。提供的文档根据Free Software Foundation发布的GNU自由文档许可证(版本1.3)的条款进行许可。GNU自由文档许可证版本1.3。Qt及其相关标志是Qt公司在芬兰以及全球其他国家的商标。商标。所有其他商标均属于各自所有者。