我的一个新家庭项目将是一个简单的窗口管理器,但在开始之前我需要知道一些事情:
- 哪种语言最好?
- 在哪里可以获得一些学习资源?
一个重要的决定是您将如何与 X 服务器通信。您可以使用Xlib绑定作为您选择的语言,也可以使用更高级别的XCB绑定。(如果你疯了,你可能会直接打开一个到 X 服务器的套接字。)
要了解窗口管理器的行为方式,有两个文档指定了约定和策略:EWMH和ICCCM 1。符合这些意味着您的窗口管理器将在 GNOME、KDE、XFCE 和任何其他出现的桌面环境中表现良好,尽管在您第一次尝试时简单地忽略它们肯定更容易。
窗口管理器不必是一个庞大而复杂的 C 语言——成功的窗口管理器是用 Lisp、Haskell 和 Python 等高级语言编写的,甚至一些 C 语言仍然很小且可读。用 Haskell 编写的XMonad在相当长的一段时间内都保持在 1000 行以下。StumpWM (Common Lisp) 和DWM (C) 都非常简约。您也许可以阅读他们的源代码以获得一些关于如何设计 WM 的灵感。
1以利亚纽伦写道:
不要去阅读那些东西。他们真的,真的很无聊。如果你这样做了,你最终可能会赶上你的睡眠,而不是在 Metacity 上进行黑客攻击。;-)
想一想,Metacity的文档有很多关于它如何与窗口交互以及它支持什么样的扩展属性的说法。
C中的tinywm可能有助于入门。
哪种语言最好?
哪个你最舒服。有许多不同语言的成功窗口管理器示例。Qtile和xmonad是很好的例子,分别用 Python 和 Haskell 编写。
在哪里可以获得一些学习资源?
我会去看一些现有的窗口管理器。它们有很多,因此至少其中一些必须具有可读的代码。这是Unix 窗口管理器的综合列表。
我知道这个话题有点老了,但我想知道同样的事情。这个名为i3的窗口管理器似乎也是一个值得学习的好工具。