My light-weight window manager of choice is WindowMaker. It is simple, easy to modify, and stays out of the way. The default window manager installed with X11 on FreeBSD, however, is twm. I first experienced twm in the Virginia Tech Computer Science Dept. UNIX lab (all FreeBSD boxes), and tvm looks exactly the same today. I cannot pick on it too much, however. The guy in the office next door to me at work uses tvm on his Linux box. I suppose I ought to call it an Emacs box, since he does everything out of emacs. I digress…
Please read this excellent tutorial on xinit and .xinitrc files from the Fluxbox project first. The tutorial explains very clearly how the xinit program works and how .xinitrc files are processed. In short, however, once the end of .xinitrc is reached, X11 is shutdown. Thus you need a blocking command in xinitrc scripts that prevents the script from exiting. In the default xinitrc script, /usr/X11R6/lib/X11/xinit/xinitrc, I noticed towards the bottom of the script:
It was followed by three xterm commands. The first two were also run in the background, but the final xterm was not run in the background, thus preventing X11 from terminating until that terminal is closed by the user. No more twm on this box though! I removed the xterm commands, and changed the twm line to the following:
Now, WindowMaker is launched and until the user exits the WindowMaker session X11 will continue to run. All users on my FreeBSD will have WindowMaker when the execute startx. I also created a .xinitrc in my user account home directory as follows:
In reality, however, I have XDM to run as my “magic client” (see article linked above). Instead of managing a separate .xinitrc and .xsession file, I just symlinked the files together so that any changes are available in both files, in the cast that I ever disable XDM.
ln -s .xinitrc .xsession
After I log into the system via XDM, my .xsession file is executed and WindowMaker is launched.