John Heidemann / Software / LavaPS

lavaps full size LavaPS is an interactive process-tracking program like ``top’’, but with a much different attitude. Rather than presenting lots of specific info in digital form, it tries to present certain important information in a graphical analog form. The idea is that you can run it in the background and get a rough idea of what’s happening to your system without devoting much concentration to the task.

Each blob represents a process. Blob size is porportional to memory usage. Movement is porportional to CPU usage. Color is a combination of program name (which decided the hue) and time since the program last ran (which decides saturation). Basically, things that haven’t run in a while are stationary and dark, while things that run a lot are bright and moving.

lavaps popup A popup box (shown to the right) can give more information about a process. Clicking the left button brings up the popup, the right button brings up a control menu.

LavaPS was inspired by Mark Weiser’s idea of calm computing. For details, see:

Mark Weiser and John Seely Brown. The Coming Age of Calm Technology, Revised version of Weiser & Brown. ``Designing Calm Technology’’, PowerGrid Journal, v 1.01, (July 1996). October, 1996. <<>>.

(This program dedicated to the memory of M.W.–I hope you would have thought it a good hack.)

Building LavaPS requires C++, STL, and either Tcl/Tk (8.x) or Gnome/Gtk (2.2 or later). LavaPS is necessarily system-specific. It currently runs under Linux, FreeBSD, Solaris, Irix, AIX, NetBSD, and MacOS X. Ports to other systems are encouraged.

For more details, see the man page or look in the code. LavaPS was also reviewed as app-of-the-week by Brett Neely of Linuxcare, featured at NooFace, and at sweetcode. I’m also told it was reviewed in the August 2001 issue of LinuxFormat (a UK magazine), but I haven’t seen the review (and don’t have a URL to it).

Download lavaps-2.7: source code (tar.gz), RedHat i386 package (i386.rpm), RedHat source package (src.rpm).

Other folks maintain other versions (now very, very old): a lavaps-1.15 PPC RPM for Linux.

Lavaps is in the Debian package system, with different versions in stable, testing, and unstable. Install it using

apt-get install lavaps

Lavaps is also a package in AltLinux.

(Download older releases: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 2.0, 2.1, 2.2, 2.4, 2.5, 2.6, 2.7)

As of 11-Jan-05, all RPMs are signed with my GPG key.

Known Bugs

Lavaps-2.6 has problems building in Tcl/Tk mode and with gcc-3.4. Problems fixed in lavaps-2.7.

Lavaps-2.5 and 2.4 (fixed in 2.6) give this warning on startup:

(lavaps:31794): GConf-CRITICAL **: file gconf-value.c: line 1592 (gconf_entry_get_value): assertion `entry != NULL' failed

This bug is just cosmetic. Work-around: ignore the warning. Fix: apply this patch:

---    2003/12/01 01:06:10     1.14
+++    2004/06/07 23:40:56     1.15
@@ -105,7 +105,7 @@
 gtk_blob_conf::from_entry_validated(GConfEntry *entry)
        // typechecking
-       if (gconf_entry_get_value(entry) == NULL) {
+       if (entry == NULL || gconf_entry_get_value(entry) == NULL) {
                // suppress lack of default silently

Lavaps-2.3 doesn’t build on gcc-3.3 (such as in SuSE Linux 8.2). Problem fixed in lavaps-2.4.

Lavaps-2.2 has an important installation bug–get lavaps-2.3.

Lavaps-1.20 doesn’t build cleanly under gcc-3.2. Fixed in 1.21.

Lavaps-1.17 doesn’t build under gcc-3.0. Fixed in 1.18.

Lavaps-1.15 doewsn’t build on RedHat 7.0. Fixed in 1.16.

I’m told that lavaps-1.15-1.1386.rpm has an error when trying to run in Linux-Mandrake 7.1 with Helixcode Gnome updates:

lavaps: error in loading shared libraries: lavaps: undefined symbol: _t24__default_alloc_template2b1i0.free_list

Work-around: recompile for that platform. (The RPM works fine under RedHat 6.2.)

Lavaps-1.14 has a serious bug: if no geometry is specified the window grows infinitely on startup. This bug is fixed in 1.15.

Two people reported that lavaps-1.13 needs this patch to compile on some system:

--- 2000/06/27 04:25:47 1.43
+++ 2000/07/18 04:30:44
@@ -258,7 +258,9 @@
    } else if (strcmp(key, "shaped_window_ok") == 0) {
        if (argc != 2)
            goto wrong_number_args;
-       Tcl_SetResult(interp, shaped_window_ok() ? "1" : "0", NULL);
+       // The cast on this next line is to work around a 
+       // compiler problem on an unknown platform.
+       Tcl_SetResult(interp, (char*)(shaped_window_ok() ? "1" : "0"), NULL);
    } else if (strcmp(key, "shape") == 0) {
        if (argc != 3)
            goto wrong_number_args;

to avoid this compile error: In function `static int tcl_blob::lava_menu_proc(void *, Tcl_Interp *, int, char **)': passing `const char *' as argument 2 of `Tcl_SetResult(Tcl_Interp *, char *, void (*)(char *))' discards qualifiers

Lavaps-1.10 produces a compiler warning on snprintf. This will be fixed in the next release; for now just ignore it.

Lavaps-1.8 and 1.9 leaks memory on Debian Linux (but not on RedHat or FreeBSD, see Debian bug #49828 for details). The problem appears to be in a library (see Debian bug #53343), not in lavaps, so I cannot fix it. The good news is that the Tcl/Tk debian port maintiner has found the problem and it should be fixed in the next Debian release (thanks Kirk!).

Lavaps requires at least gcc 2.8. FreeBSD users will need to upgrade gcc before building lavaps.

Copyright © 1995-2003 by John Heidemann