First, some background for the non-technical among you. A window manager is a piece of software that controls the windows on your computer. It will do things like placement, drawing, keybinding, et cetera. If you're on Windows or Mac OS X, you have a window manager built-in to your operating system and cannot easily change it. However, if you're on a more traditional *nix (Linux, Solaris), you are free to select your window manager. In this post, I'll talk a little about what I use and why it's awesome.
Many people on Linux use what are known as desktop environments. These represent a combination of a window manager, a file manager, and some other essential tools. For example, the Gnome desktop environment includes the Nautilus file manager, the Gnome taskbar, either the Metacity or Compiz window managers. A Gnome desktop environment running Metacity might look like the following:
This is nice and familiar to Windows and Mac users, and fits the established "desktop metaphor". I used Gnome (with first Metacity, then briefly luminocity, then compiz, then beryl, then compiz-fusion) for many years as my primary desktop environment.
However, a bit over a year ago, my friend Brett introduced me to the wonderful world of tiling window managers. The idea behind a tiling window manager is very simple: windows never overlap. It seems that this is a giant step back; after all, overlapping windows were one of the big new features in Microsoft Windows 2.0. Well, call me a Luddite, then, because I haven't gone back to "normal" window managers since. Whenever I'm on my laptop (which uses Gnome because it's small screen and poor keyboard are ill-suited to a tiling window-manager) or a lab machine, I wonder how I ever got anything done. Below is a screenshot of what might be a typical display on my desktop:
On the left, you can see a large gvim window editing a LaTeX file. On the right, an evince window displays the compiled PDF. Below that, I have an rxvt-unicode terminal emulator open for miscellaneous tasks. Finally, on the right-hand edge of the screen, I have a copy of GKrellM open displaying my system stats and such. Don't worry -- a simple middle-click collapses that 80-pixel bother down to 5 pixels when I want to actually focus on my work.
The window manager here is called awesome. It's a fork of dwm, which is closely related to the original tiling window manager I used, wmii. Awesome has a lot of, well, awesome features. For one thing, most of the non-performance-centric parts are written in Lua, so it's a snap to configure, and easily extensible. It also has a lot of quite nice tiling modes, some of which aren't exactly tiling. For example, the following screen shot displays EasyTag and gmpc in the "magnifier" mode, which displays a foreground window and many tiled background windows:
- Tabbing support - tag some clients with
<Super>-yto tab them.
<Super>-Tabswitched between items in a tab group. Animated GIF demonstrating this
- Configurable presets for master/slave windows. Essentially, this means that I can say "I always want Pidgin to go in a particular place. Which is nice.
- Named tags. Awesome (like almost all non-Windows window managers)
uses virtual desktops ("tags") to provide many workspaces. Those
are the "term comm music web 5 6 7 8 9" that you see in the
upper-left-hand corner of my screenshots. I have cleverly renamed my
first few workspaces into something that reflects their usage. All 9
workspaces can still be accessed with
- Easy program launching with
There are lots of other neat things about awesome, but I figure this is about enough for one blog post. If you have any questions or suggestions, don't hesitate to leave a comment. Ciao!