Free to be, you and wmii

During a quest for things that might make using my spare laptop – an old 800MHz, 256MB thing running Ubuntu – a more zippy experience, I came across “wmii”. It’s a lightweight tiling window manager with a lot of auto-sizing and keyboard control features. I’m really liking it. This laptop has never felt so responsive.

Other similar tools include dwm, xmonad, Ion, and ratpoison. Of the lot I’ve only tried dwm, which was cool but a little too minimal (its customization method, by design, is edit-source-and-recompile). I’m looking forward to trying xmonad once a package makes it into the Ubuntu repositories.

I was using XFCE before this. It looks nice, and is slimmer than, say, Gnome or KDE, but not terribly different once you compare it to something like wmii. Those systems, like OS X and Windows and most of their predecessors right back to the Xerox Alto, still put a lot of burden on the user to manually position and size windows. Tiling window managers like wmii, on the other hand, know that you want to have windows be as big as possible without making it hard to get to important stuff.

wmii calls its screens or workspaces “tags”. In addition to the default numbered ones (which are quickest to type) you can create named ones. Multiple tags can be applied to a given window causing it to appear in multiple workspaces. Unused tags simply disappear from the list at the bottom of the screen.

The keyboard control is really great. It’s like an X version of GNU screen and a virtual desktop utility. Windows can be pushed from one tag to another via the keyboard, and if you have multiple windows open in a single workspace you can move windows left, right, up, and down – with all the other windows reshuffling themselves as needed. You can get a terminal open anywhere with a single keystroke. A utility called dmenu lets you find and launch applications by typing unique prefixes – like tab completion with instant feedback.

Certain applications that spawn lots of windows aren’t such a good fit for wmii. The Gimp comes to mind (though it works passably if you have it automatically relegated to its own tag/workspace when it launches, which is a one-line change to your wmii config). OpenOffice is passable. Everything else I use a lot works great. I love never having to use the mouse (er, trackpad) to move or resize windows.

In addition to all this, wmii has some interesting architecture under the hood, e.g. its filesystem-like API. The developers seem to be Plan 9 expats, or enthusiasts.

I encourage experimentally-minded souls to check it out. In some weird way I think that it represents the future.

Alex Kahn commented on Mon Jan 14 09:55:27 2008:

Hey Paul, Definitely give Ion a try as well. I used to run Ion on an old G3 iMac running Gentoo. You might find it’s Lua scriptability interesting. (Newer versions may not have Ubuntu packages.) Cheers, Alex

Will Farrington commented :

You should check out ruby-wmii, which replaces the default wmii config files with some Ruby magic to let you configure and extend wmii all in Ruby.

Paul commented :

ruby-wmii (and python-wmii and pywmii are definitely on my list of things to check out!

Paul commented :

And thanks for the note on Ion, Alex. I had some problem installing or configuring it, and where X11 is concerned I avoid messing with configs if at all possible, because it can turn into such endless and unrewarding yak-shaving. I do like Lua though…

scott commented :

XMonad is nice, but in my experience not fundamentally different than dwm ported to Haskell. That’s cool (a Haskell wm!), but doesn’t add much from an interface standpoint. It’s still edit-(haskell)-source-and-recompile. Ugh.

I used ratpoison for about two years before checking out wmii. It certainly fulfills its promise of subverting the rodent, but the other WMs that also manage layouts (tiling, etc.) have a distinct advantage. The big win that kept me with ratpoison was that it supports keychains, i.e. putting all commands behind C-`, C-Return, etc. like GNU screen, rather than taking up half the keyboard shortcuts. (Why, yes, I do use Emacs.)

I just started with wmii today, but the tag thing seems like a good idea. The most significant thing, though, is that I just ran across someone thinking about using [markov chains] to manage their tag switching. Say what you will about markov chains (and I think it’s a fantastic idea), the fact that the WM supports, no, encourages hacking it in your language of choice is a great sign. Instead of being extended in an embedded sublanguage (Lua, for Ion) or a config file, it can work with anything that can interact with a plaintext filesystem. It knows how to lever the real strengths of Unix. (FWIW: Mine will probably be in Python or OCaml.)

Christian Wyglendowski commented :

I’ve been using Ion3 for close to a year now and I can’t imagine going back to a non-tiled WM. Every other environment seems crippled in comparison.

I just keep a floating window workspace around for programs like the GIMP and xsane that like to have a bunch-o-windows.

wmii sounds interesting. I’m hesitant to switch to something else at this point since I’ve become quite comfortable with Ion. Maybe I’ll load it onto a secondary machine to check it out.

Thanks for the writeup.