Window Management

From Sfvlug


SFVLUG Window Management Project Introduction

This project is still at a very early stage so nothing is yet written in stone and your input is welcome no matter what your level of experience.

<disclaimer> Be warned, I am not by any means an expert in window managers, programming or much of anything for that matter, I am merely a dabbler. I'm doing my best to put together a good resource page. For me it is a learn as I go kind of thing and I can't promise anything. While I seem to be doing most of the early work on this page it is, after all, a group project and hosted on a public site that anyone can edit. If you decide to start playing around with window managers on a system with data that is important to you, don't do it, and if you must make sure any data you ever hope to see again is safely backed up first. Many, if not most, of these window manager projects are to be considered experimental and could easily take your arm off at the elbow or worse. If you think about using any information you have found here, don't! Do your own research first. </ disclaimer>

Even though I am doing most of the groundwork here in getting this started it is not my project, this is a SFVLUG project which means it can be your project too. You don't even need to be living in Southern California to participate, our membership consists of anyone interested in free open source software and wants to hang out with other like minded folks. You don't even need to write one single line of code to become involved, contributions can come in many other forms. If you do live in the Southern California area we hope to see you at one of our meetings. Check the SFVLUG website for up to date announcements for time and venue. --Miasma 02:53, 17 September 2010 (UTC)

Q: Why a project on window managers, aren't there already a whole lot of window managers already available?

A: While there are already many window managers already available we have found all of them lacking in one way or another. Finding the right window manager for your needs is a little like the story, Goldilocks and the Three Bears. Some are too big and some are too small. This project is an attempt to find the right balance between the two. The opening between the two extremes provides an opportunity for exploration in an interesting area where the ways that people do things meets the capabilities and limitations of the machine.

Caution: If you are going to try out some of the minimalist window managers be sure to read the
man page or other documentation before firing it up. Many of them don't include toolbars or menus and may
use unfamiliar key and/or mouse bindings. You may even want to try them out on a spare machine that you
can afford to have out of commission for a while. It helps to have a print out of the instructions when
faced with a blank screen and nothing to click on and no command line is sight.

Here are some initial guidelines currently under consideration:

The project is to be primarily written in Python 2.x but with future use of Python 3.x to be used in the future.

It is currently proposed to be based initially on the PyWM window manager.

It is to be positioned somewhere between the huge KDE and Gnome desktop environments and the extremely light weight window managers like wm2 or ratpoison.

It should be easy to use with input from both a keyboard and/or a mouse.

It should have easy and intuitive defaults that can be customized by the user without the need to reprogram any source code.

Resources - Existing Window Managers and Desktop Environments

Desktop Environments

More than just window managers these systems also provide tools and applications in a unified environment.

  • KDE 4.x Desktop Environment Currently both the most advanced and the most broken. A good experience with KDE 4 requires capable hardware to run on.
  • Gnome 2.x Desktop Environment Currently more stable but less features than KDE 4 but still demands a fair amount of horsepower for decent performance.
  • XFCE 4.x Desktop Environment The lightweight member of the big 3 desktop environments strives to provide compatibility to Gnome and KDE while sticking closely to the Unix philosophy of modularity and re-usability. A better choice for older and less capable hardware but still requires more power than light weight window managers.
  • LXDE a newcomer to desktop environments is lightweight and fast but is less mature and may not perform well on systems that have requirements outside the main stream, but this should improve with maturity. For old hardware this is probably worth a try before deciding on a feather weight window manager.

Existing Window Managers

Wikipedia's List of Window Managers

This is just a list of known window managers that may or may not be currently available. At some point soon I'd like for us to start sorting them into piles of those worth a look and those that aren't. Since this can be very subjective I don't want to include or exclude any of these based just on my impression. There are so many of them that it would be very difficult to make a thorough and fair evaluation of all of them, but this is not intended to be a review of window managers, it is to give us an indication of what features to incorporate into our own project.

