软件容器插件示例
了解如何将软件容器与应用程序管理器集成。
简介
本示例展示如何将 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
©2019 卢森堡瑞典 AB。本文件中包含的文档贡献归其所有者所有版权。本文件提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授权。Qt 以及相关标志是芬兰和/或其他国家的 Qt 公司有限责任公司的商标。所有其他商标均为其所有者拥有。