Hacker News 中文摘要

RSS订阅

Dwl: Wayland 下的 DWM -- Dwl: Dwm for Wayland

文章摘要

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 控制台运行。首次运行时,可能需要将用户添加到 videoinput 组。默认背景为灰色,可在 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 开发者及社区的灵感,以及项目的各位贡献者。

评论总结

评论内容总结如下:

  1. 对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.”
  2. 对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.”
  3. 其他替代方案的推荐

    • 一些评论者推荐了其他窗口管理器,如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.”
  4. 对Wayland的态度

    • 部分评论者对Wayland表达了复杂的情感,既有期待也有保留。
    • chiffre01简单表示:“I want to like Wayland...”
    • snvzz则希望dwl支持UTF-8:“hopefully with utf-8 support?”
  5. 技术细节与扩展

    • 评论者提到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!”