1. 显示管理器不是"登录界面"这么简单
1.1 登录窗口只是显示管理器的一面
每次开机卡在输入密码的那个画面,大家都习惯叫它登录界面。但在 Linux 系统里,这个画面的正式身份是显示管理器(Display Manager,缩写 DM)。它干的事远不止画一个输入框:接管开机后的图形登录、验证用户密码、读取桌面会话配置文件、启动完整桌面环境,每一步都是它一手操办。
从 systemd 的角度看,显示管理器其实就是一个普通的服务单元。系统规定得明明白白:谁占住了display-manager.service这个别名,谁就是默认的显示管理器。系统启动时systemd会尝试启动display-manager.service,而它只是一个软链接,实际指向的可能是gdm.service、sddm.service,也可能是lightdm.service。这就是整个"默认显示管理器"机制的核心:你选择的不是界面,而是软链接指向的那个服务。
# 查看当前系统默认的显示管理器指向谁 readlink /etc/systemd/system/display-manager.service输出示例:
/usr/lib/systemd/system/gdm.service明白了这层关系,后面所有"切换默认显示管理器"的操作都好理解了:本质上就是把这个软链接改指到另一个服务,同时把旧服务停掉。
1.2 桌面环境自带绑定,轻量用户没得选
大多数图形桌面环境安装的时候会强行绑定一个显示管理器。GNOME 打包了 GDM,KDE Plasma 打包了 SDDM,合情合理没什么毛病。可问题在于,像我这类习惯用 i3、sway、bspwm 平铺窗口管理器的人,系统里根本不存在 GNOME 那套桌面全家桶,却被安装包顺手塞进来一个 GDM。启动时面对的是圆滚滚的 GNOME 风格登录界面,图形栈、依赖库、后台服务堆了整整一层,结果登录进去只有一个光秃秃的终端,这种体验非常拧巴。
也正因为这样,社区里一直有人折腾替代方案。从早期的 slim,到后来各类终端风格的登录器,目的就一个:让显示管理器回到它本来的定位——一个简洁的会话启动器。最近在搜索热度里频繁看到"轻量级 显示管理器 ly",ly 就是这条路线里目前做得最极致的那个。这篇就聊聊 ly 是什么、怎么装、怎么把它设成默认显示管理器,以及在真实使用中会踩到哪些坑。
2. ly 是个什么来头:终端里的登录界面
2.1 ly 的设计目标和依赖哲学
ly 由 William Swanson 发起,是一个用 C 写成的极简显示管理器。它最核心的特征是:没有自己独立的图形渲染界面,而是依赖 Linux 的 framebuffer(帧缓冲)在虚拟终端(TTY)上直接做图形绘制。你看到的效果,是字符界面风格的登录窗口,颜色、区块、高亮都有,但本质还是在 tty 上运行。
这个设计带来的直接好处就是依赖少。对比 GDM 需要完整的 gnome-shell 渲染栈,SDDM 需要一堆 Qt 图形库,ly 的硬依赖只有 systemd(当然也可以不带它跑)、pam、cairo 这几个基础库。装在平时压根儿不装图形界面的服务器上,也不会拉进来几十个包。
另一个让我觉得舒服的地方是 ly 的代码结构非常朴素。它把界面绘制交给一个叫 composer 的独立组件,composer 负责轮询键盘输入、绘制输入框、处理背景与动画,认证部分则通过 PAM 完成,理论上它对登录账户的验证方式完全由系统 PAM 配置决定,不会搞出什么私有的账号逻辑。
2.2 和主流 DM 摆在一起,ly 的取舍在哪
先看个对照表,直观感受一下几款主流显示管理器的定位差异:
| 显示管理器 | 所属生态 | 图形依赖 | 登录界面风格 | 典型内存占用 |
|---|---|---|---|---|
| GDM | GNOME | gnome-shell 全家桶 | 图形化登录,风格跟随 GNOME | 偏高 |
| SDDM | KDE | Qt 图形库 | 图形化登录,主题丰富 | 中等 |
| LightDM | 跨桌面 | 依赖具体 greeter | 可定制 greeter,界面多样 | 中低 |
| ly | 无绑定 | framebuffer + cairo | 终端字符风格 | 极低 |
表格里最扎眼的就是 ly 那一行:没有自己的图形绑定,不需要任何桌面环境组件配合。它启动的会话由你选择,可以进 X11 桌面,也可以进 wayland 桌面,甚至可以直接进入纯终端会话。这个特性对我这种有多套桌面环境轮换使用的人来说非常友好。
y 的一个权衡是在功能性上做了减法。GDM 和 SDDM 支持用户图标管理、多显示器布局记忆、远程登录这些高级特性,ly 都没有。它的哲学就是"快速、轻巧、单一职责"。但实际使用中你会发现,登录界面的功能究其根本只需要三件事:选会话、输密码、按回车。其他多余的东西,对特定用户来说都是负担。
2.3 从内核 framebuffer 到登录界面
上面说的 framebuffer,如果不熟,大概相当于系统分配给你一块"直接画屏幕"的缓冲区,不需要经过 X server 或者 Wayland compositor。ly 启动时会直接打开/dev/fb0(或系统里的 DRM 设备),把自己绘制的登录界面写入这块缓冲区。这意味着即使系统里根本没有 X 环境,ly 照样能显示图形界面。
一个误区容易在这出现:很多人以为 ly 是"文字界面"登录器,输入的密码都以明文显示。完全不是,它走的是 framebuffer 图形绘制,密码照样以圆点或星号遮罩,界面还有颜色变化与动画效果。说白了就是个长着终端脸、内核却是图形渲染的登录器。
3. 把默认显示管理器切成 ly 的完整操作流程
3.1 安装方式:发行版仓库优先
ly 现在已经被不少主流发行版官方收录。我拿几个有代表性的发行版说明:
- Arch Linux:
sudo pacman -S ly,官方源直接有。 - Debian / Ubuntu:
sudo apt install ly,新版 Debian 12+ / Ubuntu 23.04+ 已进源。 - openSUSE:
sudo zypper install ly。 - Fedora:
sudo dnf install ly,部分版本可能在 COPR。 - 其他发行版或想尝鲜,可以走源码编译:
git clone https://github.com/fairyglade/ly && cd ly && make && sudo make install。
装机完可以验证一下版本:
ly --version如果这条命令没有输出,说明安装路径不在 PATH 里,可以从/usr/bin/ly或/usr/local/bin/ly检查。
注意:源码编译前先确认系统里有 gcc、pam 开发头文件(
libpam0g-dev/pam-devel)以及libcairo2-dev之类的基础依赖,否则编译到一半会卡在头文件缺失。
3.2 停用旧显示管理器,激活 ly 服务
这是整个切换流程里最关键的一步,也是最容易翻车的地方。要遵循的原则是:同一时间只能存在一个活动的显示管理器服务。如果你用了多重 DM 同时启动,比如 gdm 和 ly 都在启用状态,系统会随机选择占住 tty1 / tty2 的界面,出现黑屏、卡死、登录循环都是大概率事件。
我的推荐操作顺序如下:
- 停用并停掉现有的显示管理器。需要停哪些取决于你系统里装了什么,一般就是 gdm、sddm、lightdm、lxdm 这几位:
sudo systemctl disable --now gdm sddm lightdm lxdm- 启用 ly,设为默认显示管理器,然后立刻启动:
sudo systemctl enable ly.service sudo systemctl start ly.service- 检查默认显示管理器软链接是否已指向 ly:
ls -l /etc/systemd/system/display-manager.service输出里应该出现ly.service。如果软链接还指向旧服务,可以手动修正:
sudo ln -sf /usr/lib/systemd/system/ly.service /etc/systemd/system/display-manager.service- 重启系统验证。重启后看到终端风格的 ly 登录界面,说明切换成功。
3.3 第一次启动:黑屏或分辨率异常怎么排查
我换到 ly 的第一次重启就翻了车,登录界面刷出来一半是黑屏,键盘乱码,画面边缘有明显的"撕裂感"。后面排查才发现原因很简单:ly 使用的 framebuffer 分辨率跟我核显驱动的 VESA 模式没对上,而内核启动参数里又强制了某个分辨率。
解决方法是给内核传video=参数。比如我在 GRUB 里给 Linux 内核追加了:
video=1920x1080如果你用的是 Intel 核显,也可以试试video=eDP-1:1920x1080,让 ly 打开 framebuffer 时拿到正确的尺寸。另一个常见的情况是在某些新锐龙平台上,DRM 驱动起来后 framebuffer 设备被占据,ly 起不来,这时候需要在 ly 的配置里设定它要用的 tty,按Ctrl+Alt+F2能切过去说明 tty2 是好的。
提示:刚装完 ly 重启卡在黑屏时,别急着回滚。先用
Ctrl+Alt+F2切换终端,登录后看systemctl status ly.service和journalctl -u ly.service的输出。百分之八十的问题能直接从日志里找到答案,剩下百分之二十通常出在 framebuffer 设备没建好。
3.4 vi 风格快捷键上手即用
ly 的操作逻辑特别像 vim。开机登录时,上下方向键或j/k键切换用户,Tab在用户名、密码、会话选择框之间跳转,回车确认认证。输错密码回到用户名那一行重新开始,没有多余的弹窗。
我第一次用的时候还本能地去摸鼠标,然后发现整个界面根本没有鼠标概念。习惯了之后反而觉得流畅,登录本来就是键盘操作频率最高的环节,去掉鼠标依赖省了不少动作。
4. ly 的配置细节:一个 config.ini 管到底
4.1 配置文件结构与关键项
ly 的配置文件路径为/etc/ly/config.ini。它的设计非常朴素,所有配置集中在一个 ini 文件里,甚至没有拆成多个片段。下面这份是我目前线上使用的配置,加了注释说明每一项的作用:
[ly] # 登录界面所在虚拟终端,默认为 tty2,不要和系统默认 console 抢占 tty = 2 # 默认会话,demo 会话表示启动终端,可根据实际安装的 desktop 文件填 default_session = i3 # 黑底白字风格,也可以设置为 dark linu theme = dark # 登录成功后是否继续显示动画,个人建议关掉,避免切桌面时卡顿 animate = false # 自动登录,测试机上很方便,生产环境慎开 autologin = false # 隐藏顶部用户列表,适合单用户工作机 hide_top = true # 光标闪烁,保持默认即可 cursor_blink = truedefault_session这个选项值得多说几句。它填的值要匹配/usr/share/xsessions/或/usr/share/wayland-sessions/目录下的.desktop文件名(去掉.desktop后缀)。比如装了 i3 后,目录里有个i3.desktop,这里就填i3;装了 sway,对应sway.desktop,填sway。拿不准就打开目录看一眼,chances 比瞎猜靠谱得多。
4.2 键盘布局、语言与多别名切换
如果你用的不是美式键盘布局,ly 默认的us会让你输密码时像在跳恰恰。解决办法是在启动 ly 时设置XKB相关环境变量,或者在 ly 的配置里指定:
keyboard_layout = pl lang = en_US.UTF-8这行的意思是键盘布局用波兰语布局、系统语言用英文 UTF-8。你自己按需改成de、ru、fr都行。要注意的是,键盘布局设置只对 ly 界面本身生效,会话启动后桌面环境的布局重新由各自桌面系统管理。
4.3 自动登录:测试机与树莓派的提速方案
如果你有一台专用于开发或测试的机器,不想每次开机都输一遍密码,可以直接开启自动登录:
autologin = true autologin_user = myuser这里有个小坑,一旦autologin开启,ly 默认会跳过会话选择界面直接登录默认会话,你设置的default_session会直接生效。如果你的多会话切换需求比较强,就不要全局开自动登录,换成手动选择。
4.4 主题、动画与性能
ly 内置了几个配色主题,可在配置里用theme切换,有dark、linu、modern等。
我在一台老旧的联想 ThinkPad T430(i5-3320M,无独显)上实测,ly 启动到登录界面显示完成大约耗时 1.2 秒左右,且登录后到桌面就绪的过程不会因为登录器等待而变慢。相比之下,GDM 在这台机器上光界面出现就要四五秒。对老机器用户来说,这一项优化体感很明显。
5. 实战踩坑记录:三次真实翻车与修复
5.1 与 GDM 共存时出现的登录循环
我最初是在一台 Arch 机器上测试,系统里装着 GNOME 桌面,理所当然带上了 GDM。我按前面说的流程禁用了 GDM 启用 ly 后,登录 ly 界面输入密码,屏幕闪了一下又弹回 ly 登录框,典型的登录循环。
排查过程花了很长时间。一开始怀疑 PAM 配置,因为 ly 的 PAM 服务需要独立配置,默认安装时会创建/etc/pam.d/ly,这个文件内容如果不对,就可能每次认证被拒绝。我对比了/etc/pam.d/login和/etc/pam.d/gdm,确认基本框架没问题后仍然复现。
后来打开journalctl才发现端倪:
systemd[1]: Starting Ly Display Manager... systemd[1]: Started Ly Display Manager. systemd[1]: display-manager.service: Deactivated successfully.ly 服务启动了却又立刻停止,这几乎可以确定是 systemd 层面出了问题。去查依赖关系,发现 GDM 的 unit 文件里有After=systemd-user-sessions.service,而 ly 的 service 文件也设置了类似依赖,但问题出在这台机器上user-sessions.service还残留着 GNOME 会话的锁文件。重启后会话锁未清理,PAM 的pam_systemd.so模块认定系统已有活跃会话,拒绝我再次注册。
解决办法很简单,把残留会话和锁清掉:
rm -f /run/nologin loginctl terminate-user 我的旧用户名然后重启 ly 服务。这次登录循环彻底消失。这个问题的经验价值在于:登录循环不一定是 ly 的"锅",很多时候是 PAM + systemd-session 的残余状态交叉影响。遇到循环先看日志,手动终结旧会话比反复重启系统高效得多。
5.2 Wayland 会话选不上:xorg.conf 残留的锅
另一台笔记本上,默认桌面是 sway(Wayland 合成器),我装完 ly 后发现登录框里会话列表只有 X11 的选项,点选 Wayland 会话直接黑屏闪回。
查了一圈,发现问题出在系统里残留的/etc/X11/xorg.conf文件上。ly 启动会话时尝试读取 X11 配置,某个过时的驱动配置导致 Wayland 合成器初始化失败。
解决方法是给 ly 指定一个干净的会话启动环境:
[ly] default_session = sway同时在启动会话时把XDG_SESSION_TYPE明确指定为wayland:
loginctl session-status # 确认当前会话类型 echo $XDG_SESSION_TYPE如果输出是wayland,说明会话类型正确;若变成tty或x11,就要检查 ly 的会话选择脚本。ly 在启动会话时调用/etc/ly/session.sh,里面会依据所选.desktop文件自动判断协议。当你指定wayland-sessions目录下的 session 时,它会自动使用sway等 Wayland 合成器启动,不会去走 X11 路径。我之前黑屏闪回,大概率是 kernel 的 DRM 权限问题导致 compositor 没法打开显卡设备,这又回到了用户组配置上。
把用户加入seat、video组,或者干脆启用logind manage seat,问题就消失了:
sudo usermod -aG seat,video,audio 用户名5.3 开机启动顺序:service 竞态导致偶尔白屏
这个坑比较隐蔽,只在开机负载高的时候偶现:ly 的服务启动得太早,虚拟终端节点还没就绪,导致 framebuffer 设备打开失败,整个登录界面白屏。虽然重启后又好了,但生产环境不可能每次都靠重启赌一赌。
查 ly 的 service 文件依赖,发现它只声明了After=systemd-user-sessions.service,但没声明等getty.target完成。系统开机时 udev 与内核设备节点初始化过程有竞争,启动时机不对就会偶发。
修复方案:给 ly 服务加一个依赖,禁用掉默认的启动时机抢占:
[Unit] After=systemd-user-sessions.service getty.target systemd-logind.service Wants=getty.target然后守护进程重新加载 systemd:
sudo systemctl daemon-reload sudo systemctl restart ly之后开机几十次,再也没有出现过白屏。
6. 选型建议:你的桌面到底适不适合 ly
6.1 推荐使用 ly 的场景
不绕弯子,直接给清单:
- 主力环境是 i3、sway、bspwm、dwm 这类轻量窗口管理器,桌面环境基本只有终端 + 浏览器 + 编辑器。
- 机器配置老旧,内存 8G 以下,希望省下一切可以省的常驻内存。
- 多发行版多桌面轮换使用,需要一个不偏袒任何桌面环境的通用登录器。
- 更喜欢键盘操作,觉得图形登录界面花里胡哨碍事。
- 折腾服务器和开发机,偶尔需要进桌面做 GUI 调试。
在这些场景里,ly 带来的体验提升是实打实的:启动快、内存占用低、会话切换干脆。
6.2 不建议用 ly 的场景
对应的反面清单也要写清楚:
- 主力桌面是 GNOME 或 KDE Plasma,希望登录界面与桌面视觉风格一致,并且需要 HiDPI 特性自动适配。
- 需要用户图标点击选择、远程桌面协议(RDP 登录)、多显示器环境下的布局记忆管理。
- 家里老人/非技术用户使用,界面对他们来说过于"黑客风格",学习成本不低。
- 用了比较冷门的文件系统或加密 home 目录,对 PAM 模块有特殊要求,这类需求最好让官方配套 DM 测试过。
6.3 从发行版角度给出的最终推荐
再给点配置层面的优先级建议:
| 发行版 | 推荐方案 |
|---|---|
| Arch / EndeavourOS | 官方源直接装 ly,最快最稳 |
| Debian / Ubuntu | 等版本 ≥ 23.04 后可用源内版本,老的用源码编译 |
| Fedora | 优先dnf install ly,没有则添加第三方源 |
| openSUSE | 官方源有,装完按前文步骤启用服务 |
| NixOS | module 方式启用,配置里加services.displayManager.ly.enable = true; |
| 高级玩法 | 可以只做软件包安装,不设默认 DM,手动启动排查 |
个人体会方面,我现在的主力笔记本和两台服务器全跑 ly。笔记本上搭配 sway,从开机到图形桌面就绪不到 10 秒;服务器上直接进纯终端会话,省掉了每次开机等待 GDM 那几秒的焦虑。登录界面虽然只有简单的字符和色块,但反馈直接,没有多余动作。
如果你还在纠结"亮瞎眼的图形登录界面"和"干净利落的终端登录界面"之间怎么选,其实只需要问自己一个问题:登录这个动作,经费是花在进桌面之前,还是进桌面之后?我的答案一直没变过——在进桌面之前,一切都应该快。