Hack 和 / - Windows 往昔的回忆
我是一个半条理的人。一方面,如果我的东西有固定的位置,我会非常仔细地确保每次使用后都放回原处。另一方面,如果某件东西没有固定的位置,它最终不可避免地会堆成一堆或放在杂物抽屉里。我了解到,如果我想保持条理,我必须给每件东西都安排一个归宿。
同样的规则适用于我的桌面环境。当我还使用 Windows 的时候,我没有太多选择——所有东西最终都堆积在同一个桌面上,要么最大化,要么是任意大小。但是,当我开始使用 Linux 后,我发现了这个有趣的多桌面模型。使用 Linux,我可以将窗口分配到特定的组,然后将每个组排列在特定的桌面上。这种高度组织性的主要缺点是,每次我打开一个窗口,我通常需要调整它的大小并将其移动到特定的桌面。这需要我做很多手动工作,不久之后我就发现某些窗口管理器支持窗口记忆功能。有了窗口记忆功能,我经常使用的每个窗口都可以被分配一个位置、大小和桌面。
我第一次接触窗口记忆功能是在 Enlightenment 窗口管理器上。它的窗口记忆功能非常易于使用和设置。你所要做的就是右键单击一个窗口,然后你可以勾选 Enlightenment 在下次你打开窗口时会记住的属性。除了在特定桌面上打开某些终端和 Web 浏览器窗口外,我还能够让窗口始终保持在最顶层或在所有桌面上都保持粘性。虽然这确实需要一些设置,但当我完成一次窗口排列后,我经常使用的所有东西都在我的桌面上有了自己的位置。
我使用 Enlightenment 相当长一段时间,即使我一直在关注这个名为 Fluxbox 的新窗口管理器,并将其视为潜在的替代品。然而,直到 Fluxbox 添加了窗口记忆功能,我才进行了切换。Fluxbox 的窗口记忆功能与 Enlightenment 的非常相似——右键单击标题栏并切换你想要记住的属性。与 Enlightenment 一样,这些属性是基于窗口标题分配的,因此如果你有两个标题相同的窗口(例如,xterm,没有额外的参数),它们都将采用相同的设置。
Enlightenment 和 Fluxbox 我都用了好几年,但我一直关注着那些酷孩子们都在使用的 GNOME 和 KDE 桌面。对我来说,窗口记忆功能是至关重要的要求,直到我切换到使用 Ubuntu,我才决定公平地尝试一下其中一个“标准”桌面环境。开箱即用时,Compiz 似乎没有任何窗口记忆功能,这在我看来是一个主要的缺点。然而,大约一年后,我仍然在使用 Compiz,我必须感谢我在 Compiz 高级设置中发现的先进窗口记忆功能,它让我留在这里。
默认情况下,至少在 Ubuntu 中,你可以调整的 Compiz 设置数量有限。然而,Compiz 提供了一个名为 CompizConfig 设置管理器(或 ccsm)的工具,它可以让你非常详细地控制 Compiz 的炫酷效果以及窗口管理器本身的大量重要设置。然而,ccsm 的主要缺点是选项太多了——如果你不确切知道自己在寻找什么,预计要花一些时间在不同的类别中挖掘。甚至窗口记忆设置也被分在两个不同的类别中。
Ubuntu 没有为我自动安装 ccsm,但我可以通过快速访问软件包管理器来安装它,并且它应该被打包在包含 Compiz 的其他发行版中。一旦安装完成,你可以输入ccsm在终端窗口中,或者点击“系统”→“管理”→“高级桌面效果设置”。正如我提到的,默认窗口可能有点令人生畏(图 1),它被分成一个狭窄的左侧窗格(显示类别)和一个较大的右侧窗格(显示你可以为该类别配置的所有特定设置)。
你需要配置 ccsm 中的窗口记忆功能的所有内容都可以在“窗口管理”类别中找到,一旦你点击左侧窗格中的该类别,你就可以深入查看一组更易于管理的选项(图 2)。出于某种原因,ccsm 将窗口记忆功能分为两组不同的选项:“窗口规则”和“放置窗口”。“窗口规则”选项允许你配置窗口属性,如粘性和几何形状,“放置窗口”选项允许你控制窗口放置的视口和位置。
一旦你点击“窗口规则”图标,你将看到 Compiz 可以记住的第一组窗口属性,分为“匹配”和“尺寸规则”选项卡。“匹配”(图 3)包含标准的窗口属性,例如“置顶”、“置底”、“粘性”和“全屏”,这些属性你可以手动设置在窗口上,以及许多你不能设置的选项,例如“不可移动”、“不可调整大小”、“不可最大化”和“无焦点”。要将这些属性之一分配给窗口,你需要在属性旁边的字段中添加某种标识符。
Compiz 可以根据许多不同的属性来匹配窗口,这些属性记录在 wiki.compiz-fusion.org/WindowMatching,例如窗口类型、角色、类、标题、xid 和状态——所有这些你都可以使用 xprop 命令行实用程序来了解。只需运行 xprop,然后点击你想要获取信息的特定窗口。即使有很多可能的属性可以匹配,可能最容易使用的属性是窗口标题。要找出窗口的标题,你可以查看其标题栏,或者,运行
xprop WM_NAME | cut -d\" -f2
然后点击你感兴趣的窗口。Compiz 不一定需要窗口的完整标题,只需要一些识别信息。例如,如果你想让 Mozilla Firefox 具有粘性,你可以添加title=Mozilla Firefox到“粘性”选项,或者你可以简单地添加title=Firefox.
你还可以向这些字段中的每一个添加多个窗口属性,并用 | 表示“或”,用 & 表示“与”。因此,如果我想让 xterm 和 aterm 都具有粘性,我将在“粘性”字段中添加以下内容
title=xterm | title=aterm
请注意,我使用“或”运算符。如果我使用“与”运算符,则只有标题中同时包含 xterm 和 aterm 的窗口才具有粘性。
你甚至可以使用基本的正则表达式来匹配窗口(因此 ^ 和 $ 分别匹配字符串的开头和结尾),以及更高级的嵌套表达式。所有这些更高级的选项都在上面提到的 Compiz Wiki 页面上有文档记录。
“窗口规则”窗口中的第二个选项卡标记为“尺寸规则”,它允许你强制窗口采用特定的几何形状(图 4)。配置非常简单明了。点击“新建”以添加新的尺寸规则,输入属性以匹配你的特定窗口(在图 4 中,我仅根据标题进行匹配),然后添加该窗口的宽度和高度(以像素为单位)。完成更改后,点击左侧窗格底部的“返回”按钮以返回到主 ccsm 屏幕。
CompizConfig 设置管理器在窗口几何形状和设置与实际窗口放置之间做出了逻辑区分。从主 ccsm 屏幕点击“放置窗口”,你将在右侧窗格中看到两个不同的选项(图 5):“具有固定位置的窗口”和“具有固定视口的窗口”。在“具有固定位置的窗口”中,你可以配置要用于特定窗口的精确 X 和 Y 坐标。对这些选项使用相同的窗口匹配语句(例如,title=)。我注意到,除非我将窗口精确地放置在左上角,否则这通常需要一些反复试验。
你还可以配置窗口仅在特定视口中显示。同样,你可以根据窗口属性进行匹配,然后指定要使用的 X 和 Y 视口位置。在我的情况下,我的桌面有五个视口宽,只有一个视口高,所以我的 Y 视口设置始终设置为 0,我可以为我的 X 视口在 0-4 之间选择。
现在我已经有了所有这些窗口管理选项,我该如何使用它们呢?嗯,我一直喜欢我的第一个桌面用于普通终端,所以我让我的默认终端始终以特定大小在那里打开。我还有一个专门用于 IRC 的不同终端。我希望它在所有桌面上都可用,所以我将其设置为粘性,并将其移动到桌面上的特定位置。我喜欢我的第二个桌面用于 Web 应用程序,例如 Firefox,所以我为该视口配置它们。我还喜欢隔离我专门用于工作的终端、浏览器和 IM 客户端,所以我让所有这些都在一个特殊的桌面上自动打开。
你可以考虑的其他选项可能包括将 GIMP 及其所有窗口移动到特殊桌面。我还会在后台运行许多脚本,这些脚本会执行诸如将我的电子邮件同步到本地目录之类的操作。这些脚本实际上会在后台打开它们自己的小型终端,因此我将它们移动到专门为它们创建的桌面,并将它们配置为不抢占焦点。我发现,一旦我厌倦了每次都定位窗口,我自然而然地最终会为窗口分配窗口记忆功能。从长远来看,它节省的时间弥补了初始配置的时间,而且它还使我免于总是通过作为默认用户桌面的杂物抽屉进行 Alt-tab 切换。最重要的是,它有助于保持这位 Linux 用户的条理——至少有一半的时间。
Kyle Rankin 是旧金山湾区的一位高级系统管理员,也是包括 O'Reilly Media 出版的 Knoppix Hacks 和 Ubuntu Hacks 在内的多本书籍的作者。他目前是 North Bay Linux 用户组的主席。