软件容器插件示例

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

简介

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

注意:作为先决条件,请事先熟悉 容器

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

Wayland/OpenGL 旁路通过英特尔 GPU 和 VMWare 的虚拟 GPU 进行测试。

运行软件容器代理

要运行软件容器代理,您必须以 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

©2019 卢森堡瑞典 AB。本文件中包含的文档贡献归其所有者所有版权。本文件提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授权。Qt 以及相关标志是芬兰和/或其他国家的 Qt 公司有限责任公司的商标。所有其他商标均为其所有者拥有。