我正在使用 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 初始化进入.bashrc
or .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=