我可以以某种方式允许在 flatpak 内运行的 GUI 应用程序/bin
分别允许访问和执行二进制文件/var/bin
吗?
即使我允许完全系统访问(--filesystem=host
),它甚至无法看到/找到那里的文件。
我的用例是执行shellcheck
.
答案1
有不同的方法:
- 如果你的 Flatpak 可以
host
访问,你可以运行/usr/local/bin/example
在/var/run/host/usr/local/bin/example
.即/usr/local
安装到/var/run/host/usr/local
. - 但是,由于库不在正确的位置等原因,这仍然可能会失败。因此,您要么需要调整环境变量以便它在那里工作,要么按照下面描述的方式进行。
在 flatpak 之外生成命令
您可以使用flatpak-spawn
在不同的环境中运行命令。
但是,通常您希望在主机系统上传播命令,从而突破沙箱。为此,显然需要削弱 flatpak 的沙箱。只需添加此权限:
flatpak override com.packagename.App --talk-name=org.freedesktop.Flatpak
之后,您可以运行flatpak-spawn --host
来从主机运行 flatpak 之外的命令。
现在,要在 GUI 中真正使用它,您希望有一些方法来更改要在其中运行的二进制文件的路径。这可能会变得复杂,因为您需要传递额外的参数,最终您可能不得不编写小型包装脚本。
就我而言,我确实做到了,并且你可以在这里找到它们。它们允许(就我而言)Atom(但可能与任何 IDE 一起使用)运行shellcheck
或gpg
……
答案2
您可以使用 org.freedesktop.Flatpak.Development Dbus 接口的 HostCommand 方法:https://github.com/flatpak/flatpak/blob/master/data/org.freedesktop.Flatpak.xml#L43
使用 Python 的示例:https://stackoverflow.com/questions/39494813/pass-file-descriptor-via-a-dbus-function-call-from-python-aka-call-flatpaks-ho