在Linux C++中,如何读取指定用户的环境变量?

P4L*_*P4L 1 c++ sudo environment-variables

我知道getenv()返回当前用户的指定环境变量的值,但我的代码需要root权限,因此getenv()只会使用sudo环境变量.我也知道SUDO_USER告诉哪个用户正在调用sudo,这是我想用于getenv()的用户环境.

char* gnome_env_var = getenv("GDMSESSION"); //returns null as not found in sudo env
char* usr = getenv("SUDO_USER");
Run Code Online (Sandbox Code Playgroud)

有没有办法可以为登录用户获取环境变量的值,而不是sudo环境?

编辑 好的,所以我听到的是环境变量集对于每个进程都是唯一的,而不是用户和使用sudo来调用具有root权限的进程调用execve,这可以为该进程创建一组全新的环境变量.那么换句话说,除了弄乱sudoers文件之外,还有一种方法,在当前流程中,找到调用进程的环境变量?

我特别需要GDMSession环境变量.

phi*_*hag 6

getenv不会告诉您当前用户的环境变量,而是当前进程.用户可以随意拥有任意数量的环境(并且可以创建进程),例如export内置shell.在每次调用时execve,调用程序都可以自由地为执行的进程创建一个全新的环境.

因此,无法获取用户的环境变量,甚至无法获取执行sudo的进程的环境变量.你为什么要这样呢?

但是,您可以通过和中的指令配置 sudo以保留部分或全部环境变量.keep_envreset_env/etc/sudoers