网站深度测评
dwm 是什么网站?
dwm 是 suckless.org 上的一个 X 窗口管理器(dynamic window manager),不是普通意义上的“网站服务”。它用 C 写成,主打极简、快速,通过编辑源码来定制。
它做什么
- 管理窗口布局:tiled(主次区域)、monocle(全屏最大化)、floating(自由移动缩放)。
- 用标签(tags)分组窗口,选中标签就显示对应窗口。
- 每个屏幕有状态栏,显示标签、布局、窗口数、焦点窗口标题等。
- 弹窗和固定尺寸窗口始终浮动。
- 只提供单个二进制文件,不带额外工具。
谁适合用
- 想自己改源码、不要配置文件的人。
- 追求小体积、快启动、少依赖的 X 用户。
- 愿意接受“改 C 代码即配置”这种工作方式的人。
和同类比
按官网自己的说法,dwm 比 suckless.org 上的其他工具更小更简单。与 ion、larswm、wmii 相比,dwm 没有 Lua 集成、没有 9P 支持、没有 shell 配置、没有远程控制,也不附带打印选择或鼠标变形等工具。
下一步
想用就直接从官网下载源码,按自己的需求改 config.h 后编译安装。如果你更希望用现成配置、不想碰源码,dwm 可能不适合你。
dwm 的平铺、单窗口和浮动布局分别适合什么使用场景?
dwm 的三种布局都可在使用中动态切换,核心区别在于“窗口如何分配屏幕空间”。
平铺(tiled):窗口分为主区域和堆叠区域,主区域放当前最需要关注的窗口,其余窗口排在堆叠区。适合需要同时盯着多个窗口、又要分清主次的工作,比如一边写代码一边看终端输出、一边查文档一边改文件。它让每个窗口都可见,但主区域之外的窗口会变小。
单窗口(monocle):所有窗口都最大化到屏幕大小,同一时刻只完整显示一个。适合专注做一件事,例如全屏阅读、看视频、演示,或屏幕较小、开多个窗口会挤的情况。需要切换时再切到别的窗口。
浮动(floating):窗口可自由移动和缩放。适合临时摆放、尺寸固定的窗口,例如对话框、弹窗、设置面板。dwm 里对话框始终以浮动方式管理,不受当前布局影响。
选择条件可以这样看:
| 你的情况 | 更合适的布局 |
|---|---|
| 要同时看多个窗口,且区分主次 | 平铺 |
| 只想专注一个窗口 | 单窗口 |
| 需要自由摆放或处理对话框 | 浮动 |
dwm 的布局是动态应用的,不必一开始就固定。实际使用时可以按任务随时切换,例如写代码用平铺,读文档切单窗口,遇到弹窗时它自动浮动。
dwm 如何通过标签管理窗口,并让多个显示器或屏幕各自独立工作?
dwm 用「标签(tags)」而不是「工作区(workspaces)」来组织窗口,并且每个屏幕(显示器)各自维护一套独立的标签选择状态。这是它多显示器体验的核心。
标签怎么管理窗口
- 每个窗口可以被打上一个或多个标签;选择某个标签时,所有带该标签的窗口一起显示。
- 标签是「过滤条件」而非「容器」:同一个窗口可以同时属于多个标签,因此能出现在多组视图里,不需要移动窗口到别的桌面。
- 每个屏幕底部有一条状态栏,显示可用标签、当前布局、可见窗口数量、聚焦窗口标题,以及从根窗口名属性读到的文本(屏幕聚焦时)。
- 状态栏用符号区分状态:选中标签用不同颜色;聚焦窗口的标签在左上角显示实心方块,被一个或多个窗口使用的标签显示空心方块;浮动窗口标题前是空心方块,最大化浮动窗口前是实心方块。
- 聚焦状态还通过窗口周围一圈可自定义的边框来表示。
- 布局(tiled / monocle / floating)可以动态切换,随时重新排列当前标签下的窗口;对话框和固定尺寸窗口始终浮动,不受布局影响。
多显示器各自独立工作
dwm 里每个屏幕都有自己的状态栏和自己的标签选择。也就是说,你可以在显示器 A 上显示标签 1、3,同时在显示器 B 上显示标签 2、5,互不干扰,窗口不需要在两个屏幕间搬来搬去。官网还专门有 multi monitor 与 multi pointer 的说明页,属于它明确支持的使用方式。
适合谁、什么时候用
- 适合键盘驱动、追求轻量的用户:dwm 是单个二进制文件,源码刻意保持小,没有 Lua 集成、没有 9P、没有 shell 配置、没有远程控制,也不附带额外工具。
- 适合多屏但不想维护多套工作区规则的人:标签天然可重叠,多屏只是各自选标签。
- 代价是通过直接编辑源码来定制——这让它极快且安全(除窗口标题外不处理编译期未知的输入数据),但改配置等于改 C 代码并重新编译。
与相近项目的侧重差异
官网在 Differences 里直接对比了 ion、larswm、wmii:dwm 比它们更小、更快、更简单,去掉了 Lua、9P、shell 配置、远程控制以及打印选择、鼠标 warp 之类的附加工具。另外 dwm 不区分浮动层和平铺层,当前标签下的客户端可随时重排。如果你需要脚本化配置或远程控制,这些正是 dwm 主动舍弃的部分;如果你要的就是极简与速度,这就是它的取向。
下一步可以看什么
先读官网的 tutorial 和 customisation 页面,再看 patches 与 multi monitor 说明,确认你想要的标签/多屏行为是否已有现成补丁,避免一上来就改源码。
dwm 没有配置文件,修改源码后如何编译和生效?
dwm 没有运行时配置文件,所有自定义都写进源码;改完必须重新编译,再用新二进制替换正在运行的那个。
编译与生效步骤
- 在源码目录(含
config.mk和config.h)执行make,得到新的可执行文件dwm。 - 用
make install覆盖安装到系统路径,或手动把新dwm复制到原路径。 - 重启 dwm 让新版本生效:退出当前会话重新登录,或用
Mod+Shift+Q退出后重新启动。 - 想保留当前会话,可先
Mod+Shift+Q,再在 tty 里startx或重新执行启动命令;dwm 本身不提供热重载。
为什么必须编译
dwm 官方说明它通过编辑源码来定制,因此“不处理任何在编译时未知的输入数据,除窗口标题外”。这也是它快且安全的原因:没有配置解析、没有解释器,改配置等于改程序。
常见坑
- 改的是
config.h(用户配置)还是config.mk(编译选项),别混。 - 打补丁(patches)后同样要重新
make;补丁冲突时先解决再编译。 - 多显示器、多指针等行为也在源码层面配置,改完同样重新编译。
相关资源
- 源码与文档:dwm
- 补丁集合:dwm patches(同站 patches 页面)
- 教程与 FAQ:同站 tutorial、faq 页面
下一步
先备份 config.h,再 make && make install,然后重启会话验证改动。若编译报错,优先检查补丁是否与当前版本匹配。
dwm 有哪些常用补丁,打补丁时需要注意什么?
dwm 本身刻意保持极简,常用功能大多靠补丁实现。官方页面把补丁单独列在 customisation/patches 下,源码也可在 download 处获取。
常用补丁类型
- 布局增强:如增加更多平铺/网格布局,或让现有布局更灵活。
- 状态栏与信息:在状态栏显示更多信息,或调整其显示方式。
- 窗口与标签操作:更细的窗口移动、标签切换、多显示器支持等。
- 多显示器与多指针:官方页面专门列出 multi monitor、multi pointer 分类,相关补丁集中在这里。
- 浮动与全屏行为:调整浮动窗口、全屏或对话框的处理方式。
打补丁时要注意
- 补丁要对应你的 dwm 版本。dwm 源码随版本变动,旧补丁直接打到新源码上常会冲突。
- 补丁之间可能互相冲突。多个补丁改同一段代码时,需要手动合并。
- dwm 靠改源码定制,没有配置文件。打完补丁要重新编译,出错时先看编译报错定位冲突位置。
- 建议在干净源码上逐个打补丁,每打一个就编译一次,方便确认是哪个补丁引入问题。
- 保留原始源码副本,方便回退。
下一步
先在 dwm 的 patches 页面找到与你版本匹配的补丁,再参考官方 tutorial 和 faq 了解编译与定制流程。
dwm 的状态栏如何显示自定义信息,比如内存、音量或日期?
dwm 自带的状态栏本身只显示标签、布局、窗口数和当前窗口标题等固定内容。要显示内存、音量或日期这类自定义信息,标准做法是让外部脚本周期性输出一行文本,再通过 X 根窗口名(root window name)把它传进去,dwm 会读取并显示在状态栏上。
具体来说:
- 写一个脚本(shell、Python 等均可),用
free、pamixer/amixer、date等命令采集内存、音量、日期,拼成一行字符串。 - 用
xsetroot -name "..."把这一行写入根窗口名。dwm 的状态栏会读取WM_NAME(根窗口 name 属性)并显示。 - 用循环加
sleep定时刷新,例如每秒或每几秒更新一次日期和内存,音量变化时立即更新。
例如需要显示日期和内存,脚本里可以这样组合:
while true; do
xsetroot -name "$(date '+%Y-%m-%d %H:%M') | MEM $(free -h | awk '/Mem/{print $3}')"
sleep 1
done
把这段放进 ~/.xinitrc 或 dwm 的启动脚本里,开机即生效。
关于 dwm 的设计取向,官网在 Differences 一节说明:dwm 是单个二进制文件,源码保持精简,通过直接编辑源码来定制;它不处理编译时未知的输入数据,除了窗口标题和根窗口名。这也解释了为什么自定义状态信息走“根窗口名”这条通道——它是 dwm 预留的、能在运行时注入文本的少数接口之一。
几点选择上的提示:
- 如果只想显示日期、内存、音量这类纯文本,上述根窗口名方案就够用,不需要额外补丁。
- 如果希望状态栏支持点击、颜色分区或更复杂的排版,通常要打状态栏相关补丁,或改用 dwm 社区补丁页里的方案,再配合 suckless 生态的
slstatus之类的独立状态程序。 - 刷新频率别设太高:日期每秒一次即可,内存和音量按需,避免无谓占用。
下一步动作:先确认你的 dwm 启动方式(startx 还是显示管理器),把采集脚本挂到启动流程里,再用 xsetroot -name 测试一次,确认状态栏能正确显示。
用户评价(0)