Awesome KDE, Java composite hacks

I've been experimenting with the awesome tiling window manager as a replacement to KDE's kwin, and I've managed to hack together a recipe for getting them up an running. It's surprisingly simple, although the learing curve was a little steep.

This post documents what I've done to get things working nicely with the basic awesome config. No customisations here, see the awesome wiki for some ideas.

Rationale

After living in emacs for a few years I've come to appreciate it's LCARS style of window panels, so I started to investigate arranging windows at a more global level in my X desktop. I discovered tiling window managers and started researching them. I decided I want a light-weight, no-fuss tiling window manager for many reasons, not least being that overlapping windows become a mess, and the computer should really be taking care of arranging windows for me.  So I investigated several, narrowing down to xmonad, wmii and finally settling on awesome.

However I still like the general KDE environment with all it's facilities like Nepomuk, Plasma, the DCOP, knotify  integration, krunner, hooks to Firefox and the trash can and so on -- all tools I can't live without. So I don't want to give  up KDE altogether just to have a better window manager. What I really want to do is run the KDE environment, but use awesome instead of kwin to manage my windows. If I can keep the eye-candy of transparent windows then that'd be a bonus.

After a week-end of research and hacking, here are my results.

Installing awesome

This is a cinch on openSUSE, and probably also on most distro's.  In openSUSE I just used the Webpin module in YaST to find a package on the OBS and then installed that directly from the Webpin module, which added the repository and downloaded and installed the packages for me.

Once installed, this gives an additional Session type on the kdm login screen, which is neat for testing or using awesome by itself, but when you launch KDE it's still the same (as you would expect!)

Replacing the KDE window manager

After some searching on a few forums I found that KDE's window manager can be set by putting the following into a script in the per-user KDE environment directory (~/.kde4/env for KDE4)

KDEWM=/usr/bin/awesome

This has the advantage that it only affects you, not everyone on the system who runs KDE. Also it's easy to turn off and get the original kwin back if you want to. I may look into adding KDE+awesome as a session type and then having a separate section in my ~/.xinitrc in the future if I'll be swapping back more often. I don't anticipate it today though.

Fixing Java

There is a bug in Java 1.5 and 1.6 where it makes protocol assumptions that are not true in non-reparanting window managers (something along those lines anyway). It results in Java GUIs appearing as just a grey box in certain window managers like xgl, dwm, wmii, xmonad and awesome. Apparently this'll be fixed in Java 1.7. In the mean-time, to fix it for 1.5 and 1.6 you can install a utility called wmname (I used Webpin again) and then put this in a script to run at start-up (i.e. in ~/.kde4/Autostart)

#!/bin/sh
/usr/bin/wmname LG3D

The "LG3D" window manager name above is one of the strings that 1.5 and 1.6 JVMs look for and change their behavior if found. This value is the name of the LookingGlass3D window manager, by Sun. Appreciate the irony...

Composite effects (transparency and shadows)

I found this link on the ArchLinux wiki. It's very useful and describes how to enable composite effects by default in your Xorg, and includes a script to turn effects on and off (quite useful on my aging AthlonXP + Radeon, which can only just handle the effects, but works nice and snappy without them).

With all this done I have a nice stable and useful desktop which I can begin to tweak when I get a chance to play with the Lua language that Awesome is configured with. More toys to play with :)