为Linux创建窗口管理器

时间:2010-08-12 22:31:36

标签: c linux x11 window-managers window-management

我想创建一个简单的堆叠窗口管理器(在C中)供私人使用,主要用于学习和挑战自己。

我查看了twm的源代码,这些源代码的铃声和口哨相对较少,但由于它不是基于小工具工具包,所以它似乎非常低级。 {{3使用GTK +等工具包会更好吗?我担心twm中的一些代码和库可能过于陈旧(编辑:已弃用),我希望窗口管理器使用相对现代的库。为了便于理解,我也对如何从头开始一个窗口管理器的建议感兴趣 - 没有很多教程可以用于此目的。

更新:对于那些考虑类似项目的人:我最终使用了Common Lisp和1CLX library作为基础,辉煌的tinywm-lispCLFSWM是一个很好的帮助。作为参考,我在Freenode上使用了Stumpwm PDF警告)和#xlib

8 个答案:

答案 0 :(得分:21)

无论你做什么,使用XCB而不是Xlib。它“现代,异步,简单,让您直接访问X11协议。

答案 1 :(得分:6)

极简主义的WM是wm2。我没有阅读源代码,因此我不知道它是否是一个教学示例。当然,您可以使用已经完成大部分抽象和绘图工作的库,如gdkgtk。但由于这个项目只是为了个人学习,我会很努力地直接使用Xlib。

以下是一些可能对您有用的链接:

答案 2 :(得分:6)

查看dwm的代码。代码库很漂亮,易于理解。整件事大约有2000行。

答案 3 :(得分:4)

我编写了一个深入的教程系列,向您展示了如何用C ++编写X11窗口管理器:

此外,您可以在

查看一个简单的示例窗口管理器basic_wm

出于教学目的,它受到了很多评论。

在Xlib vs XCB上 - 如果你刚开始,我会推荐Xlib而不是XCB。 XCB效率更高,但它更低级,更冗长(想想GUI的汇编语言)。在你已经有一个原型工作之前,你不想让自己过早优化。

答案 4 :(得分:2)

http://code.google.com/p/partiwm/试图从头开始编写窗口管理器(平铺,而非堆叠),阅读代码可能对您有用。

答案 5 :(得分:2)

metacity对某些UI元素使用gtk。请参阅其HACKING和README。

另见Where are some good Xlib programming guides?

答案 6 :(得分:2)

  

为了便于理解,我也会对如何从头开始启动窗口管理器的建议感兴趣

您可能想看看aewm窗口管理器。代码很小,很好地完成了基础知识。它是用C语言编写的,并使用Xlib。

http://www.red-bean.com/decklin/aewm/

答案 7 :(得分:0)

Xmonad可能是一个很好的起点。