Linux 环境配置文件处理流程

今天遇到一个问题,同样的软件从终端运行能够正常使用中文输入法,但从图形界面下运行就无法正常处理中文输入法了。思考了下,感觉应该是两者的环境配置文件不同导致的。查阅了下 Linux 的相关文档,确实存在这个问题,在此记录备忘。

1 Shell 环境配置文件的处理流程

1.1 配置加载流程

  • 全局配置文件:位于 /etc/profile

  • 私有配置文件:位于 ~/.profile

  • Shell 自定义配置文件, 依据指定的 Shell 有所不同,例如:

    • 对于 bash ,有 (~/.bash_profile | ~/.bash_login) -> ~/.bashrc -> /etc/bashrc
    • 对于 zsh,有 ~/.zshrc

1.2 环境变量的设置

除了在上述配置文件中,通过 export 变量名=变量值 这种方式设置环境变量外,Linux 还可以通过单独的配置文件设置环境变量。这些配置文件的结构也非常简单,每行设置一个环境变量,语法格式为 变量名=变量值。其中:

  • 全局环境变量: 位于 /etc/environment
  • 私有环境变量: 位于 ~/.pam_environment

1.3 到底使用哪个文件做配置?

  • 如果希望系统的所有用户都具有同一配置,则使用 /etc/profile/etc/environment

  • 如果希望某个用户的所有 Shell 具有同一配置,则使用 ~/.profile~/.pam_environment

  • 如果仅希望某个用户的某个特定 Shell 具有特定配置,则使用 ~/.bashrc~/.zshrc 等。

对于只有一个用户的个人电脑桌面应用场景来说,通常只需要根据使用的 Shell 在 ~/.bashrc 等文件中配置即可,如果频繁在多个 Shell 之间切换,则可以考虑在 ~/profile~/.pam_environment 中一劳永逸地配置。

2 X 图形管理器环境配置文件的处理流程

2.1 不同于 Shell 的环境配置

首先要理解,Linux 图形管理器的环境参数与 Shell 中环境参数是不同的两套体系。通常在一些图形管理器的启动过程中,会先加载 Shell 环境配置文件(如: /etc/profile~/.profile 等),然后再加载图形管理器的环境配置文件(如: /etc/xprofile/usr/local/etc/xprofile~/.xprofile 等 ),但为稳妥起见,最好将 Shell 和图形环境的配置分开设置。否则,很容易出现在 Shell 中运行良好,而在图形管理器中运行时却异常的现象(或反之)。

2.2 主要的环境配置文件

涉及图形界面环境的配置文件常见的有三种:.Xsession.xinitrc.xprofile 。其中 .xinitrc 是历史最悠久的配置文件,而 .Xsession 则被很多社区推荐与 .xinitrc 保持一致,例如:使用 ln -s .xinitrc .xsession 建立软链接。但不同的 Linux 发行版和图形管理器具体使用其中哪一个或哪一些,往往都有自己的约定。实际经验中,使用 .xinitrc.xprofile 的比较普遍。例如,在原生情况下, .xinitrc.xprofile 通常都会被以下图形管理器引用:

  • GDM:在 /etc/gdm/Xsession 中被引用;

  • KDM:在 /usr/share/config/kdm/Xsession 中被引用;

  • LightDM:在 /etc/lightdm/Xsession 中被引用;

  • LXDM:在 /etc/lxdm/Xsession 中被引用;

  • SDDM:在 /usr/share/sddm/scripts/Xsession 中被引用。

那么,.xprofile 相较于 .xinitrc/.xsession 有什么差別呢?

  • .xprofile 是被图形管理器( GDM/KDM等)调用的,所以它比较单纯,只需要在里面加载你的环境配置和命令即可, .xprofile 被执行結束之后,控制权会返回图形管理器。

  • .xinitrc/.xsession 比较复杂一些,因为 .xinitrc.xsession 文件的最后一句应当是 exec gnome-sessionexec startkdeexec enlightenmentexec icewm 之类的会话程序,无论哪种图形管理器,在调用这两个文件时,通常都意味着控制权会被相应的窗口管理器接管 。

2.3 配置文件加载过程

对于大部分应用场景来说,我们只需要配置 .xprofile 即可。下面是某图形管理器启动时,调用环境配置文件的过程。

bash
1
2
3
[ -f /etc/xprofile ] && . /etc/xprofile
[ -f /usr/local/etc/xprofile ] && . /usr/local/etc/xprofile
[ -f $HOME/.xprofile ] && . $HOME/.xprofile

2.4 到底该用哪个配置文件?

  • 如果希望系统中所有用户的图形界面,都享有同一配置,使用 /etc/xprofile/usr/local/etc/xprofile

  • 如果希望某个用户的图形界面有自己特定的配置,使用 ~/.xprofile

对于只有一个用户的个人电脑桌面应用场景来说,通常只需要在 ~/.xprofile 文件中配置即可。