/etc/profile 不是应该在图形化 Linux 环境下至少被执行一次吗?

/etc/profile 不是应该在图形化 Linux 环境下至少被执行一次吗?

使用 Gentoo 和 KDE 4,打开 Konsole 或 xterm 不会提供 /etc/profile 中定义的内容。此文件通常由登录外壳,但在图形环境中什么可以被视为登录 shell?这应该在 X 会话之前获取吗?Konsole 的 shell 应该设置为bash --登录? 这是 bug 吗?

感谢您的帮助。

答案1

这取决于。

除非 shell 是作为“登录 shell”启动的(这是系统向 shell 发出信号的方式,表明这是用户第一次在本次会话中与计算机交互),否则它将作为“子”shell 启动。

“登录” shell 从设置的任何控制机制 (/etc/profile、/etc/profile.d/,以及通常的本地点文件,如 .profile 和 .bashrc(如果是 bash)) 获取环境。

“子” shell 仅继承其父级的环境,但有时也会根据其配置方式运行一些点文件。

在大多数配置了 X 的系统中,点文件由启动窗口管理器的任何进程获取,xterms 或 konsoles 或任何从中继承的程序。这是因为它不被视为登录会话,因为您在启动 konsole 时已经登录。

如果需要,您可以将 konsole 设置为运行“bash --login”,但当您运行依赖于使用 --login 参数破坏的环境变量的程序时,这可能会产生意外的副作用。

答案2

根据Gentoo 手册中的此页面,在 Gentoo 上,您需要在 /etc/env.d 目录下的文件中定义环境变量,而不是在 /etc/profile 本身中定义。

答案3

登录 shell 以“-”开头来区分(由 shell 解释器区分)。也就是说,登录 bash shell 的 argv[0] 将是 -bash 而不是 bash。其他 shell 也是如此(-ksh vs ksh、-csh vs csh、-sh vs sh 等)。这由登录程序或其他身份验证步骤完成。Bash 提供 -l 或 --login 选项,但这应该相当于 -bash。

如果您希望确保读取 /etc/profile(而不是仅设置继承的环境),您可以在 ~/.profile 中明确读取它。使用适合您所选 shell 的文件名。

答案4

我认为这是 gentoo 的一个错误...检查您的 ~/.xsession-errors 是否存在涉及‘keychain’的错误...

新兴的 net-misc/keychain 为我解决了这个问题。

相关内容