Please fee free to jump in and help check, add to and otherwise cleanup the list and the links.

  • 2wm
  • 3dwm
  • 4Dwm
  • 5Dwm (derived from mwm, true SGI look and feel)
  • 9wm 9wm link (clone of the original windowing system of Plan 9 from Bell Labs|Plan 9)
  • aegis (window manager)
  • aewm aewm link
  • aewm++
  • AfterStep
  • ahwm
  • alloywm
  • alptwm
  • amaterus
  • amiwm amiwm link Amiga Workbench (AmigaOS)|workbench unix clone.
  • anarchy (window manager)|anarchy
  • antiwm
  • asclassic
  • awesome (window manager)|awesome
  • awm
  • badwm
  • Beryl (window manager)|Beryl
  • Blackbox (minimalist)
  • bluetile
  • blwm
  • clfswm
  • Compiz
  • CTWM
  • cwm cwm link
  • evilwm
  • Enlightenment (window manager)|Enlightenment
  • EvilPoison EvilPoison link (a fork of evilwm with Ratpoison-like keybindings)
  • Fluxbox (lightweight, based on Blackbox)
  • FVWM (a virtual window manager, derived from twm)
  • FVWM95
  • hackedbox hackedbox link
  • HaZe
  • IceWM
  • Ion (window manager)|Ion (a tiling tabbed window manager designed with keyboard users in mind)
  • JWM (Joe's Window Manager)
  • Kahakai
  • KWin (originally called KWM, default for KDE)
  • luminocity (window manager) (experimentation in compositing)
  • Lightweight window manager|LWM LWM link
  • Matchbox (window manager)|Matchbox Matchbox link
  • Metacity (the current default for the GNOME desktop environment)
  • GNOME Shell|Mutter (GNOME Shell)
  • MWM (Motif (widget toolkit)|Motif Window Manager), Motif Window Manager
  • olwm (and olvwm olwm link with virtual desktops, OPEN LOOK window managers)
  • Openbox (based on Blackbox, default for the LXDE desktop environment)
  • Orion A nested (tiled or floating) window manager written in Scheme and scsh Orion link
  • Oroborus
  • PekWM
  • PLWM
  • PWM (window manager)|PWM
  • Qvwm (Windows 95/98 look-alike) Qvwm link (list of forks)
  • Ratpoison
  • Sawfish (window manager)|Sawfish (a past default for GNOME, originally called Sawmill)
  • Scwm (the Scheme constraints window manager)
  • SithWM evilwm-based, virtual window manager:de:SithWM|(german page)
  • Stumpwm A tiling window manager written in Lisp
  • swm (the original virtual desktop implementation)
  • Toy'd (HomePage GoogleProject Toy'd link a portable window manager for MS-Windows & UNIX / Linux platforms)
  • TrsWM
  • twm (default for the X Window System since version X11R4)
  • UWM (computing)|uwm
  • vtwm
  • Waimea Waimea link
  • WindowLab
  • Window Maker
  • wm2
  • wmii
  • wmx
  • Xfwm4 (a window manager for the Xfce desktop environment)
  • Xmonad
  • XPde|XPwm (for XPde, Windows XP Look alike) - now defunct
  • xwm

Debian/Ubuntu WM Package List

