设置环境变量涉及的文件:
lxqt-session/src/main.cpp -->lxqt-session/src/sessionapplication.cpp --> lxqt-session/src/lxqtmodman.cpp
涉及的函数
int main(int argc, char **argv)
bool SessionApplication::startup()
SessionApplication::loadEnvironmentSettings(LXQt::Settings& settings)
void lxqt_setenv(const char *env, const QByteArray &value)
设置环境变量流程
设置环境变量按照以下步骤执行:
Main 函数内,创建
SessionApplication app(argc, argv)
实例;
在 SessionApplication
的构造函数最后,调用QTimer::singleShot(0, this, SLOT(startup()))
;在
SessionApplication::startup()
会调用不同的函数读取配置文件,开始配置当前用户设置的内容;在
SessionApplication::loadEnvironmentSettings(LXQt::Settings
&
settings)
读取配置文件session.conf
的Environment
组下的key
和value
;读取到的每一个环境变量,通过调用
lxqt_setenv(
const
char
*
env,
const
QByteArray
&
value)
函数设置;在
lxqt_setenv(
const
char
*
env,
const
QByteArray
&
value)
中使用qputenv
设置环境变量;
如果配置文件中没有写明语言相关的,SESSION 是如何处理的?
这部分可能是初始化系统(如 systemd
)和登录管理器(如 GDM
, LightDM
, PAM
)通过读取和应用 /etc/default/locale
文件中语言设置的。
以
systemd
为例,系统启动和语言设置的具体流程如下:
系统启动并加载内核。
systemd
初始化系统,并启动各个系统服务。
systemd-localed
服务启动并读取/etc/locale.conf
文件,该文件通常由安装程序通过/etc/default/locale
文件生成。
systemd
设置环境变量:systemd
会将读取到的语言设置应用到系统环境变量中,如LANG
、LC_ALL
等。用户登录时:
pam_env
模块读取/etc/environment
和/etc/default/locale
,将语言设置应用到用户会话环境中。