平铺窗口管理器对比
本文公正地对比了最流行的平铺窗口管理器(相对于浮动窗口管理器)。
对比表格
下表列出了最流行的平铺窗口管理器及其显著特性,为读者提供快速概览。
窗口管理器 | 编写语言 | 配置方式 | 管理风格 | 系统托盘支持 | 运行时重载 | 信息栏 | 合成 | 默认布局 | 像素占用 | 外部控制 | 库 | 多 (n) 显示器行为 | ICCCM/EWMH 兼容性 | 维护状态 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Awesome | C | Lua | 动态 | 内置 | 是 | 内置,图像和文本 | 外部 | max, nh-stack (和 invert), nv-stack (和 invert), free | 可变边框,可选 h-tab 标题 | dbus (如果启用) | XCB | n-标签 (工作区)。默认启用 9 个。示例 | 是 | 活跃 |
bspwm | C | 任意 | 混合 | 无 | 是 | 可以将内部状态写入 FIFO | 外部 | v-split, h-split | 可变边框 | 通过 bspc |
XCB | 显示器持有桌面 | 是 | 活跃 |
dwm | C | C (重新编译) | 动态 | 可选补丁 | 可选 | 内置,从根窗口名称读取 | 外部 | v-stack, max | 通过 dwmfifo | Xlib | n 区域,9 个工作区固定到每个区域 | 否 | 活跃 | |
FrankenWM | C | C (重新编译) | 动态 | 无 | 否 | 否,将信息输出到 stdout,可以很容易地被外部监视器或面板(dzen2、conky 等)解析和显示 | 外部 | v-stack (和 invert), h-stack (和 invert), dual-v/h-stack, grid, fibonacci (vh-stack), rows, columns, max, free | 可变边框 | XCB | 否 | 活跃 | ||
herbstluftwm | C++ | 任意 | 手动 | 无 | 是 | 外部 | vertical, horizontal, grid, max, tabbed | 1 像素边框 | 命令通过 herbstclient |
Xlib | n 区域,9 个工作区在任何区域都可见 | 是 | 活跃 | |
i3 | C | 文本 | 手动 | i3bar | 是 (布局被保留) | 文本管道传输到 i3bar (可以使用 i3status /conky 等) |
外部 | tree, v-split, h-split, stacked, tabbed, max, 可以无限嵌套 | 无,1 像素或 2 像素,可选标题栏,可以隐藏边缘边框 | 命令通过 ipc (或使用 ipc 的 i3-msg) | XCB | n 区域 | 是 | 活跃 |
LeftWM | Rust | RON (用户设置) / 任意 (主题) | 动态 | 无 | 是 | 是,通过主题系统提供许多选项 | 外部 | v-stack, columns, rows | 基于主题可变 | 支持 _NET_ACTIVE_WINDOW 和向命名管道发送命令 |
Xlib | 工作区和显示器不绑定。一个显示器可以有多个工作区,或者一个工作区可以有多个显示器 | 是 | 活跃 |
Notion | C, Lua | Lua,兼容 Ion3 配置 | 手动 | trayion, stalonetray | 是 | 可配置 | ? | h-tab, max | 可配置的边框和标题栏/标签页 | EWMH,可以访问丰富内部 API 的任意 Lua 脚本 | Xlib | 每个显示器 n 个工作区。支持运行时更改拓扑 | 活跃 | |
qtile | Python | Python | 动态 | 是 | 是 | 是 | 外部 | tree, v-split, h-split, stacked, tabbed, max | 无边框,但可自定义 | 钩子,服务器模式 | XCB | 活跃 | ||
Ratpoison | C | 文本 | 手动 | 无 | 是 | 是 | 外部 | max | Xlib | 否 | 活跃 | |||
Snapwm | C | 可重载文本 | 动态 | 无 | 是 | 内置,从根窗口名称读取 | 外部 | nVertical, Fullscreen, nHorizontal, Grid, Center Stacking | 可变边框,无标题 | Xlib | 在显示器之间均匀分配桌面数量 | 活跃 | ||
Spectrwm | C | 文本 | 动态 | 无 | 是 | 内置,从用户脚本读取 | 否 | nv-stack, nh-stack, max | 1 像素边框,无标题 | XCB | n 区域,10 个工作区在任何区域都可见 | 否 | 活跃 | |
Stumpwm | Common Lisp | Common Lisp | 手动 | StumpTray | 是 | 是 | 外部 | max | SLIME 服务器 ("Swank") | CLX (Xlib 等效物) | 否 | 活跃 | ||
xmonad | Haskell | Haskell | 动态 | 无 | 是 | 否 | 是,使用 xmonad-contrib 和外部管理器 | nv-stack, nh-stack, max | 可变边框,无标题 | 通过 XMonad-Hooks-ServerMode | Xlib | n 区域,9 个工作区在任何区域都可见 | 是 / 通过 XMonad-Hooks-EwmhDesktops | 活跃 |
窗口管理器 | 编写语言 | 配置方式 | 管理风格 | 系统托盘支持 | 运行时重载 | 信息栏 | 合成 | 默认布局 | 像素占用 | 外部控制 | 库 | 多 (n) 显示器行为 | ICCCM/EWMH 兼容性 | 维护状态 |
提示: 外部控制也可以通过诸如 xdotool 等程序实现,这些程序可以模拟击键。
管理风格
动态管理强调自动管理窗口布局,以实现速度和简便性。手动管理强调手动调整布局和尺寸,可能实现更精确的控制,但代价是花费更多时间移动和调整窗口大小。
布局
许多常见的布局类型出现在几种平铺窗口管理器中,尽管术语略有不同。
- max:一个窗口全屏显示(带或不带状态栏、标题和边框)。别名:monocle (dwm, monsterwm)。
- h-stack:主区域在上半部分,其他窗口在下半部分水平堆叠。主区域可以调整大小。可以上下颠倒 (wmfs)。别名:bottom stack (dwm), bstack(monsterwm)。
- v-stack:主区域在左半部分,其他窗口在右半部分垂直堆叠。主区域可以调整大小。可以左右颠倒 (wmfs)。别名:tile (dwm, monsterwm)。
- nh-stack:h-stack 允许主区域中包含 >=1 个窗口。别名:nbstack (dwm)
- nv-stack:v-stack 允许主区域中包含 >=1 个窗口。别名:ntile (dwm)
- mirror-h:nh-stack,堆叠在主区域的上方和下方
- mirror-v:nv-stack,堆叠在主区域的左侧和右侧
- h-tab:一个窗口全屏显示,所有窗口标题水平显示(如浏览器标签页)
- v-tab:一个窗口全屏显示,所有窗口标题垂直显示。别名:stack (wmii)。
- h-split:快捷键绑定水平分割当前窗口,为另一个窗口创建空间
- v-split:快捷键绑定垂直分割当前窗口,为另一个窗口创建空间
- columns:手动布局风格,将窗口视为属于垂直列
- rows:手动布局风格,将窗口视为属于水平行
- grid:基于规则的 NxM 网格的窗口位置和大小。可以是自动的(如 wmfs、monsterwm)或手动的(如 Subtle)。
快捷键绑定
平铺窗口管理器通常设计为完全通过键盘或键盘和鼠标一起使用。这是为了速度(伸手和移动鼠标很慢)和易用性。合理的快捷键绑定对于使工作流程快速高效至关重要。一些默认设置比其他设置更好,但通常按键可以根据用户的需要重新绑定。
参见
- 平铺 Wayland 合成器列表
- 可扩展窗口管理器对比 比较了通过脚本“可扩展”的窗口管理器,如 xmonad 和 Sawfish。