正确设置环境

Mac*_*tka 18 gnome gentoo desktop-environment gdm environment-variables

我正在使用 zsh 和 gdm 来运行 gnome。前段时间我发现变量设置不正确。例如 LANG/LC_ALL 是不正确的(""而不是en_GB.UTF-8)。

我把.zshrc分成.zshrc.profile。在后者中,我设置了环境变量,但是如何在会话开始之前设置变量?我尝试了一些选择(.xinitrc, .xsessionrc),但似乎都不起作用。

编辑为了澄清-我曾经.profile手动在采购它.zshrc。无论如何它不会改变问题。

Gil*_*il' 29

简单的方法是发明一台时间机器,拜访设计 shell 启动文件的各种人,并告诉他们清楚地区分三件事:

  • 会话设置,例如环境变量;
  • 会话启动,即,例如启动命令行外壳或窗口管理器或运行startx
  • shell 初始化,例如别名、提示、键绑定。

以可移植的方式正确获取 session 与 shell 并不太难:登录时初始化进入.profile(or .zprofile, or .login),shell 初始化进入.bashrcor .zshrc。我以前写过关于.bash_profile, zsh 与其他 shell 的比较更多关于可移植性(主要是关于 bash)更多关于谁阅读.profile.

剩下的问题是区分会话设置和会话启动。在大多数情况下,~/.profile在您登录时执行并且可以兼作两者,但也有例外:

  • 如果您的登录 shell 是 (t)csh 或 zsh,~/.login并且~/.zprofile是来源而不是~/.profile. 同上,用于bash和~/.bash_profile,但是这很容易被采购解决~/.profile~/.bash_profile
  • 如果您在显示管理器(xdm、gdm、kdm 等)下登录,您是否~/.profile被读取取决于程序的版本、您的发行版(Linux 或其他)以及您选择的会话类型。
    • 如果您指望显示管理器为您启动会话,则.profile必须设置环境变量但不能启动会话(例如窗口管理器)。
    • X 会话的传统配置文件是~/.xsession,执行会话设置和会话启动。所以文件本质上可以是. ~/.xsession; . ~/.xinitrc. ~/.profile之前的一些发行版来源~/.xsession。现代发行版仅~/.xsession在您从显示管理器中选择“自定义”会话时才提供源,并且此类会话并不总是可用。
    • 您的会话管理器可能有自己的设置环境变量的方式。(这是您桌面环境的一个可选部分,由您通过配置文件或登录时选择会话类型来选择;不要将其与显示管理器提供的会话启动脚本混淆,这些脚本在您的用户下执行,但是在系统范围的基础上选择。是的,这是一团糟。)

综上所述,~/.profile是环境变量的正确位置。如果未读取,请尝试从中获取它~/.xsession(并从那里启动您的 X 程序),或查找特定于系统的方法(这可能取决于您的发行版、显示管理器(如果有)、会话类型(如果显示管理器)以及桌面环境或会话管理器)。