为Linux创建窗口管理器

Ice*_*ack 24 c linux x11 window-managers window-management

我想创建一个简单的堆栈窗口管理器(in C)供私人使用,主要是为了学习和挑战自己.

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

更新:对于那些考虑类似项目的人:我最终使用了Common Lisp和CLX库.tinywm-lisp作为基础,辉煌的CLFSWMStumpwm是一个很好的帮助.作为参考,我使用了CLX - Common LISP X接口(PDF警告)和#xlibFreenode.

小智 21

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

  • 看到这是我问的原因之一!`quinmars`推荐我使用大多数窗口管理器似乎都使用的`Xlib`,我没有看到任何使用`XCB`(除了Awesome)的窗口管理器 - 是因为所有其他窗口管理器都是旧的或者是否有现在从头开始使用`XCB`的理由?`twm`中的`Xlib`代码在大约二十年之后仍然可以使用最新的版本og Xorg - 那时`XCB`代码仍然有效吗? (3认同)
  • 为了帮助其他可能有兴趣做同样事情的人,我推荐完全基于`XCB`的`mcwm`(http://hack.org/mc/hacks/mcwm/). (2认同)
  • @Baldur:这篇文章很老了,但我现在正在进入XCB.文档非常不完整,但API非常透明,并且密切映射了XLib概念,所以这不是一个真正的问题.我全心全意地建议你看看awesome的源代码(我通过awesome亲自学习xcb).它应该得名. (2认同)

qui*_*ars 6

一个非常简约的WM是wm2.我没有阅读源代码,因此我不知道它是否是一个教学示例.当然,您可以使用已经为gdkgtk做很多抽象和绘图工作的库.但由于这个项目仅用于个人学习,我会努力工作并直接使用Xlib.

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


Dav*_*ave 6

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


小智 5

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

此外,您可以在以下位置查看一个简单的示例窗口管理器basic_wm:

出于教学目的,对此进行了大量评论。

在Xlib vs XCB上-如果您是第一次使用XCB,建议您在XCB上使用Xlib。XCB效率更高,但它的底层更加底层,也更加冗长(请考虑一下GUI的汇编语言)。您不希望过早地优化自己,直到您已经拥有了原型为止。