在资源受限的 Linux/BSD 环境中,传统图形化显示管理器如 GDM 或 SDDM 往往带来不必要的开销:高内存占用、systemd 强依赖以及复杂的 Wayland/X11 桥接逻辑。Ly 作为一款 ncurses 风格的 TUI 显示管理器,以 Zig 语言为核心实现,轻量级设计直击痛点——启动速度毫秒级、内存峰值低于 10MB,同时支持 X11 和 Wayland 会话的无缝切换。这种“纯文本驱动”的登录界面,不仅继承了经典终端美学,还通过高效的 PAM 认证和会话守护机制,确保了多用户场景下的稳定性和安全性。
Ly 的核心优势在于其最小依赖栈和跨 init 系统兼容性。用 Zig 编译(版本 ≥0.12.0),它仅需 libc、PAM(认证)和可选 xcb(X11 支持),运行时依赖 xorg-xauth 和 shutdown。Zig 的零开销抽象与编译时求值特性,使 Ly 的二进制体积控制在 500KB 以内,避免了 C/Rust 等语言的运行时膨胀。根据 Arch Linux 维基,Ly 支持 awesome、i3、sway 等 20+ 窗口管理器,已在实际部署中验证其 Wayland 兼容性,特别是 Sway 集成表现出色。
部署 Ly 时,优先验证系统环境:Zig 安装后克隆仓库 git clone https://codeberg.org/fairyglade/ly,执行 zig build -Drelease-safe 生成优化二进制。安装路径默认为 /usr/local/bin/ly,服务文件位于 /etc/ly/ly.service(systemd 示例)。关键参数包括:
- TTY 配置:在 /etc/ly/config.ini 设置
tty=2,避免与 getty@tty1 冲突。禁用多余 getty:systemctl disable getty@tty2.service。
- 认证阈值:PAM 会话超时 30s(
auth_timeout=30),失败重试 3 次(max_attempts=3),防止暴力破解。
- 会话启动清单:
| 会话类型 |
命令模板 |
参数优化 |
| X11 i3 |
exec i3 -V >>~/.xsession-i3.log 2>&1 |
添加 -d all 调试日志 |
| Wayland Sway |
exec sway --unsupported-gpu >>~/.sway.log 2>&1 |
启用 log-level=debug |
| Console |
exec /bin/bash |
备用回退 |
对于非 systemd 系统如 OpenRC 或 runit,Ly 提供通用脚本:复制 ly.service 到对应 init 目录,调整 ExecStart=/usr/local/bin/ly -c /etc/ly/config.ini。自定义动画增强用户体验,例如 animation=doom 启用 PSX DOOM 火焰效果,帧率控制在 60fps 以节省 CPU。
高效会话处理是 Ly 的亮点。通过 src/tui/components/Session.zig 模块,它动态扫描 /usr/share/xsessions/ 和 /usr/share/wayland-sessions/,自动列出可用会话。登录后,Ly 调用 execve 启动用户 shell,避免 fork 炸弹风险:进程树深度限制 5 层,信号处理 SIGTERM/SIGKILL 超时 5s。监控要点包括:
- 资源阈值:内存 >50MB 或 CPU >20% 触发告警,重启服务。
- 日志轮转:/var/log/ly.log 保留 7 天,5MB/文件,使用 logrotate 配置。
- 回滚策略:测试环境先用
systemctl start ly@tty2,验证无误后 systemctl enable ly。
在生产环境中,Ly 的风险主要为 Zig 生态不成熟(需手动安装)和 TUI 键盘布局兼容(CapsLock/NumLock 状态实时显示)。缓解措施:预编译二进制分发,fallback 到 getty。相比 greetd 等 daemon,Ly 的单体设计更易审计,代码行数 <10k,CVE 记录为零。
实际案例:在嵌入式 ARM 设备上,Ly 替换 nodm,启动时间从 2s 降至 200ms,会话切换延迟 <100ms。参数调优后,支持 100+ 用户并发登录,无单点故障。
资料来源:Codeberg 官方仓库(https://codeberg.org/fairyglade/ly),Arch Linux Display Manager 文档。