version 1.12, october 28/2002

this document is intended to aid an experienced linux user in setting up a wall similar to our GeoWall. it is not intended to be a step-by-step procedure which anyone can perform. i strongly recommend that you read through this entire document before you begin any installation.

The System:

the machine we used was an AMD Thunderbird 1.2GHz system with an Nvidia GeForce2 MX TwinView graphics board by ASUS. for initial testing and setup purposes we used a pair of standard 17" monitors. the final wall will run on a pair of InFocus LP350 projectors. we have used a variety of input devices including the intel wireless keyboard and mouse, microsoft trackball explorer, standard ps2 mouse and keyboard, and microsoft sidewinder dualstrike joystick. we were not successful in getting the intel wireless gamepad to work.

in order to align the two projectors we've developed an alignment test image. you can find it here (or via ftp) as a gzipped ppm file. download it and then do the following:

gunzip GeoWallAlignmentImage.ppm.gz
xv GeoWallAlignmentImage.ppm

this will bring up the alignment image covering both desktops. you will see two similar grid patterns. you can use this to verify that the two projectors are in focus and are zoomed the same. once you have the two images overlapping each other fairly closely you can then verify that the polarization of your filters is correct. while wearing the polarizing glasses you can close one eye and look at the test pattern. you should see only one of the two images and the word corresponding to the eye you are looking out of. for example, if you close your left eye you should see the test pattern and the word "Right" shown in the box near the center. similarly when you close your right eye you should see "Left" on the opposite side of this box. if you see the opposite word you can either rotate your polarizers until you see the correct word or simply swap the projector cables. you are now ready to start viewing things in stereo!

The Software:

Redhat Linux

NOTE: i've also successfully setup geowall systems running redhat 7.2

NOTE: i've received reports that it is possible to install on redhat 7.3 and redhat 8.0, HOWEVER, you MUST downgrade the compiler from gcc3 to gcc2.96 (which is distributed with 7.3 anyway, and you should be able to get for 8.0). the problem is that gcc3 is more strict than previous versions, and thus there are many programs that will compile quite happily with gcc2.96 but WILL NOT with gcc3 (most notably here, mesa does not build with gcc3). keep this in mind if you are setting up a geowall system. i havent had a chance to fully update this howto, but here are peters comments regarding his experiences with redhat7.3;

Date: Thu, 10 Oct 2002 15:17:15 -0400 (EDT)
From: Peter van Keken 
Subject: Re: [geowalltech] Geowall on a RH7.3 machine

here's the promised write-up on what I needed to change from
your software howto to get a RH7.3 geowall machine up and running.
Some things are fairly straightforward, others are just not pretty.

Pentium 2.0 GHz, 1.5 Gbyte DDRAM, 1 IDE drive for W2k/linuxI; IDE RAID
PNY Quadro4 750GXL.

Redhat 7.3 with (and without!) kernel mod for RAID driver.

Using Software HowTo from Russ Burdick (8/19/02).
All downloaded software packages are in /home/keken/Software.
Software installed under /usr/local
Data under /export/data/geowall

1) Mesa: Mesa-4.0.1
   Need to make sure you don't use icc and that CFLAGS are not set.
   Distribution seemed to install fine, but unresolved symbols occurred
   when using gcc3.1 (e.g., when running 'make check', ivview).
   Installation with 2.96 seems fine.
2) Inventor: ran into troubles with inventor-2.1.5-8.src.tar.gz because
   of unresolved symbols in man and applic (pthread notably). Mm.
   Installed the rpms (inventor-2.1.5-9), seems fine.
   ivview runs fine without the NVIDIA drivers
3) Installation of the latest 3123 Nvidia drivers seems problematic with
   ivview (crashed). Older 2960 seem fine
4) ivview won't run after driver installation because of unresolved symbol
   (pthread!) in /usr/lib/ Checked the Mesa Makefile in src-glu,
   remade and copied src-glu/.lib/libGLU* to /usr/lib. Seems fine now.
5) Performer: the coanim website steers you toward Performer 2.5.2 which
   won't work with the coanim distribution. Get the Performer2.3 tar files
   instead. I had a local version on the old geowall machine; we should
   put this on the geowall webserver.
