Skip to main content

理想的窗口管理器

· 6 min read

从年后发现被魔改的 DWM 到现在已经有半年多了,Linux 也成为了我日常使用的主力,但是实际使用过程中还是有一些不太舒服的地方,管中窥豹,这也是当前大部分平铺式窗口管理器的痛点。

什么是 DWM

DWM 是一个轻量级的平铺式窗口管理器,源码只有两三千行,专为 X Window System 设计(然而 X 日渐式微,终归会被 wayland 取代),可以动态地全自动平铺窗口,即所有的窗口都不重叠。并拥有大量的快捷键,可以只通过键盘在不同的窗口、工作区(workspace)之间移动、缩放窗口、在屏幕内移动窗口、移动窗口到其他工作区等。

除了平铺,DWM 同样支持浮动窗口,可以将窗口从平铺中释放出来,恢复堆叠式的窗口管理。

为什么需要平铺式窗口管理

Windows 和 MacOS 都是基于堆叠的窗口管理,其操作逻辑简单,主要交互工具为鼠标,可以进行很细致的缩放和移动,但是堆叠的特性代表这窗口之间经常会相互遮挡,这阻碍了信息获取的流畅度,所以现在这类窗口管理器也都支持转换为平铺式的窗口,用于快速无遮挡地获取和对比信息。

堆叠式窗口的缺陷

总结一下其可能的缺陷(是否是缺陷还是要看具体的使用需求):

  1. 窗口之间相互遮挡,获取信息不便;
  2. 可能会需要频繁切换鼠标和键盘。

而平铺式窗口可以一定程度上解决这些问题,其有以下优点:

  1. 窗口管理器自动排布所有窗口,确保不会重叠;
  2. 设置工作区,用以缓解平铺窗口占用过大的问题,也更方便管理窗口;
  3. 完全支持键盘操作;
  4. 有序,更好看。

现今平铺式窗口管理的缺陷

大部分平铺式窗口管理器的默认行为都是铺满整个屏幕,并且不允许用户调整大小,一旦调整就会变为浮动窗口而独立出来;通常同时会设置一个主工作区域,即这个地方的窗口大小不变,新添加的窗口只会在其他地方排布,导致窗口较多时,一个窗口很大,其他窗口都很小。

这就引出来几个问题:

  1. 只需要一个窗口时,占满整个屏幕可能会分散注意力,尤其是现在屏幕尺寸越来越大的情况;
  2. 某些应用打开时不应该铺满整个屏幕;
  3. 每个窗口都应该有各自合适的大小。

目前也有一些窗口模式可以缓解这些问题,如网格排布。

理想中的窗口管理器

引入

窗口大小合适更重要,还是窗口位置合适更重要?

就个人而言,窗口大小合适是更重要的,因此窗口管理器应该能为不同的应用分配不同的窗口大小,而不是直接铺满屏幕;而窗口位置应该尽量靠近屏幕中心分布。

但是显然,预设的尺寸是不能满足所有情况的,因此需要支持在平铺模式下调整窗口大小,并且自动地进行排布,当然,自由地分配窗口位置也应该是一个需求。

总结一下,理想中的窗口管理器应该具有以下优点:

  1. 为不同的应用窗口分配合适的大小;
  2. 窗口集中在屏幕中央;
  3. 允许在平铺模式下自由地调整窗口大小;
  4. 自由选择窗口位置。

难点

  1. 窗口位置分配的策略;
  2. 窗口是否允许溢出屏幕;

痛点

实际上该方式在窗口较多、大小各不相同时还是很混乱,因此可能窗口管理器本就应该在少窗口的模式下使用,如四个。

2024-02-27 更新:最近发现了一款新的基于 wayland 的窗口管理器——niri,其主要特性是可以在横向溢出,并可以滚动,有机会可以尝试。

2024-05-25 更新:全面转向 Hyprland 快三个月了,总体来说会更好看一些,并且社区也在不断更新,有很多插件。bug 稍微有点多但都可以接受。