开发者

Creating a window manager for Linux [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.

Want to improve this question? Update the question so it focuses on one problem only by editing this post.

Closed 1 year ago.

Improve this question

I want to create a simple stacking window manager (in C) for private use, mainly for the purpose of learning and challenging myself.

I've looked through twm's source code which has relatively few bells and whistles but it seems very low level since it's not based on a widget toolkit.1 Would using a toolkit such as GTK+ be preferable? I'm afraid that some of the code and libraries in twm might be too antiquated (edit: deprecated) and I want the window manager to use relatively modern libraries. For the sake of understanding I would also be interested in suggestions how to start a window manager from scratch — there aren't many tutorials for this purpose.

Update: For those thinking of similar projects: I ended up using Common Lisp and the CLX library. tinywm-lisp served as a basis and the brilliant CLFSWM and Stumpwm were a great help. For reference I used the CLX开发者_高级运维 — Common LISP X Interface (PDF warning) and #xlib on Freenode.


Whatever you do, use XCB and not Xlib. It' modern, asynchronous, simpler and gives you direct access to the X11 protocol.


I've written an in-depth tutorial series that shows you how to write an X11 window manager in C++:

  • http://seasonofcode.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i.html

In addition, you can check out a simple example window manager, basic_wm, at

  • https://github.com/jichu4n/basic_wm

It's heavily commented for pedagogical purposes.

On Xlib vs XCB - I would recommend Xlib over XCB if you're first starting out. XCB is more efficient, but it's much more low-level and much more verbose (think assembly language for the GUI). You don't want to burden yourself with premature optimization until you already have a prototype working.


A very minimalistic WM is wm2. I haven't read the source code and hence I don't know if it is a teaching example. Of course you can use libraries that already do much of the abstraction and drawing work for you like gdk and gtk. But since this project is only for personal learning, I'd go the hard way and use Xlib directly.

Here are some links that might be useful for you:

  • The Xlib Manual
  • Xlib Programming Manual (O'Reilly & Associates, Inc.)
  • Inter-Client Communication Conventions Manual
  • Extended Window Manager Hints


Have a look at the code for dwm. The codebase is beautiful and easy to understand. The entire thing is about 2000 lines.


http://code.google.com/p/partiwm/ is an attempt to write a window manager (tiling, not stacking) from scratch, it might be useful to you to read through the code.


metacity uses gtk for certain UI elements. See its HACKING and README.

see also Where are some good Xlib programming guides?


For the sake of understanding I would also be interested in suggestions how to start a window manager from scratch

You may want to have a look at the aewm window manager. The code is small and it does the basics quite well. It's written in C and uses Xlib.

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


Xmonad might be a good place to start.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