6) Coanim direct from evl.uic source. Works ok with the caveat above.
7) CAVERNG2: new version CAVERNG2_1.2.2 compared to Russ's 1.2.1.
   Breaks on :
       newserver.cxx:23: declaration of `int *__errno_location ()' throws different exceptions
       /usr/local/CAVERNG2/include/CAVERNnet_socketbase_c.hxx:60: than previous declaration `int
       *__errno_location () throw ()'
       make[2]: *** [newserver.o] Error 1

   Then again, is this necessary?

8) Set CAVE=/usr/local/CAVERNG2_1.2.2 (ADD to howto!)
9) Install Xdialog from old rpm. The link in the howto gives you now a french
   language screen telling you to register. We should put this on the geowall
10) Install xv from old rpm (same).
11) Download first demos from the geowall server: 3Dgeology; all work fine.
12) Download immersaview for 7.2 (7.3 version WON'T work with gcc2.96!).
    The two included demos (heart,quakes) work fine.

One more thing I noticed is that there is a vertical offset of about 80
pixels or so between the left and right eye image in coanim. there may 
be a .caverc file, and there is also a $CAVE/etc/$HOSTNAME.config file.

Two changes are needed from the distribution:
1) Change
        WallDisplay screen1 :0.0 1024x768+1024+148
        WallDisplay screen1 :0.0 1024x768+1024+0
2) Change
        ProjectionData screen1 * wall -32.0 53.00 0.00 -32.0 101.00 0.00 32.0 53.00 0.00 in
        ProjectionData screen1 * wall -32.0 48.00 0.00 -32.0 96.00 0.00 32.0 48.00 0.00 in

the first order of business is to get linux installed on the machine. we installed Redhat 7.1 from isos downloaded from one of Redhat's ftp mirror sites. there's tons of info available online to help in doing this and if you're using the graphical installation (the default these days) it's pretty simple.


