Old-school UNIX nerdery

I've never owned a Windows machine, or a Mac. It's not that I'm particularly hardcore about open source, it's just that I got used to a command line back in the old VIC-20/DOS/DesqView days and never really got away from it. Our undergrad computer network was very convenient, but made up of about four flavours of UNIX, and in fact they had a load-distributing program at login that meant your initial login was not just to a random machine but to a random UNIX flavour. Somehow the IT folks made this work tolerably well. After a few years of that, when I finally got a home computer, I chose to run Linux on it.

Back in the day, running Linux meant you were pretty seriously nerdy. I compiled my own kernels, I bootstrapped GCC onto the SGIs at work, I used bash when forced to use an NT machine at a different workplace. I installed kernel patches, I wrote my own filesystems, I wrote Motif programs (shudder), I used GNUS to read newsgroups. If all these sound technical and unfamiliar, well, that's kind of the point. You had to be pretty seriously into the arcane to run Linux. But things have changed.

These days, installing Linux is as simple as sticking a Live USB stick in, confirming that it works with your machine, and hitting the "install" button. Using the result is even easier; almost everything Just Works, and the default applications are pretty much point-and-click exploration-friendly. Gone are the days when a beginner would spend ten minutes trying to figure out how to get out of vi, or have to write a regular expression to flip all their slashes in a LaTeX file (:%s/\\/\//g). They even put Linux on the first generation of netbooks because it was easier to provide a stripped-down system that way. And I had fallen in with this new simplicity. But I kind of missed the old “vi /etc/gerbil.conf” approach.

Fortunately, GNOME, Ubuntu, and KDE have convinced me to switch back to a rawer approach. I tried using the default Ubuntu interface, Unity, and it drove me crazy. Between GNOME's drive to remove all user-configurability — want applets, custom launchers, or panels anywhere but along the top? tough luck, the developers say, you shouldn't want those — and its questionable UI decisions — let's make it inconvenient to open more than one terminal at a time! — I just couldn't cope. So I tried KDE, and found it had some interesting UI ideas. “Activities” are a sort of generalization of workspaces that includes a set of programs that are started up or shut down as the activity is. Plus KDE offers the traditional zillion configuration options for everything. Unfortunately, on my year-old dual-core laptop, it became unbearably sluggish. This seems mostly to have been due to “nepomuk” and “akonadi” flogging my disk to build some kind of index; strangely, I could not find out how to actually search these databases. Anyway, too slow and painful. So I went looking for something else.

What I settled on was Xfce, with the window manager xmonad. Xfce looks and feels like a somewhat stripped-down GNOME 2; panel, graphical file browser, applets, menus, configurable. xmonad is more radical: it's a window manager written in less than 1200 lines of Haskell. While it supports floating windows and decorations, it's very oriented towards keyboard control and tiling windows. This is surprisingly freeing. The screen on this laptop isn't that small, but applications and web pages have responded to widening screens by introducing gling-glangs that waste horizontal space, basically to avoid putting too many words on a line of text. So I tend to need to run applications full-screen, unless I want a terminal window (or whatever) alongside. xmonad makes this really easy without having to drag things around manually. It feels more like screen or like a linux console.

I tried the real hard-core approach of using xmonad with xmobar, dmenu and trayer, also designed for a thoroughly keyboard-oriented interface. They worked surprisingly well, and it sure was nice to be able to choose which applications were started by simply adding them to .xsession. But since I often use this machine for watching movies or whatever, it's nice to be able to navigate using only the mouse as well as only the keyboard. So I went with Xfce, which gives me a more flexible panel.

In the process of setting all this up, I managed to identify the causes of several very annoying behaviours. It turns out that if you are running both xscreensaver and gnome-screensaver, media players only know to inhibit one of them, so they keep turning on while you're watching movies. It also turns out that the simple compositing manager xcompmgr is unable to use the monitor vertical sync, so you're stuck with video tearing if you use it. Also, while gnome-keyring-daemon allows you to enter your password just once to load in all your SSH keys and your GnuPG keys, many startup scripts also run ssh-agent afterwards, which defeats this. Also, xmodmap is in fact able to remap media keys that don't necessarily get any keysym at all (but not ones that generate sequences of familiar keys).

This is of course nerdy fun for me (feel free to roll your eyes). But I think that having such a diversity of user-interface tools is really valuable. I think, for example, that Enlightenment basically demonstrated that fancy customizable themes actually appealed to users, and that they are now an option on many mianstream desktops. The rather chaotic obscure-free-software-interfaces space serves to explore new user interface ideas, most of which are terrible but a few of which work and get adapted. Perhaps it can serve as the Xerox PARC for Apple to copy.


mvc said...

meh, i'm learning to live with unity 2D. many of the geeks i know who wish to spend entire weekends fiddling with their window manager use awesome, but i am no longer such a person.

Anne Archibald said...

xmonad is basically awesome with Haskell instead of Lua. Much more nerd cred.

Anonymous said...

Anne, is there any way you could publish your ~/xmonad/xmonad.hs? I am having trouble here getting xmonad to work with XFCE. Thanks!