当我打电话时
systemd-run "--user" "--pipe" "echo" "hello"
我在没有密码弹出的情况下获得预期的输出“ Hello”(加上一些SystemD单位信息)。
但是,当我运行时,使用C ++程序中的完全相同的参数通过systemd-run
或
execvp()
启动了使用
execvpe()
.的弹出窗口。
示例:
Authentication is required to start transient unit
我可以避免使用此身份验证弹出要求(在使用C ++时)?最好使用没有策略修改的默认系统D。
(我正在尝试制作一个快速的工具来运行子命令,同时防止指定目录之外的意外文件修改,例如“安全”构建)。
中缺少
#include <unistd.h>
int main(int argc, char const* const argv[], char const* const envp[])
{
char const* argp[] =
{
"--user",
"--pipe",
"echo",
"hello",
nullptr,
};
//::execvp("systemd-run", const_cast<char**>(argp)); // alternative call, same result
::execvpe("systemd-run", const_cast<char**>(argp), const_cast<char**>(envp));
}
program
您的版本正在运行此命令:
argp
,原因是它要求密码的原因。