i dont remember specifically if i compiled mesa from source for redhat 7.1, but i've done a couple of installations more recently where this was necessary as Inventor refused to build with the stock Mesa distributed with redhat 7.1 or 7.2. note that it is necessary to download BOTH the MesaLib and MesaDemos files from the Mesa download page. once you've downloaded them (i've successfully built Mesa-4.0.1 a couple of times) you must do the following:

tar -zxvf MesaLib-4.0.1.tar.gz
tar -zxvf MesaDemos-4.0.1.tar.gz
cd Mesa-4.0.1
make install
cd widgets-mesa
./configure --with-motif
make install

be sure to do all of this, then build and install inventor before installing the nvidia drivers

Open Inventor

download the inventor-2.1.5-7.src.tar.gz file from sgi. my first couple attempts to build it failed as it couldnt find lesstif, so i had to do this to make it find the lesstif includes:

cd /usr/X11R6/include
ln -s ../LessTif/Motif1.2/include/Xm Xm

the following is pretty much straight from the README file. do the following to unpack and build inventor:

tar -zxvf inventor-2.1.5-7.src.tar.gz
cd inventor
setenv IVROOT /

if this returns an error that LD_LIBRARY_PATH is undefined then do this instead:

setenv LD_LIBRARY_PATH $IVROOT/usr/lib
setenv DISPLAY :0
gmake install

didnt do 'setenv LIBTYPE debug' as we dont need a debug version. from here it still wont build. follow the instructions in and change the source files it mentions. here's the contents of that message just in case the link becomes dead at some point.

* inventor/GNUmakefile: Change

LSUBDIRS = libimage tools libFL lib libSoXt doc data apps


LSUBDIRS = libimage tools
LSUBDIRS += lib libSoXt doc data apps

* inventor/apps/converters/ivdowngrade/SoLODV2.c++: Add

#include <values.h>

* inventor/lib/database/src/sb/SbTime.c++: Add

#include <time.h>

(I didn't understand why this one is necessary, because it's included by
 which is included by

* inventor/lib/database/src/so/actions/SoGLRenderAction.c++: Replace

#include <limits.h>


#include <values.h>

after doing all this inventor built without any trouble.

note: more recently i've downloaded the newer inventor-2.1.5-8.src.tar.gz file. this one didnt require any of the source editing listed above, however it _did_ require a current version of mesa (i used Mesa-4.0.1). both inventor and mesa _must_ be built before the nvidia drivers are installed

NVidia Linux Drivers

once the basic redhat install was complete we downloaded and installed the drivers for the graphics board from Nvidia's website. here is the link to their linux driver page. it'll give you lots of options as far as the download format. i have successfully used both the .rpm and the .tar.gz but prefer the .tar.gz as it'll need to be reinstalled whenevery you upgrade the kernel and it's pretty inconvenient to remove and reinstall the rpm each time and easier to just go into the nvidia kernel driver dir and 'make install'. i have successfully used drivers up to 1.0-2802 with both GeForce2 MX and GeForce2 MX400 cards. I had no luck initially in getting a GeForce4 Ti 4600 to work successfully with the wall software. a window manager and other simple stuff worked, but opengl stuff would to cause system lockups. more info can be found in my post to the geowall-tech list here. After these problems we returned the card and got a new one, and i'm quite happy to say every GeForce4 we've used since has been flawless. i wrote an updated post to geowall-tech that can be found here. I've also heard good things about nvidia's higher end cards, the quatro4 series. they're faster than the geforce4 and do alot of the other features in hardware. a bit pricey, but some folks think they're worth the extra money.

note: when compiling Mesa from source i've found that it's necessary to do this BEFORE you install the nvidia drivers. you need to build and install both Mesa and Inventor BEFORE installing the nvidia drivers (the GLX libraries dont work for building mesa/inventor, but dont seem to pose a problem at runtime)

another note: at least on redhat i've found GL libraries located in /usr/local/lib, and the NVIDIA GLD driver installation does NOT remove these files. if you experience VERY SLOW 3d then your application is probably loading the non-nvidia GL libraries. i made the following change to the Makefile that is distributed with the NVIDIA_GLX tarball:

        @echo -n "      "
        rm -f   ${ROOT}/usr/X11R6/lib/libGL.*
        @echo -n "      "
        rm -f   ${ROOT}/usr/X11R6/lib/libGLcore.*
        @echo -n "      "
        rm -f   ${ROOT}/usr/X11R6/lib/libGL.*
        @echo -n "      "
        rm -f   ${ROOT}/usr/X11R6/lib/libGLcore.*
        @echo -n "      "
        rm -f   ${ROOT}/usr/local/lib/libGL.*
        @echo -n "      "
        rm -f   ${ROOT}/usr/local/lib/libGLcore.*

this should get rid of the non-nvidia libraries. alternatively, you can just remove these files by hand rather than editing the Makefile.

XFree86 4.0.3 Configuration

note: i've also successfully used versions of XFree86 up to 4.2.0

after the nvidia kernel driver was installed we had to make some changes to the x server's configuration file. grab your favorite editor and take a look at /etc/X11/XF86Config-4 (if you're not using redhat this might be just XF86Config, but the -4 is standard for xfree86 4.0.x). you should follow the directions included in the README file with the nvidia glx driver to modify the x config file. i think it involves simply changing the driver from 'nv' to 'nvidia' and altering a few of the other includes. you will also want to take a look at the TWINVIEW_README file from the same dir to see how to enable the twinview option and setup the second monitor. this was all pretty much 'by the book'. here is what our config file looks like.


one of the most heavily used parts of the wall is coanim. this can be used without CAVElib so the purchase of CAVElib is not necessary unless you intend to develop new applications using it. the archive linked on this page also contains a copy of the CAVERNG2 distribution, so if you grab this you dont need either CAVELib or CAVERNG2.

once you grab it you'll want to untar the file via the following:

tar -zxvf COANIM.tar.gz
once you do the following you will see three subdirectories, namely CAVERNG2_1.2.2, modules_1.3.2, and AGAVE_README_files. you will also see two scripts to run a client or server. the modules_1.3.2 directory contains precompiled binaries for several things, including coanim. this file can be moved directly to your favorite place on your hard drive. i suggest moving it into /usr/local as this is where the CAVERNG2 libraries live. you will also want to be able to get to the coanim binary so you can do the following:
mv modules_1.3.2 /usr/local
cd /usr/local/bin
ln -s /usr/local/modules_1.3.2/coanim/coanim .
cd /root/AGAVE
this will make a link to the coanim program and install the necessary files. once you've done this you will also need to set the environmental variable COANIM_PATH to point to where you just put the coanim files, namely:
export COANIM_PATH=/usr/local/modules_1.3.2/coanim
you'll probably want to put that line in your /etc/profile so that it is always a part of your environment. you should now have coanim setup and functional. you can now move into the CAVERNG2_1.2.2 directory and follow the directions below for the installation of CAVERNG2.

although coanim does not require you to have CAVELib installed, it still requires the cave configuration files in order to function. you will need to copy this file and this file and then put them in the necessary location:

mkdir /usr/local/CAVE
mkdir /usr/local/CAVE/etc
cp cave.config /usr/local/CAVE/etc
cp tufte.config /usr/local/CAVE/etc/yourhostname.config
the first file is a generic configuration file for this setup, the second is the machine-specific configuration file. when coanim starts it will look for these files. if you try to start coanim and it only opens in a small window then it is probably not seeing these files correctly. try doing the following:
cd /usr/local/CAVE/etc
ln -s yourhostname.config yourhostname.yourdomain.config
on some installations it will think your host is only called the first part of your hostname (ie: tufte.config for the machine ''), on other machines it will look for the whole name (ie: for the same hostname). having both pointing to the same file should resolve any difficulties here.

one final thing which you may want to do to improve upon coanim is to copy this file into /usr/local/modules_1.3.2/coanim/COANIM_DATA/ to replace the existing wand.pfb file. this replaces the 'stick' that you'd often see on the bottom of the screen with a very tiny cube, so you wont even notice it.

CAVElib (now unneccessary - skip this part)

once we had the basic operating system and x windows setup functional it was time to start installing the fun stuff. the first thing to install was CAVElib and trackd. we got both of these downloaded to /root/ and then did the following:

cd /usr/local/
tar -zxvf /root/CAVELib.tar.gz
tar -zxvf /root/trackd.tar.gz

this will give you the /usr/local/CAVE/ and /usr/local/trackd/ directories. i then copied our machine-specific configuration into /usr/local/CAVE/etc/tufte.config. you can see this file here.

IRIS Performer

we were unable to get the IRIS Performer 2.4 rpms to work. when we obtained the performer-2.3 tar files from EVL these did work without any trouble. we did the following:

cd /
tar -zxvf /root/performer_eoe-2.3.1-10.tgz
tar -zxvf /root/performer_dev-2.3.1-10.tgz
tar -zxvf /root/performer_demos-2.3.1-10.tgz

once this was done performer worked fine.

CAVERNG2 (included in coanim download)

we setup CAVERNG2_1.2.1 by following the included README.UNIX.html file which was included in the tarball. the first thing you will need to do is untar the archive via the following:

tar -zxvf CAVERNG2.tar.gz
cd CAVERNG2_1.2.1

we did NOT do step 2 (Building the CAVERNsoft libraries) but skipped straight to step 3 (installation of CAVERNsoft G2 in the development directory). following the directions we then did:

export CAVERN_DISTRIB=/usr/local/CAVERNG2
make install

to build the demos we then did the following:

./compile_demos pthreads 32

one final necessary step to perform is to set the CAVERN_DISTRIB environmental variable for the machine. we did this by adding the following to the /etc/profile file:

export CAVERN_DISTRIB=/usr/local/CAVERNG2

collabslider (not really used anymore)

collabslider, (a stereo image pair viewer) was straightforward to setup and install. after downloading and unpacking the tarball we needed to change the CPPCOMPILER variable to point to g++ rather than CC. once the change was make a simple 'make' built the necessary files (collabslider and collabserver) which were then copied to /usr/local/bin/.


viewer, (a simple stereo image pair viewer and aligner that i've developed) is straightforward to setup and install. after downloading and unpacking the tarball simply typing 'make' will build the viewer which can then copied to /usr/local/bin/. there is also a current pre-release version of viewer which can be downloaded for testing. it incorporates new features such as zooming in via 'z', zooming out via 'x', and dragging the images with the mouse. this code should not be considered as complete or without error, so any information about problems or bugs would be appreciated.


3dem2iv (or via ftp) takes the wrl output from 3DEM and converts it into an inventor file, which can later be converted into a performer via the pfconv command (currently pfconv is not working on linux and we've only had success with using it on SGI machines). after downloading and unpacking the tarball simply typing 'make' will build the viewer which was then copied to /usr/local/bin/


on our machine we wanted a simple interface to access the demos on this machine as we can't expect all TA's to be linux gurus. rather then spend alot of time writing a complicated application to interface the different demos we decided that a shell script would be much easier. i stumbled upon the Xdialog package at and checked it out. simple shell scripting interface to almost any simple windows widget you could want. this seemed ideal for our needs so i downloaded the Xdialog-2.0.2-1.i386.rpm file and installed it via:

rpm -i Xdialog-2.0.2-1.i386.rpm

there are some samples on their webpage. i used a modified version of their menu example to make a simple interface to the demos available. an icon for this demo script was placed on the gnome taskbar to make it easy for them to find the demo script aswell.