如何设置 PATH 或其他环境变量以便 X 应用程序可以访问它?

如何设置 PATH 或其他环境变量以便 X 应用程序可以访问它?

如何设置环境变量以便 KDE 识别它们?

如何在非 shell 环境(KDE)中设置路径?

与上面两个问题不同,我想知道如何为 GNOME 执行此操作。或者更好的是,是否有一种独立于窗口管理器的方法。对于 shell/终端,我通常编辑~/.bashrc.我可以在哪里放置导出语句,以便环境变量可用于所有 X 应用程序,无论使用什么窗口管理器?

答案1

pam_envPAM 模块允许您将它们设置为 in/etc/environment或 in ~/.pam_environment,具体取决于您是否希望将其用于所有用户(系统范围),或者只是您的用户(会话范围)。

系统范围的环境变量

影响整个系统(而不仅仅是特定用户)的环境变量设置不应放置在加载系统或桌面会话时执行的许多系统级脚本中的任何一个中,而应放置在

/etc/environment- 该文件专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由每行一个赋值表达式组成。具体来说,该文件存储系统范围的区域设置和路径设置。

会话范围的环境变量

应该仅影响特定用户(而不是整个系统)的环境变量设置应设置为:

~/.pam_environment- 该文件专门用于设置用户环境。它不是一个脚本文件,而是由每行一个赋值表达式组成。

注意:使用时.pam_environment需要重新登录才能初始化变量。仅重新启动终端不足以使用变量。

更多信息请访问Ubuntu 的环境变量 wiki

答案2

/etc/X11/Xsession.d/...或沿着该目录的行,具体取决于您的 Linux(?)。我在上面写了一点这里

这个概念是,登录后,显示管理器启动“Xsession”并按字母顺序源(!)该目录中的所有内容。您只需添加一个修改 PATH 的脚本即可。 Xsession 最终将成为您的 DE,通常所有进程都是该 Xsession 的子进程,因此继承 PATH 环境。

答案3

进程从启动它的父进程继承环境。要更改子进程中的 PATH 或其他环境值,我们可以将变量设置为父进程中的值,如果在 shell 中,则导出该变量,然后启动子进程。子进程还可以在启动时读取一个或多个初始化文件来更改其自己的环境。

因此,还有两个问题需要回答:

导致您希望受 PATH 或环境更改影响的进程的父/子继承树是什么?

该树中的相关进程使用/读取/获取哪些初始化文件?

下面是 ps(1) 输出的一部分,展示了继承树的含义:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

请注意 \_ 图形序列和 PIP/PPID 编号(进程 ID 和父 PID)。 PID 1855 由(某个子进程?)1497 启动,1497 由 1481 启动,1481 由 PID 1 启动,而 PID 1 由祖先进程 0 启动。

对您想要影响的进程进行类似的继承跟踪,找出相关的初始化文件,并对该树中的某个位置进行 PATH 更改,可能类似于以下内容:

PATH=${PATH}:/usr/local/bin

相关内容