窗口管理器
外观
来自 窗口管理器
它可以是桌面环境的一部分,也可以独立使用。
概述
窗口管理器是控制各种图形应用程序绘制的“窗口”外观和行为的 X 客户端。它们决定窗口的边框、标题栏、大小和调整大小的能力,并经常提供其他功能,例如用于固定Dockapps(如 Window Maker)的保留区域,或像 Fluxbox 那样将窗口进行标签化处理的能力。一些窗口管理器甚至会捆绑简单的实用程序,如用于启动程序或配置窗口管理器本身的菜单。
扩展窗口管理器提示规范用于允许窗口管理器与服务器和其他客户端以标准方式进行交互。
一些窗口管理器是作为更全面的桌面环境的一部分开发的,通常允许其他提供的应用程序更好地相互交互,为用户提供更一致的体验,包括桌面图标、字体、工具栏、壁纸或桌面小部件等功能。
其他窗口管理器则设计为独立使用,让用户完全自由地选择要使用的其他应用程序。这允许用户创建一个更轻量级、更定制化的环境,以满足他们自己的特定需求。如果需要,“额外”功能,如应用程序启动器、文件管理器、通知守护进程、任务栏、壁纸设置器或桌面小部件,则需要通过其他专用应用程序添加。
一些独立的窗口管理器也可以用来替换桌面环境的默认窗口管理器,就像一些面向桌面环境的窗口管理器也可以独立使用一样。
在安装窗口管理器之前,需要安装一个功能齐全的 X 服务器。有关详细信息,请参阅 Xorg。
类型
- 堆叠式(又称浮动式)窗口管理器提供传统桌面隐喻,这种隐喻在 Windows 和 macOS 等商业操作系统中很常见。窗口就像桌子上的纸张,可以堆叠在一起。有关可用的 Arch Wiki 页面,请参阅 Category:Stacking window managers。
- 平铺式窗口管理器将窗口“平铺”,使其不重叠。它们通常大量使用键盘绑定,并且对鼠标的依赖较少(或完全没有)。平铺式窗口管理器可以是手动的,提供预定义的布局,或者两者兼有。有关可用的 Arch Wiki 页面,请参阅 Category:Tiling window managers。
- 动态窗口管理器可以在平铺或浮动窗口布局之间动态切换。有关可用的 Arch Wiki 页面,请参阅 Category:Dynamic window managers。
请参阅 平铺式窗口管理器比较和 Wikipedia:Comparison of X window managers 以了解窗口管理器的比较。
窗口管理器列表
堆叠式窗口管理器
- 2bwm — 快速浮动窗口管理器,其特点是拥有 2 个边框,基于 XCB 库编写,并派生自 Michael Cardell 编写的 mcwm。在 2bwm 中,所有内容都可以通过键盘访问,但可以使用指针设备进行移动、调整大小和提升/降低。
- 9wm — 受到 Plan 9 的 rio 启发的 X11 窗口管理器。
- AfterStep — 最初基于 NeXTStep 界面的外观和感觉,它为最终用户提供了统一、简洁、优雅的桌面。AfterStep 开发的目标是提供桌面配置的灵活性,改善美学,并高效利用系统资源。
- berry — 用 C 语言编写的精巧窗口管理器。它通过命令行客户端进行控制,允许用户通过热键守护进程(如 sxhkd)控制窗口,或通过 shell 脚本扩展功能。它提供可扩展的主题选项,具有双边框、标题栏和窗口文本。Berry 将新窗口放置在未占用的空间中,并支持虚拟桌面。
- https://berrywm.org/ || berryAUR
- Blackbox — 适用于 X 的快速、轻量级窗口管理器,没有那些烦人的库依赖。Blackbox 使用 C++ 构建,包含完全原创的代码(尽管图形实现与 WindowMaker 类似)。
- Compiz — 基于 OpenGL 的合成管理器,使用 GLX_EXT_texture_from_pixmap 将重定向的顶层窗口绑定到纹理对象。它具有灵活的插件系统,并针对大多数图形硬件进行了优化。
- https://launchpad.net/compiz || compizAUR, compiz-coreAUR
- CTWM — Claude 的标签窗口管理器,基于 twm。它提供标题栏、异形窗口、虚拟屏幕(工作区)、多种图标管理形式、用户定义的宏函数、点击即输入和指针驱动的键盘焦点,以及用户指定的键和指针按钮绑定。
- cwm — 最初派生自 evilwm,后来从头重写,cwm 旨在简单易用,并提供搜索窗口等有用功能。
- eggwm — 一个轻量级的 QT4/QT5 窗口管理器。
- Enlightenment — Enlightenment 不仅仅是 Linux/X11 等系统的窗口管理器,它还是一套库,可以帮助您更轻松地创建精美的用户界面,而无需像以前那样费力且与传统工具包搏斗,更不用说传统的窗口管理器了。
- evilwm — 适用于 X Window 系统的极简窗口管理器。“极简”并不意味着它过于简陋而无法使用——它省略了许多使其他窗口管理器无法使用的东西。
- Fluxbox — 基于 Blackbox 0.61.1 代码的 X 窗口管理器。它资源占用少,易于操作,但又功能齐全,可提供轻松且极其快速的桌面体验。它使用 C++ 构建,并根据 MIT 许可证授权。
- Flwm — 尝试结合多个窗口管理器的最佳理念。主要影响和代码基础来自 Chris Cannam 的 wm2。
- FVWM — 适用于 X Window 系统的功能强大的 ICCCM 兼容多虚拟桌面窗口管理器。开发活跃,支持出色。
- https://www.fvwm.org/ || fvwm3AUR
- Goomwwm — 用 C 语言实现的 X11 窗口管理器,是一个干净的软件项目。它以最小化的浮动布局管理窗口,同时提供灵活的键盘驱动的窗口切换、大小调整、移动、标记和平铺控制。它还快速、轻量、无模式、支持 Xinerama,并在可能的情况下兼容 EWMH。
- IceWM — 适用于 X 的窗口管理器。IceWM 的目标是速度、简洁,并且不干扰用户。
- jbwm — 基于 evilwm,具有约 16kb 的极简配置大小,专注于小巧的二进制文件和可用性,包含可选的标题栏和 XFT 标题栏字体渲染作为编译时选项,jbwm 还具有比 evilwm 更易于使用的键盘绑定。
- JWM — 适用于 X 的窗口管理器。JWM 用 C 语言编写,并且最少只使用 Xlib。
- Karmen — Johan Veenhuizen 编写的 X 窗口管理器。它的设计宗旨是“即用”。除了 Xlib 之外,没有配置文件,也没有库依赖。输入焦点模型是点击聚焦。Karmen 致力于符合 ICCCM 和 EWMH 标准。
- KWin — 自 KDE 4.0 起的 KDE 标准窗口管理器,同时也是一个合成管理器。这使得 KWin 能够提供高级图形效果,类似于 Compiz,同时也提供从以前的 KDE 版本(如与 KDE 其他部分的极好集成、高级可配置性、焦点防抢占、经过充分测试的窗口管理器、对行为不端的应用程序/工具包的稳健处理等)的所有功能。也用作 Wayland 的合成器。
- lwm — 适用于 X 的窗口管理器,力求不打扰用户。没有图标、没有按钮栏、没有图标坞、没有根菜单、什么都没有:如果你想要所有这些,那么其他程序可以提供。也没有可配置性:如果你想要它,你就是想要一个不同的窗口管理器;一个帮助你的操作系统进行邪恶的磁盘空间征服和内存吞并的窗口管理器。
- Marco — MATE 窗口管理器,Metacity 的一个分支。
- Metacity — 这个窗口管理器力求安静、小巧、稳定,做好自己的工作,并且不引起用户过多关注。它被旧的 GNOME 2 和 GNOME flashback 会话使用,并被 Mutter 取代。
- MLVWM — Macintosh-Like Virtual Window Manager,FVWM 的一个后代,试图在其布局和窗口设计中模仿 Mac OS X 之前的 Macintosh 的外观和感觉。
- Muffin — Cinnamon 的窗口和合成管理器。Mutter 的一个分支,基于 Clutter,使用 OpenGL。它不能在 Cinnamon 之外使用。
- MWM — Motif 窗口管理器 (MWM) 是一个基于 Motif 工具包的 X 窗口管理器。
- Openbox — 高度可配置的窗口管理器,具有广泛的标准支持。*box 视觉风格以其极简外观而闻名。Openbox 使用 *box 视觉风格,同时为主题开发者提供了比以前的 *box 实现更多的选项。自 2010 年以来已“功能完善”,但仍在维护中。
- PekWM — 窗口管理器,曾经基于 aewm++ 窗口管理器,但它已经发展到完全不像 aewm++。它具有大大扩展的功能集,包括窗口分组(类似于 Ion、PWM 或 Fluxbox)、自动属性、Xinerama、支持按键链的按键捕获器,以及更多功能。
- Sawfish — 使用基于 Lisp 的脚本语言的可扩展窗口管理器。与大多数窗口管理器相比,它的策略非常简单。它的目标只是以最灵活、最具吸引力的方式管理窗口。所有高级窗口管理器功能都用 Lisp 实现,以便将来进行扩展或重新定义。
- sowm — 简单但有主见的窗口管理器,提供全屏切换、窗口居中和混合工作流(即鼠标和键盘)。
- TinyWM — 作为极简主义练习而创建的极小窗口管理器。它可能有助于学习创建窗口管理器的一些最基本知识。它由大约 50 行 C 代码组成。还有一个使用 python-xlib 的 Python 版本。
- twm — 适用于 X 的简单窗口管理器,自 1989 年以来一直是 Xorg 的默认/备用管理器。它提供标题栏、异形窗口、多种图标管理形式、用户定义的宏函数、点击即输入和指针驱动的键盘焦点,以及用户指定的键和指针按钮绑定。
- ukwm — 一个轻量级的 GTK+ 窗口管理器,是 UKUI 桌面环境的默认窗口管理器。Mutter 的一个分支,基于 Clutter,使用 OpenGL。
- UWM — UDE 的终极窗口管理器。
- WindowLab — 一个小型、简单的、设计新颖的窗口管理器。它具有点击聚焦但非聚焦即提升策略,一种允许一次操作更改窗口的一条或多条边的窗口调整大小机制,以及一个创新的菜单栏,该菜单栏与任务栏共享屏幕的同一部分。通过限制鼠标指针来防止窗口标题栏移出屏幕边缘,并在适当的时候,指针也被限制在任务栏/菜单栏上,以便更容易命中菜单项。
- Window Maker — X11 窗口管理器,最初设计用于为 GNUstep 桌面环境提供集成支持。它在所有方面都尽可能地复制了 NEXTSTEP 用户界面的优雅外观和感觉。它速度快,功能丰富,易于配置,易于使用。
- WM2 — 适用于 X 的窗口管理器。它提供了不寻常的窗口装饰风格,以及其作者认为舒适的最小功能。wm2 不可配置,除非通过编辑源代码并重新编译代码,它实际上是为那些不太希望他们的窗口管理器过于友好的用户设计的。
- worm — Worm 是一个动态的、基于标签的 X11 窗口管理器。它支持浮动布局和主堆叠平铺布局,并且是开放开发的。它也是用 Nim 编程语言编写的。
- Xfwm — Xfce 窗口管理器负责应用程序窗口在屏幕上的放置,提供精美的窗口装饰,管理工作区或虚拟桌面,并原生支持多屏幕模式。它提供自己的合成管理器(来自 X.Org Composite 扩展),用于实现真正的透明度和阴影。Xfce 窗口管理器还包括一个键盘快捷方式编辑器,用于用户自定义命令和基本窗口操作,并提供一个首选项对话框用于高级调整。
平铺式窗口管理器
- Bspwm — bspwm 是一个平铺式窗口管理器,它将窗口表示为满二叉树的叶子。它支持 EWMH 和多显示器,并通过消息进行配置和控制。
- EXWM — EXWM (Emacs X Window Manager) 是一个基于 XELB 的功能齐全的平铺式 X 窗口管理器,适用于 Emacs。它具有完全键盘驱动的操作、混合布局模式(平铺和堆叠)、动态工作区支持、ICCCM/EWMH 合规性、RandR(多显示器)支持和内置系统托盘。
- Herbstluftwm — 使用 Xlib 和 Glib 的手动平铺式 X11 窗口管理器。布局基于分割框架为子框架,这些子框架可以再次分割或填充窗口(类似于 i3/musca)。标签(或工作区或虚拟桌面等)可以在运行时添加/删除。每个标签包含自己的布局。每个监视器上只显示一个标签。标签与监视器无关(类似于 xmonad)。它在运行时通过 herbstclient 的 ipc 调用进行配置。因此,配置文件只是一个在启动时运行的脚本。(类似于 wmii/musca)。
- i3 — 平铺式窗口管理器,完全从头开始编写。i3 的创建是因为 wmii(当时开发者最喜欢的窗口管理器)没有提供一些我们想要的功能(例如,正确的多显示器支持),存在一些错误,长时间没有进展,而且代码根本不便于修改(源代码注释/文档完全缺失)。值得注意的区别在于多显示器支持和树状结构隐喻方面。为了速度,没有实现 wmii 的 Plan 9 接口。
- Larswm — 基于 9wm 的平铺式窗口管理器。
- LeftWM — 用 Rust 编写的平铺式窗口管理器。
- https://leftwm.org || leftwmAUR
- Notion — 适用于 X 窗口系统的平铺、标签式窗口管理器,它使用“平铺”和“标签式”窗口。
- 平铺:你将屏幕划分为不重叠的“平铺”。每个窗口占据一个平铺,并被最大化到该平铺。
- 标签:一个平铺可以包含多个窗口——它们将被“标签化”。
- 静态:大多数平铺式窗口管理器是“动态”的,这意味着它们会在窗口出现和消失时自动调整平铺的大小和位置。相比之下,Notion 不会自动更改平铺。
- Notion 是 Ion3 的一个分支。
- https://notionwm.net/ || notion
- Ratpoison — 简单的窗口管理器,没有复杂的库依赖,没有花哨的图形,没有窗口装饰,也没有依赖啮齿动物。它在很大程度上模仿了 GNU Screen,后者在虚拟终端市场取得了巨大成功。Ratpoison 使用简单的文本文件进行配置。Ratpoison 的信息栏有所不同,因为它只在需要时显示。它既是应用程序启动器,也是通知栏。Ratpoison 不包含系统托盘。
- Stumpwm — 完全用 Common Lisp 编写的键盘驱动的平铺式 X11 窗口管理器。Stumpwm 力求可定制但视觉上极简。它有各种挂钩可以附加你的个人自定义项,还有变量可以调整,并且可以在运行时重新配置和重新加载。没有窗口装饰,没有图标,没有按钮。它的信息栏可以设置为始终显示或仅在需要时显示。
- ZWM — 用 C 语言编写的极简平铺式窗口管理器,它使用 XCB api 与 Xorg 服务器进行通信。它支持多显示器,支持 EWMH 规范的子集,并提供广泛的可配置性。
动态窗口管理器
- awesome — 适用于 X 的高度可配置的新一代框架窗口管理器。它非常快速、可扩展,并根据 GNU GPLv2 许可授权。使用 Lua 配置,它内置了系统托盘、信息栏和启动器。有基于 Lua 编写的扩展。Awesome 使用 XCB 而非 Xlib,这可能导致速度提升。Awesome 还有其他功能,例如早期替代 notification-daemon 的功能,类似于 *box 窗口管理器的右键菜单,以及许多其他功能。
- dk — 一个基于列表的平铺式窗口管理器,与 dwm、bspwm 和 xmonad 同类。
- dwm — 适用于 X 的动态窗口管理器。它以平铺、单色和浮动布局管理窗口。所有布局都可以动态应用,优化应用程序和执行的任务环境。不包含系统托盘或自动启动器,尽管 dmenu 与其集成良好,因为它们来自同一作者。它没有文本配置文件。配置完全通过修改 C 源代码完成,并且每次更改都需要重新编译和重启。
- https://dwm.suckless.org/ || dwmAUR
- echinus — 适用于 X11 的简单轻量级平铺和浮动窗口管理器。最初是 dwm 的一个分支,配置更简单,echinus 成为了一个功能齐全的重父窗口管理器,支持 EWMH。它有一个兼容 EWMH 的面板/任务栏,称为 ouricoAUR。
- http://plhk.ru || echinusAUR
- FrankenWM — basically monsterwm with floating done right。基本 mwm 之上添加的功能包括:更多布局(斐波那契、均等堆叠、双堆叠)、间隙(和边框)可实时调整、最小化/最大化单个窗口、隐藏/显示所有窗口、单独调整主堆叠大小、反转堆叠。
- Qtile — 完全功能化、可黑客化的平铺式窗口管理器,用 Python 编写。Qtile 简单、小巧且可扩展。编写自己的布局、小部件和内置命令很容易。它完全用 Python 编写和配置,这意味着你可以利用该语言的全部力量和灵活性来满足你的需求。
- spectrwm — 适用于 X11 的小型动态平铺式窗口管理器,很大程度上受到 xmonad 和 dwm 的启发。它试图不碍事,以便宝贵的屏幕空间可以用于更重要的事情。它具有合理的默认设置,并通过文本文件进行配置。它是由黑客为黑客编写的,并力求小巧、紧凑和快速。它有一个内置的状态栏,由用户定义的脚本提供。
- Wingo — 功能齐全的真正混合窗口管理器,支持每个显示器的虚拟桌面,并且无论是浮动模式还是平铺模式都不是事后想法。这允许在一个虚拟桌面上使用平铺模式,而在另一个虚拟桌面上使用浮动模式。Wingo 可以用它自己的命令语言进行脚本编写,完全可定制主题,并支持用户定义的钩子。Wingo 用 Go 编写,没有运行时依赖项。
- xmonad — 动态平铺的 X11 窗口管理器,用 Haskell 编写和配置。在普通的窗口管理器中,您会花费一半的时间来排列和搜索窗口。Xmonad 通过自动化这些操作来简化工作。XMonad 是用 Haskell 配置的。对于所有配置更改,必须重新编译 xmonad,因此必须安装 Haskell 编译器(100MB 以上)。一个名为 xmonad-contrib 的大型库提供了许多附加功能。