This list was obtained by using apt-cache search and grep for window and manager. Some packages in this list are forks, variations or different versions of what are basically the same program. The comments are those returned from Apt. At some point we are probably going to want to combine the different lists into a spreadsheet and/or chart.

  • 9wm - emulation of the Plan 9 window manager 8-1/2
  • aewm - a minimalist window manager for X11
  • aewm++ - minimal window manager written in C++
  • afterstep - window manager with the NEXTSTEP look and feel
  • amiwm - The Amiga look alike window manager
  • awesome - highly configurable, next generation framework window manager for X
  • blackbox - Window manager for X
  • compiz - OpenGL window and compositing manager
  • ctwm - Claude's Tab window manager
  • dvtm - Tiling window management for the console
  • dwm - dynamic window manager
  • dwm-tools - dynamic window manager (tools)
  • e16 - the Enlightenment Window Manager DR16
  • evilwm - a minimalist window manager for X11
  • fluxbox - Highly configurable and low resource X11 Window manager
  • flwm - Fast Light Window Manager
  • fvwm - F(?) Virtual Window Manager
  • fvwm1 - Old version of the F(?) Virtual Window Manager
  • i3 - metapackage (i3 window manager, screen locker, menu, statusbar)
  • i3-wm - an improved dynamic tiling window manager
  • icewm - wonderful Win95-OS/2-Motif-like window manager
  • icewm-experimental - wonderful Win95-OS/2-Motif-like window manager
  • icewm-lite - wonderful Win95-OS/2-Motif-like window manager
  • ion3 - tiling tabbed window manager designed for keyboard users
  • jwm - Very small lightweight pure X11 window manager with tray and menus
  • kwin - the KDE 4 window manager (KWin)
  • larswm - Lars Window Manager with tiled windows
  • lwm - Lightweight Window Manager
  • matchbox-window-manager - window manager for resource-limited systems
  • maximus - A window management tool
  • metacity - lightweight GTK+ window manager
  • miwm - minimalist window manager with virtual workspaces
  • mutter - lightweight GTK+ window manager
  • olvwm - OpenLook virtual window manager
  • olwm - Open Look Window Manager
  • openbox - standards compliant, fast, light-weight, extensible window manager
  • oroborus - A lightweight themeable windowmanager for X
  • parti - Parti window manager
  • pekwm - Fast & Light Window Manager
  • python-plwm - Pointless Window Manager - Python libraries for creating Window Managers
  • ratpoison - keyboard-only window manager
  • sapphire - A minimal but configurable X11R6 window manager
  • sawfish - a window manager for X11
  • scrotwm - dynamic tiling window manager
  • stumpwm - a Common Lisp window manager
  • sugar-session-0.88 - Sugar graphical shell - window manager
  • sugar-tools-0.88 - Sugar graphical shell - window manager
  • tinywm - tiny window manager
  • twm - Tab window manager
  • uwm - The ultimate window manager for UDE
  • vtwm - Virtual Tab Window Manager
  • w9wm - enhanced window manager based on 9wm
  • wdm - WINGs Display Manager - an xdm replacement with a WindowMaker look
  • windowlab - small and simple Amiga-like window manager
  • windows-el - window manager for GNU Emacs
  • wm2 - small, unconfigurable window manager
  • wmaker - NeXTSTEP-like window manager for X
  • wmii - lightweight tabbed and tiled X11 window manager, version 3
  • wmii2 - lightweight tabbed and tiled X11 window manager, version 2
  • xfwm4 - window manager of the Xfce project
  • xmonad - A lightweight X11 window manager

wmlists Place for compiling lists of window manager capabilities for comparison

X and Other Resources

X Window System

The layer close to the metal upon which most window management is built.

  • XFree86 Project Established in 1992 to provide UNIX windowing for Intel X86 architecture, replaced for most distributions a few years back in favor of but still available.
  • Foundation Relatively inactive fork of XFree86 until split in XFree86 brought it new life. Currently used by most current GNU/Linux distributions.
  • In their own words, " is open source / open discussion software projects working on interoperability and shared technology for X Window System desktops."

They make particular note that these are specifications and *not* standards. A good place to go for info on EWMH (Extended Window Manager Hints) and ICCCM (Inter-Client Communication Conventions Manual) Software hosted on or related to Open to any on topic projects. Specifications page at freedesktop, it is the place to go to find info on EWMH (Extended Window Manager Hints) and ICCCM (Inter-Client Communication Conventions Manual) Software hosted on or related to Open to any on topic projects.

Right now these resources are in no particular order, but until I get around to categorizing them and putting them in a better order myself please feel free to do so yourself.

  • Ubuntu Forum a 4 year old Ubuntu forum thread with community discussion


