Image of grog
Greg's desktop configuration
Greg's diary
Photo index
Greg's home page
Network link stats
Greg's other links
Copyright information
Screen shots of desktop
Greg's programs and hacks

I'm occasionally asked about my “desktop”. If by that you mean lots of eye candy, unintelligible pictures and wasted space, the answer is simple. I have none: I hate them. I can read, and I prefer to do so. As a result, though I've played with things like GNOME and KDE (listed in alphabetical order, in case you're wondering), I stick to fvwm2. On occasion I've been asked about my configuration, so here's the current configuration. The links to the the files are really the live configuration, so they may reflect things that I don't mention here.

Note that these are real, live, working files, not demonstration files. That doesn't make them better: in fact, it makes them worse. There's cruft in there which has been there, literally, for decades, and I haven't found a good reason to remove: “If it ain't broke, don't fix it”. I leave it to you to identify which parts comprise such cruft.

Follow the link for screen shots.


I start X via startx, a script that is normally called /usr/X11R6/bin/startx. It starts with the following text:

# This is just a sample implementation of a slightly less primitive
# interface than xinit.  It looks for user .xinitrc and .xserverrc
# files, then system xinitrc and xserverrc files, else lets xinit choose
# its default.  The system xinitrc should probably do things like check
# for .Xresources files and merge them in, startup up a window manager,
# and pop a clock and serveral xterms.
# Site administrators are STRONGLY urged to write nicer versions.
Without so much as a by-your-leave, the FreeBSD port adds the following patch to startx:
--- programs/xinit/startx.cpp.orig  Thu Mar  4 09:49:08 2004
+++ programs/xinit/startx.cpp   Sat May 29 16:26:20 2004
@@ -80,8 +80,12 @@

+listen_tcp="-nolisten tcp"
 while [ x"$1" != x ]; do
     case "$1" in
+    -listen_tcp)
+   listen_tcp=""
+   ;;
     XCOMM '' required to prevent cpp from treating "/*" as a C comment.
    if [ "$whoseargs" = "client" ]; then
@@ -172,7 +176,7 @@
This blocks TCP connections (including all communication with other systems). To get it to run correctly, I need to back out this patch. In practice, I just change the first added line to


startx starts xinit, which reads in a file called .xinitrc in my home directory. Here's a recent configuration; follow the link for the most recent one.

# $Id: .xinitrc,v 1.5 2005/07/31 06:20:00 grog Exp $
me=`hostname -s`
xhost +                                   I block X protocol via the firewall, so this is safe
kbdcontrol </dev/ttyv0 -r 250.46
xset m 4 2                                And this sets the mouse rate.
. ~/xe&                                   start the xearth background files
xrdb -load .Xdefaults-$me
xmodmap -e 'keysym Alt_L = Meta_L Meta_L' remap some keys.  This one is needed by Emacs
xmodmap -e 'keysym Home = Select Select'
xmodmap -e 'remove mod5 = Scroll_Lock'
Now start the window managers and keep them running
while :; do

  case $me in

    fvwm2 -s -display :0.0 -f .fvwm2rc-$me:0.0 ;;

    fvwm2 -s -display :0.0 -f .fvwm2rc-dereel:0.0 &
    fvwm2 -s -display :0.1 -f .fvwm2rc-dereel:0.1 &
    fvwm2 -s -display :0.2 -f .fvwm2rc-dereel:0.2 &
    fvwm2 -s -display :0.3 -f .fvwm2rc-dereel:0.3



The window manager fvwm2 reads in the file .fvwm2rc-dereel:0.0 for display 0:0 and .fvwm2rc-dereel:0.1 for display 0:1, etc. They're the same with the exception of the display specifications (which it might be possible to handle more cleverly). Each of them call in a file with specifications for running xterms. So .fvwm2rc-dereel:0.0 calls in .fvwm2-xterms-dereel:0.0, and .fvwm2rc-dereel:0.1 calls in .fvwm2-xterms-dereel:0.1. These are quite complicated files to generate, so I use an Emacs program called genxterms.el. There's also a Makefile to go with it.


I've already mentioned that I use x2x to join the screens together. There's not too much to say here; I (currently) run the setup from dereel. To get to eureka, I execute:
DISPLAY=dereel:0.1 x2x -east -to eureka:0 &

It appears to be important to ensure that the DISPLAY variable is set to the display from which the cursor should access the remote system.

Greg's home page Greg's diary Greg's photos Copyright

Valid XHTML 1.0!

$Id: desktop.php,v 1.9 2008/08/10 01:23:21 grog Exp $