文章摘要
dwl 是一个基于 wlroots 的轻量级、可定制的 Wayland 合成器,旨在在 Wayland 世界中提供类似 dwm 在 X11 中的功能和哲学。它易于理解和扩展,通常只需一个 C 源文件进行配置,并尽量减少外部依赖。用户可以从最新半稳定版本开始,或参与开发分支的进展。
文章总结
dwl - Wayland 上的 dwm
dwl 是一个基于 wlroots 的轻量级、可定制的 Wayland 合成器,旨在在 Wayland 世界中提供与 X11 中的 dwm 类似的功能和理念。与 dwm 一样,dwl 具有以下特点:
- 易于理解和扩展:通过
config.h进行配置,代码简洁,通常只有一个 C 源文件。 - 依赖少:尽可能减少外部依赖。
开始使用
- 最新半稳定版本:建议从发布页面下载最新版本,该版本与主流发行版中的 wlroots 版本兼容。
- 开发分支:
main分支是活跃开发的地方,但需要用户自行追踪 wlroots 的 git 提交,适合喜欢冒险的用户。
构建 dwl
dwl 依赖以下库:
- libinput
- wayland
- wlroots(需编译支持 libinput 后端)
- xkbcommon
- wayland-protocols(仅编译时)
- pkg-config(仅编译时)
如果启用 XWayland 支持,还需以下依赖:
- libxcb
- libxcb-wm
- wlroots(需编译支持 X11)
- Xwayland(仅运行时)
安装这些依赖后,运行 make 进行构建。若需启用 XWayland,需在 config.mk 中取消相关注释。
配置
所有配置通过编辑 config.h 并重新编译完成,类似于 dwm 的方式。由于 Wayland 无法单独重启窗口管理器,任何更改将在下次启动 dwl 时生效。用户可以通过 dwl-patches 分享他们的补丁。
运行 dwl
dwl 可以在 wlroots 支持的任何后端上运行,包括 X11 或 Wayland 会话中的独立窗口,或直接从 VT 控制台运行。首次运行时,可能需要将用户添加到 video 和 input 组。默认背景为灰色,可在 config.h 中修改。
若需在启动时自动运行脚本或命令,可使用 -s 选项指定命令。该命令将作为 shell 命令执行,类似于 .xinitrc,但不会在进程终止时关闭显示服务器。
状态信息
dwl 会将布局、窗口标题、应用 ID 等信息写入 -s 命令的标准输入,可用于填充外部状态栏。若不需要读取状态信息,可使用 <&- 关闭标准输入。
背景
dwl 的目标是提供必要且简单的功能,而不是包含所有功能。默认功能包括:
- 简单的窗口边框、标签、快捷键绑定、客户端规则、鼠标移动/调整大小。
- 可配置的多显示器布局支持,包括位置和旋转。
- 可配置的 HiDPI/多 DPI 支持。
- 空闲抑制协议,允许应用程序禁用空闲监控。
- 通过 stdout/stdin 提供信息给外部状态栏。
- 通过 xdg-activate 协议提供紧急提示。
- 支持屏幕锁定器。
- 各种 Wayland 协议。
- XWayland 支持(可在
config.mk中启用)。 - 零闪烁,Wayland 用户期望“每一帧都完美”。
- 层 shell 弹出窗口(用于 Waybar)。
- 场景图 API 提供的损坏跟踪。
由于 Wayland 架构,dwl 需要实现 dwm 和 xorg-server 的功能,因此无法保持 2000 行代码的原始目标,但会尽量保持代码简洁。
考虑中的功能
- 由 wlroots 简化的协议。
- 实现文本输入和输入法协议以支持 IME。
非目标功能
- 客户端装饰(除非必要)。
- 客户端发起的窗口管理,如移动、调整大小和关闭。
- 动画和视觉效果。
致谢
dwl 最初基于 sway/wlroots 开发者提供的 TinyWL 示例(CC0)进行扩展。感谢 suckless.org 和 dwm 开发者及社区的灵感,以及项目的各位贡献者。
评论总结
评论内容总结如下:
对dwm的喜爱与替代方案
- 多位评论者表达了对dwm的喜爱,但也提到其局限性,尤其是对Wayland的支持不足。
- 例如,alex-moon表示:“Big big fan of dwm, but this wasn't mature when I tried it. I switched to Hyprland and I have to say it has many improvements over dwm.”
- exiguus提到:“I am a big fan of dwm and have used it for years... I considered sway as the successor to dwm.”
对dwl的积极评价
- 评论者对dwl的简洁性和对Wayland的支持表示赞赏。
- jauntywundrkind指出:“Pretty awesome that this is a 3200 line single .c file implementation, atop wlroots and it's newer scene graph API.”
- gundamdoubleO表示:“Very happy with dwl since I found it, made the switch (almost) painless.”
其他替代方案的推荐
- 一些评论者推荐了其他窗口管理器,如Niri和Hyprland。
- xwiz提到:“I would also like to direct attention to my daily driver, Niri.”
- alex-moon提到:“I switched to Hyprland and I have to say it has many improvements over dwm.”
对Wayland的态度
- 部分评论者对Wayland表达了复杂的情感,既有期待也有保留。
- chiffre01简单表示:“I want to like Wayland...”
- snvzz则希望dwl支持UTF-8:“hopefully with utf-8 support?”
技术细节与扩展
- 评论者提到dwl的技术实现和扩展性,如Guile Scheme支持。
- dannyobrien提到:“See also... a fork with Guile Scheme support.”
- jauntywundrkind强调:“It is not hard to build a good Wayland impl at this point!”