正确设置环境

正确设置环境

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

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

编辑为了澄清 - 我使用了.profile手动将其来源于.zshrc.无论如何,它不会改变问题。

答案1

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

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

以可移植的方式获得会话与 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 程序),或者寻找特定于系统的方法(这可能取决于您的发行版、显示管理器(如果有)、会话类型(如果有显示管理器)以及桌面环境或会话管理器)。

答案2

Gentoo 文档中有一篇文章Gentoo Linux 本地化指南第3章是关于设置区域设置。

大多数情况下,用户仅在全局基础上设置 LANG 变量。此示例适用于 unicode 德语区域设置:

代码清单3.1:设置默认系统语言环境/etc/env.d/02locale

LANG="en_GB.UTF-8"

在我的 Gentoo 中,LANG此文件已设置,一切正常...

pbm@tauri ~ $ cat /etc/env.d/02locale 
LANG="pl_PL.UTF-8"

pbm@tauri ~ $ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=

相关内容