The X server itself only specifies the mechanism for drawing windows and is not involved with implementation policy. To help create standards for implementation the ICCCM was created. The first version came out in 1989 and the second in 1994. It is considered to be very difficult to understand when it came out and as time went on some parts are no longer relevant. The EWMH was created in an attempt to clear up the difficulties with the ICCCM. If a window manager is compliant with EWMH it should also be compliant with the ICCCM. Both the ICCCM and EWMH operate on the level of widget toolkits and desktop environments are most application developers just assume that the widget toolkit will take care of those details for them.

ICCCM Compliant Window Managers

This list is also from Wikipedia on their Inter-Client Communication Conventions Manual article and may not be up to date or completely accurate.

  • aewm - basic implementation
  • alloywm - partial compliance
  • awesome
  • blackbox - Versions 0.65 to versions 0.70
  • dwm - can be configured for compliance
  • enlightenment (window manager)
  • evilwm - partial compliance
  • fvwm
  • icewm
  • kwin
  • metacity
  • musca
  • mutter
  • openbox
  • wmfs
  • xfwm
  • xmonad
EWMH Compliant Window Managers

This list is from Wikipedia's Extended Window Manager Hints article and may not be up to date or completely accurate.

  • aewm
  • awesome
  • Blackbox
  • edewm
  • Enlightenment e16
  • fwm (via a plugin)
  • fvwm (via a plugin)
  • interfacewm
  • kwin
  • matchbox
  • metacity
  • openbox
  • Sawfish (not completely)
  • wmii
  • xmonad (needs to be turned on in the config)

Python Stuff

By some standards Python would not be the first language of choice for writing a window manager but there is a good chance that our project will either be done in Python or done in a combination of lower level language like C and Python. The main reason is that many of our members are already at least somewhat proficient in Python. With no desire to get into a religious debate over the relative merits and failings of anyone's personal bias Python makes more sense to us for a group project. This section includes some additional information on existing Python libraries and some projects in pure Python or wrapped in Python.

  • PLWM is the Pointless Window Manager as well as a Python package containing classes capable of use in rolling your own Pythonic window manager. Absolutely worth a look. It is currently still available as a Debian package. The PLWM homepage at Sourceforge, has nothing much to see but there is a download for the source code and some long in the tooth documentation.
  • PyWM is another Python based window manager, also getting long in the tooth but still alive. It is based on FLWM which was in turn based on wm2 which were extremely light weight window managers written in C++ with an aversion to customization.
  • Parti is a tabbing, tiling window manager written in Python using GTK+. You should be careful if searching for it that Google doesn't change it to "party" so it helps to enclose it in quotes.
  • Xpra written in Python allows for viewing remote X applications on their local machine, unlike VNC the applications are "rootless" and appear as individual windows inside your window manager and not contained in a single window. The project is hosted at
  • python-docky is an enhanced application launcher, manager and dock for the Gnome desktop.


GUI toolkits such as GTK+, Qt, FLTK, wxWindows and other less known toolkits are also very important in how desktop applications are displayed. They provide fonts, icons and widgets. When using a minimalistic window manager without an associated desktop environment the user may need to make adjustments for applications using different GUI toolkits. This can be essential to functionality and not just style when using screen resolutions that are significantly smaller or greater than common standards.

At least for now I'm going to stick to covering mostly just GTK+ and Qt4 since at this point in time they are the most popular and there are some fairly good tools to help configure them. GTK+ is the toolkit used with Gnome and Xfce while Qt4 is used with KDE4. For a long time it was not always easy to use applications designed for one environment on another. However, these days Gnome, XFCE and KDE desktop environments include tools for dealing with applications designed for another.


Most desktop application will let the user to configure fonts and other settings for the main window and any dialogs. If there are problems with settings it usually involves the widgets and fonts of the application's window and decorations. The most important setting when dealing with GUI applications from different toolkits would be setting font size for the window itself and its menus. A good test to see if this is a potential problem is in whether or not you needed to adjust the font size of your original desktop settings. If the standard default size for one desktop was OK chances are good that it will also be OK using applications developed with other toolkits.

