Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Building a Window Manager [closed]

One of my new home projects will be a simple Window Manager, but before start I need to know some things:

  • Which is the best language to do this?
  • Where to get some resources to learn?
like image 252
Nathan Campos Avatar asked Nov 28 '09 02:11

Nathan Campos


People also ask

Is tiling window manager worth it?

A tiling manager typically reduces your system to a console-based environment - which can be done still in this day and age - but removes the entire power of a graphical environment. It also removes the entire possibility of a stack of windows - which is a very useful metaphor.

How does a window manager work?

By using a window manager, the user gets a consistent behavior for all of the main windows on the screen. Generally, a window manager honors the size and position requests for each window and then allow users to explicitly move or resize the window, changing these parameters as they see fit.


5 Answers

One important decision is how you're going to talk to the X server. You can use the Xlib bindings for your language of choice, or you can use the higher-level XCB bindings. (If you're insane, you might open a socket to the X server directly.)

To know how a window manager ought to behave, there are two documents that specify the conventions and policies: EWMH and ICCCM1. Conforming to these means your window manager will behave nicely in GNOME, KDE, XFCE, and any other desktop environment that comes along, although simply ignoring them is certainly easier on your first try.

A window manager needn't be a huge, complicated ball of C — Successful window managers have been written in high-level languages like Lisp, Haskell, and Python, and even some in C have remained small and readable. XMonad, written in Haskell, stayed under 1000 lines for quite some time. StumpWM (Common Lisp) and DWM (C) are both quite minimalist. You might be able to read their source code to get some inspiration as to how to design a WM.


1 Elijah Newren wrote:

DO NOT GO AND READ THOSE THINGS. THEY ARE REALLY, REALLY BORING. If you do, you'll probably end up catching up on your sleep instead of hacking on Metacity. ;-)

Come to think of it, Metacity's documentation has a good bit to say about how it interacts with windows and what sort of extended properties it supports.

like image 100
Josh Lee Avatar answered Oct 16 '22 11:10

Josh Lee


the tinywm in C may be helpful for getting started.

like image 22
mtvee Avatar answered Oct 16 '22 10:10

mtvee


While another language and set of libraries are technically possible, I think the best language choice would be C, and the Xlib or XCB libraries. Most window managers for X use that, and there is already lots of momentum here and maturity for these particular libraries.

Some documents of interest:

  • Xlib manual - must read for low-level X programming.
  • ICCCM - conventions and interfaces for communication between X applications and the window manager.
  • XCB - a 21st century replacement for Xlib. This is a bit lower level, and makes fewer decisions for you than Xlib. From what I gather, the result is potentially better performance because of more potential for asynchronicity, but I should warn I've never worked with it.
like image 12
asveikau Avatar answered Oct 16 '22 11:10

asveikau


  • Which is the best language to do this?

    Whichever you are most comfortable with. There are lots of examples of successful window managers in many different languages out there. Qtile and xmonad are good examples, written in Python and Haskell respectively.

  • Where to get some resources to learn?

    I would go look at some of the existing window managers. There are lots of them, so at least some of them has to have readable code. Here is the Comprehensive List of Window Managers for Unix.

like image 8
Mikael Auno Avatar answered Oct 16 '22 09:10

Mikael Auno


I know this topic is a bit old, but I was wondering the same thing. This window manager called i3 seems like a good one to learn from too.

like image 6
Alex Ozer Avatar answered Oct 16 '22 11:10

Alex Ozer