现代 Linux 桌面会话管理

最近尝试了使用 Wayfire 作为 Wayland 混成器,整体体验后,Wayfire 的功能是不错的,可惜其没有 systemd 支持,对于依赖 systemd 的我来说,这显然是不能够满足日常需求的。因此,我研究了如何为其添加基于 systemd 的会话管理机制,记录在此文中。 桌面会话的生命周期 传统方式 在 Linux 中,本没有什么非常精细的会话管理机制,无论是 Shell 登录还是图形界面登录,一切都可以是非常简洁的流程完成。 Shell 登录时,Login Manager 以登录用户身份启动 Login Interactive Shell 进程,Shell 则运行相应的 Profile 脚本,如 bash(1) 加载 ~/.bash_profile 或 ~/.profile,作为最简单的会话管理机制,运行一些后台任务。对于图形界面来说,可以直接 startx、加载 ~/.xinitrc 、启动 X 服务器和 Window Manager 等进程,或者运行 Wayland 混成器,或者由 Display Manager 负责创建 X 服务器或 Wayland 混成器进程,而图形环境所需要的程序要么通过 ~/.xinitrc 这样的脚本启动,要么在 Window Manager 的配置文件中指定。 无论是什么方法,都是原始的机制。尽管它们原理十分简单,却存在诸多弊端,比如配置服务启动的方式不统一,Shell 登录、X 环境登录和 Wayland 环境登录需要各种不同的配置文件、需要写脚本以命令式的方式完成;比如这种方式没有充分利用 systemd 的支持,集成差、体验割裂。在 Linux 桌面系统中 systemd 早已普及的今天,这种原始方式显然跟不上时代。 基于 systemd 的现代方式 systemd 早已为 Linux 的各种应用场景设计好了一套服务和会话管理的框架,其关键点在于各种预定义的 target。target 是系统的生命周期的各个阶段起始或终止的标志,只要为每个程序写好 service 文件,并设置好其与 target 的关系,systemd 即可完全自动地在特定时间节点做好规划的工作,运行各种服务。 ...

February 18, 2026 · 5 min · Justin Chen