For now I'm going to follow up on GTK+ and Qt since they are the most popular. These are GUI tools that can be used for configuring font size and widget settings:


With this configuration tool you can set how any application using the Qt toolkit is displayed. Currently available with the qt3-qtconfig and qt4-qtconfig packages.

GTK+ 2.0 theme manager

Is available for setting GTK+ 2.X fonts and themes in the gtk-chtheme package.

In addition to configuring the GUI toolkit's settings it is also possible to make some adjustments with some of the X server's config files and tools.

Design Considerations

Target Audience

One of the first things we need to discuss when it comes to creating our own window manager or desktop environment is to create a list of design goals, what are the specific and general itches that we want to scratch. One thing I've noticed myself in trying out and testing the various ways to manage a work environment is that most designs are either geared toward solving a limited domain of problems, often creating a development platform by developers and for other developers. These tend to be minimalistic window managers with an eye towards either C or C++ development. Another approach is to try to be all things to all people in one huge, bloated, monolithic structure. These are less focused on system level development and more towards a wider range of user application development but also tend to favor developers.

Modular Design

I have seen very little in the way of modular design that gives the user fine grained control of their work environment. The environment is either minimalistic and limited or fully featured and bloated, only suited for high horsepower hardware. I'd personally like to see something that is more in line with the *nix philosophy of small tools that can pipe data from and to other small tools. For this to work properly there needs to be adherence to standards that may not even be well understood and/or adequately defined. For example session management (Basically what specific applications and data should be opened at login or for specific tasks) should be easily separated from window management to the point that if the user doesn't need session management it shouldn't be forced on the user and everything else not specifically requiring session management should still work just fine. If the user later discovers a need for session management it should be possible to easily install a pluggable session manager.

Alternative Metaphors

I'd like to be able to find other ways of dealing with traditional windows. There already exist some interesting mechanisms for manipulating windows that are little known to most users. As an example, while I was using Fluxbox on a daily basis I noticed that to resize a window using the left click drag method there are only two handles that can be grabbed and moved with a left click and they are on the lower left and right corners of the window's border. It became a bother especially when enlarging a window who's bottom edge was near the bottom edge of the screen. Using the left click you need to first reposition the window by dragging the titlebar to the top of the screen to get the lower edge of the window enough screen real estate to drag it down, and if it still needed more adjustment you may need to repeat that maneuver until you get it right. I did that for a few days until I discovered an alternative way to resize a window with an <ALT> right click and drag from anywhere within the window proper. After returning to using KDE I discovered using the <ALT> key in KDE worked the same; you just hold down the <ALT> key and click within the window and the corner closest to the cursor position will move to resize the window. If I hadn't been pushed to find another method of resizing a window I may never have discovered the <ALT> <right click> <drag> method. I'm sure there are a whole bunch of similar undocumented and under-documented methods of interaction with windows.

Screen real estate is very valuable even on a system with multiple monitors. I completely understand the allure of tiling window managers, but for me, at least, the deal breaker is the loss of goodies normally kept visible in a panel. I'd like to develop new ways of taking advantage of screen real estate while still having quick access to ancillary data and tasks. One thing I really loved about Fluxbox that could potentially help out a lot is the use of shortcut keys. KDE4 does some cool things with 3D compositing, as does Compiz, that are beneficial to work flow that go beyond mere eye candy. I don't know how difficult it would be to include compositing but perhaps we could find easier alternatives to accomplish similar ends. I particularly like the ability to zoom in and out. That feature has sort of been possible for a long time with virtual desktops being larger than the screen but zooming in and out was too slow and distracting.

The new KDE4 desktop had/has some promising new features that were designed to address the real estate problem but unfortunately they were confusing, buggy and some were even broken to the point of being unusable. With 4.5 they fixed a lot of the problems by removing a lot of the features. At least that brought back stability and reminded us of the lesson of Icarus, don't over extend your capabilities by trying to do too much too fast.

Personal tools