有没有办法确定我是在Flatpak、AppImage还是其他C沙箱环境中运行?

yyyllmsg  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(244)

我想重写我的库的一部分,以便在Flatpaks和其他沙盒环境中使用,这些环境可能对我的权限有限制。是否有办法确定该进程是否在这样的环境中?

yiytaume

yiytaume1#

经过一番研究,似乎有几种方法可以只用几行代码检测容器。对于Flatpak,设置了环境变量container。在AppImage上,设置了APPIMAGE env。对于快照,我找不到合适的方法,但似乎设置了几个环境变量:https://forum.snapcraft.io/t/environment-variables/7983
在代码实现中,它很可能如下所示:

#include <stdlib.h>
#include <stdbool.h>

bool is_container(void) {
    if (getenv("container")) {
        /* flatpak */
        return true;
    } else if (getenv("APPIMAGE")) {
        /* AppImage */
        return true;
    } else if (getenv("SNAP")) {
        /* Snaps */
        return true;
    }
    return false; /* No container detected */
}

相关问题