Wednesday, November 26, 2008


I've used a lot of window managers and desktop environments over the years (Gnome, KDE, Window Maker, Blackbox, Fluxbox, Enlightenment, XFCE, etc...). The last few years, I've lost a lot of motivation to experiment and stuck with the OS default (Gnome/Metacity in my case). Recently though, I've been increasingly trying to avoid ever touching the mouse. This is partially due to wrist issues and partially just to try and be more efficient. The quest for a mouse free lifestyle lead me to find the aptly named Awesome Window Manager.

If you're like me and have used many window manager, you're probably groaning right now and saying, "what makes Awesome any different from my current window manager?" Well, quite a few things actually. For one, Awesome is a tiling window manager. This means that if you open three terminal windows on the same screen, the WM will neatly organize them on the screen in an intelligent fashion. If you don't like the tile layout, you can switch layouts with a keystroke. If you want a certain application to fall outside of the default tiled layout, you can set it to float, and it will behave like it would in any other window manager.

While tiling is nice, it's not the only thing that makes Awesome unique. Awesome also avoids the traditional concept of virtual desktops or workspaces in favor of a tagging mechanism. Tags allow you to assign applications to logical groups in which they will appear together. An application can be bound to any number of tags. Even better, tags allow you to assign rules to newly opened applications, so I can say, "Firefox will open on the `Firefox' tab in floating mode on my 2nd monitor". You can also assign a default layout and number of columns to a given tab for tiling. Last but not least, each monitor can have it's own tagset giving you the equivalent of an independent session per monitor.

This is all good and well, but what does it have to do with getting around with the keyboard? Well, quite a lot actually. Awesome allows you to setup keybindings to navigate between tabs, send applications to a given tab, switch between applications on a given tab, resize windows, rotate windows within the tileset, jump between monitors, etc. All this is done inside of your awesomerc file, and the syntax is very straightforward. In my custom configuration, I've setup Awesome to respect keybindings very similar to Vim, so I can jump between monitors and windows using a combination of my meta key (windows key), a modifier (alt), and H, J, K, and L. As a bonus, it also happens to be extremely fast with performance in the same class as fluxbox and it's cousins.

A final feature that I've come to absolutely love is it's widget support. There's a user configurable statusbar that by default contains your current tagset listing and a small layout diagram. The rest of the statusbar is essentially open for whatever you want to add. All an application has to do to update the statusbar is write to standard output, so I've constructed a series of shell scripts to show the current time, CPU usage, memory usage, active users, and active streams at Grooveshark. All of these are basically one-liners. Here's my clock for the sake of example:

while true
echo "0 widget_tell mystatusbar clock text " \
"`date +"%A %B %d, %Y %l:%M %p"`" | awesome-client
sleep 1

In case I missed anything, here's the laundry list of features from the Awesome website.

* Very stable, fast, small and simple;

* Only window manager using asynchronous XCB library instead of the old synchronous Xlib: make awesome faster than any other window manager;

* Very well documented source code and API;

* No mouse needed: everything can be performed with keyboard;

* Real multihead support (XRandR, Xinerama or Zaphod mode);

* Implement many Freedesktop standards: EWMH, XDG Base Directory, XEmbed, System Tray;

* Some real transparency support (using Composite extension and xcompmgr);

* Doesn't distinguish between layers: there is no floating or tiled layer;

* Whether or not the clients of currently selected tag(s) are in tiled layout, you can rearrange them on the fly. Popup and fixed-size windows are automatically floating.

* Layout handling: automatically manage your windows placement according to the chosen policy for each tag;

* Use tags instead of workspaces: allow to place clients on several tags, and display several tags at the same time;

* A lot of Lua extensions to add features: dynamic tagging, widget feeding, tabs, …;

* D-Bus support;

* And more.

And of course a screenshot is worth a thousand words.

awesome screenshot

And Finally, The AwesomeWM Website.

As requested, here's a copy of my awesomerc. Note that I'm using version 2.3.4.


kylichuku said...

Some time ago I've also moved from Gnome to Awesome, but haven't found enough flexibility. Check xmonad if you want some more control over your tiling manager

Anonymous said...

Thanks for this post on Awesome. I use it on my laptop which runs OpenBSD. What O.S. do you run it under?

Travis Whitton said...


I'll check out xmonad.


Ubuntu Linux currently, but I'm considering moving to Arch.

housetier said...

this somehow reminds me of ion3:

but ion3 seems to require lua

John said...

Very well written review! Thanks for sharing it.


Anonymous said...

You should post your awesomerc file!

Travis Whitton said...


L. S. Russell Blogger Beta said...

Don't bother with xmonad just upgrade to Awesome WM v 3.0. It is 100 times more configurable than xmonad as it uses Lua embedded to control the clients. You can script your shell dude!

chi said...

nice! i've been thinking about trying awesome so I won't have to use my annoying touchpad all the time when i'm using my laptop

Cheap Viagra said...

I always have had a lot of problems with this, I was a little bit disappointed because I didn't get good results but I've implemented some techniques if you want I can give you some recommendations.

maedox said...

I know this is a very old post, but can you please tell me the name of the font you use in the console/Mutt?
I've been looking all over for similar fonts but can't find any. Thanks.

Cialis said...

Great tutorial!