# Linux Gazette September, 1995

## A Publication of the Linux HomeBoy WebPage Series

#### "The Linux Gazette...making Linux just a little more fun...!"

##### Copyright (c) 1995 John M. Fisk fiskjm@ctrvax.vanderbilt.edu
The LINUX GAZETTE is now a member of the LINUX DOCUMENTATION PROJECT.
For information regarding copying and distribution of this material see the COPYING document.
Linux Home Boy Pages logo created using David Koblas' excellent program XPAINT 2.1.1

### Welcome to the September edition of the Linux Gazette !

Well, as you may have noticed, I've done a little bit of sprucing up around here. In the interest of good net_person_ship I dropped the big .gif's in favor of more modest sized icons. It really wads my shorts to do a bit of surfin' and try loading up some graphics-bloated techno-wannabee webpage only to discover after 5 minutes of loading up 170KB of graphics that there's ABSOLUTELY NOTHING of substance there... just some self-congratulatory pointer to the next bloated nothin'-burger vapor-page!

Arghhh...

And so, in the interests of more substance I did a bit of drawing using Dave Koblas' excellent graphics program XPaint 2.1.1 and sketched out a more ecologically sound .gif image. Man, I felt kinda good about it... made me want to go out and do something green like hug a whale or chain myself to a tree somewhere :-)

(and no offense to the Mother-Earth-News-y kind of folks who do that stuff...)

Anyway, if you grew fond of the previous logo... sorry man, it's GHANDI! Also, I wanted to write up a Quick-FAQ to answer a couple questions:

### Linux Gazette Quick-FAQ

Are you planning to make an archived (tar-gzipped) version of the Gazette available via anonymous FTP?
  Not at the present. I've been getting a fairly steady stream of mail about the Gazette and only about 1 in 10 actually asked about this. I really can't ask the kind folks at Tennessee CommNet to set up anonymous FTP given the few responses I've gotten.

  BUT!! don't fret! I've included a section on how to use your trustly ol' browser to do this for you...

Are you planning to continue to make each of these issues available?
  Yup! The Gazette has turned into a huge amount of fun and I'm planning to make every effort to continue to make it available in its entirety.

How often are you planning to post new editions?
  Well... about as often as I can :-)

  I just started school once again and so, depending upon the semester and the coursework, I'm trying to get them out about once a month.

So... how do I know when a new edition comes out?
  In August, I posted a notice to the comp.os.linux.setup newsgroup. I think a number of you ran across this and found your way here. I'll continue to post announcements about this in one of the newsgroups.

If I write something, will you put it in the Gazette?
  Hey! is the Pope catholic!?

  You bet! If anyone has any ideas, suggestions, or tips I'd be happy to include them. A number of you have already written with suggestions and I've tried to include them where appropriate.

  So, what would be helpful? Anything!

  If you've run across something you think is pretty cool -- a great web site, an awesome piece of software, a groovy (hmmm... I thought groovy died out in 1969...) UNIX trick (and you couldn't convince Dave Letterman to let you air it on latenight TV...) -- drop me a note!

  Which leads me to a final point...

So what's the big idea behind the Linux Gazette?
  The whole idea is pretty simple...

  Make LINUX just a bit more fun...

  I've been running Linux now for about a year or so and it's been a HUGE amount of fun. But it took a bit of reading and digging to start understanding what it was all about. Pretty soon, I made this profound discovery:

  KNOWLEDGE = FUN

  Pretty simple, eh?

  And so, that's what this is all about. Trying to share ideas and discoveries so that you can start making LINUX do all those great things that you've wanted it to do. Which is why I really appreciate all the notes and ideas.

### So what's in store for this issue?

Well, as promised in the last issue, this one's got a lot of ideas for fixin' up and tinkering with X Window and, specificially, FVWM which is one cool hombre of a window manager and the one that is generally installed with Slackware, for all of us Slackware fans.

I've also thrown in a new section called Quick Tips which are, just as the name implies...

Finally, since there were a few of you that DID ask about getting a copy of the Linux Gazette, either in HTML or ASCII format, I've included a section on how to do this for yourself...

sort of along the lines of "give a man a fish -- feed him for a day, teach a man to fish..."

Anyway, it's pretty easy to do and very helpful if you come across something you want to have a hardcopy of.

And so... Enjoy!

## Table of Contents

### Topics in this issue include:

- Salutations and the MailBag
- Saving WWWeb documents for posterity!
- Some great 2¢ Tips...
- Introducing FVWM!
- FVWM: Getting stuff going...
- FVWM: Adding programs to the Popup Menus
- FVWM: Managing the Virtual Desktop
- FVWM: Quick Tips!
- Product Testimonial: XFMail for Sendmail-less mail!
- Colophon

## Salutations and the MailBag

Well, once again, I really want to thank the number of people who've dropped me a note. I've tried hard to answer as many of these as I could personally. I wanted to share a couple of these.

Justin Gaither wrote:

John,
Just found you. Looks great. I plan to be an avid reader.
two questions:
Do you plan to continue free access? or will it go the way of Linux Journal?
Where is the Sept issue?
Thanks again,
Justin Gaither

#### [Ed. Appreciate the compliment and the answers are yes, no, and right here! The Linux Gazette is strictly a personal project and meant to provide information to the Linux community as a whole. This is admittedly geared towards the newbie/novice home Linux user on a PC, but the information should be valid for all and will continue to be made available to all.]

This very practical piece of advice came from Stephen Brown:

Great stuff. I was running Linux for several months (and will be again shortly), and I always wondered about that stupid motd thing. I was considering calling an exorcist, but deleted Linux instead (that was not the reason...honest (g).

Anyway, here's a suggestion. Put your most recent issue at the top of the main page. For example, list your issues like this:
September 1995
August 1995
July 1995

This makes it more intuitive I think. Just an idea. Keep up the good work though. I'll definitely be coming back.

-- Stephen
-- sbrown@unf6.cis.unf.edu

#### [Ed. This is definitely one of those " why didn't I think of that " suggestions ;-). Thanks for pointing out the truly obvious. It's now fixed!]

For all you gaming advocates out there, Mark <enry@pebkac.tech-link.com> wrote:

I read your 'Linux toys' section and noted a lack of games. One suggestion I have is for a game called abuse. It's a platform-type game (unlike DOOM), but the graphics, sound, and speed are quite impressive. Available in both X and SVGALIB formats, it can be found at sunsite or its mirrors at: /pub/Linux/games/video/linux-abuse.0.3.2.tar.gz (BTW, it's a 2MB file - and portions of the game are written in Lisp)

Enjoy and keep up the good work!

#### [Ed. Mark is very right... I started working on the Linux ToyBox over this past summer and tried to find ftp'able links to a lot of what I had found to be really nice software. Since I hadn't had much time for anything more than an occasional game of Tetris, the games section is pretty sparce. I am VERY much indebted to those of you, like Mark, that write to call my attention to some useful and well-written piece of software. I haven't had the time this month to update the other Home Boy pages... this will have to wait for a little bit but should be done before too long. Again, THANKS!]

I'd like to reiterate that I truly appreciate folks taking the time to write a note, especially those with ideas and suggestions. I've found that there's a LOT of really great ideas written up in the various comp.os.linux newsgroups and that new software for the Linux, and other flavors of PC UN*X, system comes out almost daily.

I've tried to make the Gazette one more means of disseminating this information to the Linux Community. Feelin' kinda patriotic about it...? Go ahead! drop a note and add your ideas and suggestions... then go celebrate and burn a couple Windows disks! You'll feel much better about yourself ;-)

Anyway, enjoy!

## Saving WWWeb documents for posterity!

[Caveat! This is NOT meant to insult anyone's intelligence! Honest. I've simply included it this month since I can't offer a downloadable version of the Linux Gazette and there have been a few folks who wanted to know how they could get a copy of it to set up on their machines at home. Since there's generally little harm in stating the obvious, I'll proceed...]

Well, as promised, here's a short section on how to save a hardcopy of all those cool and nifty web sites you've recently been visiting. You know... like the 'ol Linux Gazette :-)

This is too easy and once you know how, you can fill up your HD with all kinds of great stuff that you've scavenged from the 'Net. You see, the two most popular browsers around -- Mosaic, and all of its children, and Netscape both easily save HTML documents to disk in one of three formats:

- source (i.e., as HTML)
- postscript format which, BTW, includes the graphics
- and plain text with the HTML tags removed

This makes saving stuff very easy to do. You simply load up the document that you're interested in... say... the current edition of the Linux Gazette, and then you click on the FILE menu, which then offers to let you do a save as.... That's the baby you'll want.

Now, you'll be given the choice of formats in which to save the document. If you want to browse it later on using a Web browser, save it as source. If you've got LOTS of harddrive real estate and a PostScript printer (what are YOU doing with a PostScript printer!) or have ghostscript up and running and your printer has enough memory to print at a decent resolution (remember, to print at 300 dpi you'll need at least 1.5MB of printer memory if you're planning to use use ghostscript) then save the document as postscript. And finally, if you want a plain 'ol text version that you can look at or print up later on, simply save the file as text.

Pretty easy, eh?

Well, that's not all yet!

If you're using Netscape you have another small, but too-way-cool trick up your sleeve. You can also save the images as well! To do this, just click on an image using the RIGHT mouse button. A pop-up menu appears and down at the bottom of the menu you'll see the choice:

    	Save this image as...

Bingo! That's what you'll want. If you use the default name, it will be the same as the one in the HTML source.

Ah ha! you say...

Yup, you got it... you can save the document as a source file and then save the images to disk and voila!... instant full text and inline image laden document browsable in the comfort of your own home even when you're not connected.

Cool, eh?

So, want to practice? OK, go ahead and save this file and then go through and save all those itsy-bitsy .GIF images and you'll have your own copy. I'll tell you, too, that I've set up the files so that the source HTML documents are in one directory (fiskhtml) and the images and miscellaneous stuff each are in their own directories at the same level:

Like this:

- parent directory
  - fiskhtml -- put *.html files here
  - gx -- put *.gif and *.jpg files here
  - misc -- put miscellaneous stuff here

So, if you want to set up a repository of Gazette files, simply make three directories -- fiskhtml, gx, and misc -- and then put *.html in the fiskhtml (or whatever you want to call it) directory, *.GIF's in the gx directory, and all the rest of the stuff in the misc directory. That way, all the images will load up without your having to edit the source file.

That should help the majority of you! Now, for the few of you using Lynx I'm afraid I'm not going to be much help. I do have Lynx on my system and I've used it a bit. I can't say that I'm enamoured with it. It will save documents to disk, but so far, I've not had much success getting it to work reliably for me. I installed a precompiled binary with the config files. The documentation was a bit scant and so I haven't used it much.

So... if there are any Lynx users out there, drop me a note and let me know how things are going!

## Some great 2¢ Tips!

Well, as the name implies, this is a selection of quick tips which are fast and easy try out.

As usual, most of this stuff has been culled from a variety of sources: newsgroups, books, FAQ's, HOWTO's, LDP stuff, manpages (yes Virginia, there really is useful stuff in those manpages...) and README's. Wanna make LINUX fun...?

READ!

Got any ideas or suggestions? Pass 'em along...

### Quick virtual terminal (vt) change!

Hey, you know that LINUX 1.2.x will give you up to 63 virtual terminals and that you can ALT-Fn to them easily. (you know... ALT-F1 to the first, ALT-F2 to the second...) But did you know that you can also do this from the keyboard?

Yup, if you've installed the kbd package (which is included with the basic Slackware distribution) not only can you map out your keyboard to whatever you choose, but you can also use the little prog chvt that'll let you switch from vt to vt.

Just type in: `chvt 3` to change to the 3rd virtual terminal, `chvt 4` to change to the 4th virtual terminal, and so forth. Easy. AND, if you are a single-letter-command type of person, you can just alias it to: alias j='chvt' and then type in `j 3` to jump to the third vt.

Nifty, eh?

### Cleaning the screen at logout

You know how after you've been using several vt's for a while and want to exit out that typing in logout still leaves you with a bit of a screen mess.

Kinda unsightly...

Well, there was a newsgroup thread a while back that bantered about the question of how to clean up after this so that you started with a nice fresh display after logging out. Several ideas were offered but the one that seemed the easiest was simply to add the following to /etc/profile:

    	alias exit='clear && logout'

Pretty simple, eh? All it does is invoke two commands whenever you decide to logout of a vt... the first simply clears the screen and then proceeds to run logout. Nice and tidy. If you didn't want to make this a global alias (since /etc/profile sets the environment for ALL logins) you could as easily put it in your ~/.bash_profile or ~/.cshrc so that it is invoked only for a specific user.

### Changing your HOST name

Well, you're really getting tired of having your LINUX BOX referred to as WussyCakes just because your techno-dweebe buddies got on when you weren't around and changed your hostname and you can't figure out how to get it back.

Relax. This one's easy...

I'm not sure if this one will work if you haven't compiled in TCPIP networking support into your kernel... but you can give it a try. The quickest way to to this is simply to invoke the program hostname. If you invoke it without any arguments, then it'll display your current hostname. If you invoke it as

    	hostname SuperBadHombreLINUXBox

then it'll happily set your hostname to "SuperBadHombreLINUXBox" which is probably not the greatest idea... but it can be done. Also, if you invoke it as `hostname -f` you'll get the full DNS name of your box such as "MyLinuxBox.MyUniversity.Edu". If you need a bit of quick help, just read the manpage or simply invoke it with the " -h " option to get a quick summary of command line options.

A more permanent solution is simply to edit the /etc/HOSTNAME file. The way this works (again, at least with the Slackware distribution...) is that there's a stanza in the /etc/rc.d/rc.M file that reads the hostname from /etc/HOSTNAME and passes it to the hostname program each time you boot the system. Ever wondered where the "darkstar" name came from...

      # If there's no /etc/HOSTNAME, fall back on this default:
      if [ ! -r /etc/HOSTNAME ]; then
       echo "darkstar.frop.org" > /etc/HOSTNAME
      fi

      # Set the hostname.  This might not work correctly if TCP/IP is not
      # compiled in the kernel.
      /bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`

you'll find these stanzas in the rc.M file. Looking at it quickly you'll see that it first tests for the presence of the /etc/HOSTNAME file (the first if...fi statement). If there's no /etc/HOSTNAME file present, it decides to call your box "darkstar.frop.org" by creating the /etc/HOSTNAME file for you and then feeding this information to the hostname program.

So... all you have to do is decide on some too-way-cool name for your box, edit the /etc/HOSTNAME file and then run the final command:

      /bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`

to immediately set the new hostname.

Like I said, this is too easy...

### Screen blanking

While we're rooting around the /etc/rc.d/rc.M file...

There's another really handy little program that does all kinds of fun stuff... setterm. Now, like a lot of great little UNIX progs, you can really hose yourself if you recklessly start messing with this... it probably won't permanently break anything, or then again, it might... ;-), but, what's cool about it is that it'll let you set a terminal color scheme, AND, how long it waits until it blanks your screen.

You know, you walk away and come back after a coke and bag 'o Nachos and find that some kindly UNIX gnome has blanked your screen for you so you don't burn a hole in your phosphors. Well, you can set that time-out to whatever you want.

You'll find the line:

      # Screen blanks after 15 minutes idle time.
      /bin/setterm -blank 15

in the rc.M file. Simply change the " -15 " to whatever value in minutes that you want. Editing the file makes the change permanent and takes effect the next time you boot the system. To change it right away, simply type in `setterm -blank n` where " n " is whatever time in minutes you want to wait for screen blanking.

### Running splitvt

Here's a great little program that I just ran across a couple days ago. I recently had to reinstall Linux (as well as DOS, OS/2 Warp, Win 3.1...) after deciding to upgrade to a 850MB second HD. I won't go into all the horrific details, but it was a bit of a mess for a few days...

Anyway, during the installation, as I watched the Slackware installation dialog boxes merrily flip by... one of the utility programs caught my eye. So, I jotted down the name of the program, and after installation was done, tried running the thing... splitvt.

This is a too-way-cool little program that'll let you run two shells in a split screen fashion. " So what's so cool about that..." you ask, since you've already told us that we've got 63 virtual terminals to choose from? Well, you're right, except that it lets you run two programs and watch the output from the same screen.

For example, if you read the manpage for it, it gives you a suggested ~/.splitvtrc run-command file that would fire up a split screen with two login shells, and run the program top in the bottom half. That way, you'll have a dynamic display of your current CPU and memory usage while you merrily work away at some task in the top screen. If you've ever used the split screen function in the VIM editor, you'll know what I mean.

I tried using it with a couple PPP login scripts I've been working on. I have one script that does auto-redial to the local university's PPP comm server (see last month's Linux Gazette for the file) and another one, which I recently wrote, that hangs around waiting for the /var/run/ppp0.PID file to appear, indicating a PPP connection had been established. Once it finds it, it automatically updates the /etc/hosts file (since the school does dynamic IP addressing), POP's my mail from the mail server and plunks it in the /var/spool/mail/root file, and then starts periodically pinging the gateway host to keep the connection up. Running it in the split screen let's me see what's going on with both progs as they run.

Mucho cool.

The beauty of this program is that it's really simple to use and set up. The man page is clearly written and gives an example rc file. You can also configure it to start up running two programs automatically, but specifying

    	run -upper first_program
    	run -lower second_program

in the ~/.splitvtrc file. I'm sure that there are some fun things that can be done with this. We'll see...

## Introducing FVWM!

Welcome to the wonderful world of FVWM and of X! There's so much cool stuff that you can do with X Window and the various window managers such as fvwm, twm, mwm, olvwm, gwm, and so on that it boggles the mind. And when was the last time your mind was boggled...?

As most of you know, the fvwm program stands for F.... Virtual Window Manager. The meaning of the " F... " has apparently been lost somewhere in antiquity with no original manuscripts extant to shed light on its true meaning. Still, if you read the docs, there have been suggestions that it might stand for " Feeble, Fun, Fantastic ... ". Who knows.

What is known is that it is one awesome window manager written specifically for the LINUX OS and based upon the code of one of the original window managers -- twm (which, BTW, stands for Tabbed Window Manager). It is reported to have a much more modest memory appetite than the original twm and is a LOT more customizable.

Just how customizable is something that I'll probably be spending a couple issues of the Gazette writing about.

It is just too way COOL!

Anyway, I'm going to make a couple modest assumptions:

- you've gotten X Window running
- you're using a Slackware distribution or one similar to it
- you're running fvwm as your window manager.

If you've installed the Slackware 2.2.x or greater distribution you've probably installed it and found that it's the default window manager. Good choice.

Now, let's see what we can do with it.

First, the file you'll want to edit to do all kinds of fun stuff is either:

    	/usr/X11R6/lib/X11/fvwm/system.fvwmrc OR,
    	~/.fvwmrc

Most fvwm distributions come with all kinds of goodies, including a very nicely commented and organized system.fvwmrc file. It is a good default to start with and is well commented enough that you can make a lot of adjustments right from that file.

ONE CAVEAT!! Don't forget to have or make a backup of the original file, as well as any that are modified that actually work! That way, if something breaks, you'll have a backup. If you don't make a backup somewhere, you'll be digging through piles of disks or scouring your CD looking for a copy of the initialization file.

Be prudent. Practice safe X.

There's one other suggestion that holds for messing around with ANYTHING with Linux... consider a notebook and pen essential hackers equipment.

Why? Because sooner or later you'll stumble across some absolutely awesome utility, gadget, or doodad (doodad??) and you'll spend a hour reading the manpage, going over the README's, and hacking away at the command line options to get it to do just what you want it to do... and it works GREAT!

Then, a couple weeks later, you're hanging around with a couple bud's and you decide to impress them with your LINUX wizardry... Yup, they're going to be PRETTY impressed with you when you show them... uhhh...hmmm, now how did I do that...?

You get the point.

Write this stuff down.

Anyway, with that said, you're ready to hack! One of the first things you'll probably want to do is configure your desktop. This is one of the greatest examples of the process of " step-wise refinement " that I can think of. Over the course of a couple months you'll probably change your setup a couple dozen times or more as you discover things that you can do with fvwm.

And so, let's begin!

## FVWM: Getting stuff going...

So, how do you get all kinds of cool stuff to come popping up when you fire up X?

Glad you asked.

There are a couple ways to do this, but one of the easiest is to let fvwm do it for you. Without getting too bogged down in discussing the concept of " built-in functions ", suffice it to say that fvwm is more than willing to manage getting programs up and running each time it starts.

Parenthetically, once you've gotten X and fvwm up and running there are four basic means of getting programs running:

- invoke it from the command line in an xterm
- add it to the popup FVWM menu
- add it to the GoodStuff button bar menu
- use another program (such as xfm) to launch it

Since this deals with the programs that are started at the time of initialization I'll stick to how to do this using the system.fvwmrc or your ~/.fvwmrc file.

So, AFTER you've made a backup of the original fvwmrc file go to the section entitled " Stuff to do at startup ". In mine, it now looks something like this:

    #############################################################################
    #
    #			START-UP CONFIGURATION
    #
    #	Functions:	InitFunction
    #			RestartFunction
    #
    # Stuff to do at start-up
    # This is an example of a complex function definition.  It is a special case
    #	in that "InitFunction" is called when fvwm is started for the first
    #	time and is generally used to start modules, set background patterns,
    #	and begin programs.  "RestartFunction" is called whenever fvwm is
    #	restarted and generally starts modules and sets background patterns.
    #	It probably should NOT be used to start programs.
    #
    # This defines the fvwm complex functions "InitFunction" and "RestartFunction"

    Function "InitFunction"
    #	Module	"I"	FvwmBanner
    #	Exec	"I"	xpmroot /usr/include/X11/pixmaps/fvwm.xpm &
    # To begin with, get the FVWM GoodStuff button bar running
    	Module	"I"	GoodStuff
    #	Module	"I"	FvwmPager 0 3
    # Then, the analog clock - Swallowed by GoodStuff
    	Exec	"I"	exec xclock -bg SaddleBrown -fg HotPink -hd white -g 140x160-145+138 &
    	Wait	"I"	xclock
    # Make sure the xmailbox prog is up and running - swallowed by GoodStuff
    	Exec	"I"	exec xmailbox &
    	Wait 	"I"	xmailbox
    # Now, fire up xload - swallowed by GoodStuff
    	Exec	"I"	exec xload -bg SaddleBrown -fg HotPink -nolabel -jumpscroll 1 -update 2  -geometry 80x80+100+100 &
    	Wait	"I"	xload
    # Next, the digital clock
    	Exec	"I"	exec xclock -d -g 232x50+793+5 -bg SaddleBrown -fg white -update 1 &
    	Wait	"I"	xclock
    # Now, start up xcalendar
    	Exec	"I"	exec xcalendar -g 345x382+793+372 &
    	Wait	"I"	xcalendar
    # Xman program, which we'll use without a titlebar
    	Exec 	"I"	exec xman -g +793+274 &
    	Wait	"I"	xman
    # Finally, fire up a full screen xterm
    	Exec	"I"	exec xterm  -sb -sl 500 -j -ls -fn 9x15 -g 84x48+4+4 &
    	Wait	"I"	xterm
    EndFunction

    Function "RestartFunction"
    #	Exec	"I"	xsetroot -solid "#266294"
    #	Module	"I"	GoodStuff
    #	Module	"I"	FvwmPager 0 3
    EndFunction

    #
    # End of STARTUP configuration
    ##############################################################################

All the stuff between the Function "InitFunction" and EndFunction defines what programs fvwm will start up at initialization.

The easiest way to configure this is to use one of the programs as an example! There are three basic patterns:

- Exec which will execute a command
- Wait which will wait for a window to appear on the desktop before proceeding with the next command
- Module which will fire up one of fvwm's modules such as the GoodStuff buttonbar or FvwmPager.

The function Exec is one of fvwm's built in functions that will execute a command. This is probably the one that you'll use the most often. For example, let's say that you want to add some great new program to your start up... you've discovered the program xmailbox (which really is is a great program) and you decide that you want to start this up every time you start X.

This is easy.

First, get out your pen and notebook.

Do it.

Once you start up X and fvwm you'll need one of those handy-dandy xterms to get stuff going. Presuming you've installed xmailbox you can invoke it at the command line in an xterm. Just type in `xmailbox &` and it's up and running! It'll probably be in the form of an outline which will allow you to put it somewhere. Ok, drop it somewhere.

Now, using the left mouse button you can generally resize your application if it has those little " L " shaped handles at each of the four corners. Clicking on one of these corners allows you to resize the window; clicking and dragging on the titlebar or one of the side borders allows you to move the window around.

When you move the window, you'll notice a little blue window up in the upper left hand corner with a couple numbers, such as +5 +180. Those indicate where the upper lefthand corner of the window is located relative to the root window. Keeping in mind that the upper lefthand corner of the root window (the "desktop") is 0,0 then every window is some distance in pixels from the left and the top of the desktop.

When you get the application window where you want it, write those numbers down. You'll need them.

Since we're talking about placing windows on your desktop, this is a good place to digress for a moment and talk about...

#### Window Geometry

The basic idea is pretty simple. When you set up the XF86Config file you had to indicate the size of the "virtual desktop". This meant that if your video card had enough RAM, you could make the desktop screen larger than the physical screen of your monitor. For example, I've got a Cirrus CL-G5428 card and am running X at about 800x600. Yet my virtual desktop is max'd at 1152x900. So, when I move the mouse around, the desktop shifts.

Very cool.

Anyway, those dimensions are in pixels... my entire desktop is 1152 pixels wide by 900 pixels high. For all you math type folks, that's

x = 1152 on the horizontal axis
y = 900 on the vertical axis

This is the basis of geometry. The "+" sign means the distance in pixels from the LEFT or TOP of the screen and a "-" sign means the distance from the RIGHT or BOTTOM of the screen.

Actually, that's a bit of a lie. If you use the "+" sign, it indicates distance in pixels of the left border of your application window to the left border of the screen or the top border of your application window to the top border of your screen.

If you use the "-" sign, it really indicates the distance in pixels of the right border of your application window to the right border of your screen , or the bottom border of your application window to the bottom window of the screen.

To convince yourself of that try a simple experiment: enter the following commands in an xterm window and see where the window ends up:

- xterm -g +0+0 & (which puts the xterm in the upper left corner)
- xterm -g +0+200 & (the xterm is flush along the left border but now is 200 pixels from the top of the screen)
- xterm -g +200+0 & (the xterm is now flush along the top of the screen but is 200 pixels from the left border)
- xterm -g -0-0 & (which puts the xterm window flush along the bottom right corner of the screen
- xterm -g -0-200 & (the xterm is now flush along the right border of the screen but 200 pixels above the bottom border)
- xterm -g -200-0 & (the xterm is 200 pixels away from the right border of the screen but flush along the bottom border)

Try these out and it'll help you get the concept of placing windows. Keep in mind that the basic format is +/- Horizontal +/- Vertical placement.

For example, if you wanted to put xmailbox 20 pixels from the left border and 100 pixels from the top border, you'd indicate this by typing in:

    	xmailbox -geometry +20+100 &

If you're using the stock fvwmrc file, you should also have another very handy little gadget called FVWMWinList. This keeps track of all your apps that are opened. One of the cool things that it includes is the geometry of the window -- this includes the location and the size.

So, once you've placed xmailbox where you want it, and used the handles at the four corners to make it larger or smaller, click the right mouse button to get the FvwmWinList to pop up. From there, you should see a listing of all your programs, including xmailbox!

Now, write down the numbers, which might be something like "0:+20+100x60x100". Let's decipher this:

The FvwmWinList module displays a series of buttons with two pieces of information: the name of the application (actually, the window title), and the window geometry. It is the window geometry that we'll be interested in. The size and the location of the window are indicated by the series of numbers following the "0:". The first two numbers indicate the location of the window. Geometry is always in the form:

+/- Xposition +/- Yposition

So, in this case, it's 20 pixels from the left border and 100 pixels from the top.

And finally, the window size is 60 pixels wide, by 100 pixels high. The size of a window is always in the form:

Width x Height

PHEW!! Almost done...

So after this minor digression, let's see where we stand. You've written down the location and the size of the window, now it's time to edit the fvwmrc file. If you want to start a program, the basic form is:

    	Exec "I"	exec program_name [-options] -geometry WidthxHeight+xpos+ypos &

So, to start up xmailtool with no options, you'd include a line like:

    	Exec "I"	exec xmailtool -geometry 60x100+20+100 &

in the above section and voila!, there it is.

To further customize this, you can add ANY options that you'd normally type in at the command line. One important point! Don't forget to put the ampersand " & " at the end of the command line.

So, now you can go back and do the same for ANY other program! Jot down the geometry of the window, any command line options, exit out of X, edit your system.fvwmrc or your ~/.fvwmrc file and restart X!

So what's the "Wait" thingy for...? Well, if you want a program to be started using the method described above, you'll probably want to put a stanza below it with the following form:

    	Wait "I"	xmailbox

You don't need an ampersand (&) at the end of the line. What this does, is force fvwm to wait until a window with the title "xmailbox" is drawn on the screen. It essentially keeps fvwm from just plowing ahead with the rest of the initialization stuff while your poor program is trying to load up.

So what happens if you don't do this?

Search me...

This is what the docs recommend... and they're the guys that wrote this thing... I don't know, maybe something aweful happens... maybe it crashes, or dumps core, or maybe Tammie Fae gets her own talk show, or maybe another Democr... (ok, ok... I'll desist...)

If you want to fire up one of the modules such as the GoodStuff button bar or the FVWMPager, you use a similar format:

    	Module "I"	GoodStuff

Notice that you don't need the ampersand at the end of the line. I'll be messing around with GoodStuff and FVWMPager a little later on, so I'll hold off mentioning much about either of them right now.

Well, that's pretty much it! It really is a LOT easier to do, than to explain. The best suggestion is to experiment. And don't forget that notebook... :-)

## FVWM: Adding programs to the Popup Menus

FVWM gives you LOTS of ways to launch programs and one of the easiest and most flexible is to add your programs to the popup menu that you can call up by clicking the Left mouse button on any free space in your root window. The default menus are pretty useful, until you begin to notice two problems:

- the menus contain programs that you don't have on your system
- the menus lack many programs that you do have on your system

Wanna fix that?! It really is pretty easy.

Again, the same caveats and such hold here as in the previous section... you'll need (i) to make a backup of the fvwmrc file BEFORE you start hacking away on it, and (ii) you'll want to have pen and notebook handy to jot down commandline options and geometry stuff as well as notes to yourself.

Once you've done this, you're ready to start!

First you'll need to make sure that you've jotted down the command line stuff that you'll want for your program. Do you need it? Nope. You can usually get away with just invoking most programs without any information at all. There are usually default resources already defined and the app will work just fine.

But, if you want to customize an application's appearance such as change the font it uses, or the background/foreground color scheme, or you want to invoke it with a series of specific options, or you want it a certain size or in a certain location... if you want any of these, you'll need to tinker around with invoking the program from an xterm using various options until you get it just the way you want it.

Again, to use an example, suppose you wanted to add a bunch of graphics programs to the popup menu. You've added xpaint, xbmbrowser, and pixmap programs and you want to create a popup menu for them. You've also decided that you want xbmbrower and pixmap to start up full screen at a size of 790x590 pixels. Ok, armed with this you're ready to go.

First, however, a couple concepts.

Basically, the way to handle creating Popup menus using fvwm involves three steps:

- First, all the submenus are defined (such as Applications, Graphics, Screensavers, Xterms, and so forth)
- Next, a main popup menu is defined that invokes the various submenus so that clicking on that entry pops up the submenu
- Finally, the main menu is bound to a mouse button or keyboard key.

For the moment, we'll only concern ourselves with the first two steps since the default fvwmrc file takes care of binding the default menu to the left mouse button which it's clicked on the root window.

So, let's proceed.

First, let's create the submenu for the graphics apps you want. To define a popup function for fvwm you'll use the following format:

    	Popup "Popup_Name"
    		Title	"Popup_Menu_Title"
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Nop		""
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Exec	"Menu_Item"		exec program_name [-options] &
    		Exec	"Menu_Item"		exec program_name [-options] &
    	EndPopup

Ok, so what's going on here...

The function is defined by the reserved words Popup and EndPopup. Everything in between them defines that particular popup menu.

After Popup you'll give this submenu a name (Popup_Name) that needs to be enclosed with double quotes. This is the name that the submenu will be invoked by. We'll see this is a moment.

Next, You can give the submenu a title that will appear at the top of the popup menu listing. For our graphics submenus you could call it simply "Graphics Programs".

After this, you'll enter the application information. Each stanza takes the form Exec, followed by the name that you want to appear in the menu listing (this is also enclosed in double quotes), and then finally, the exec statement that launches the program using the options that you've decided upon.

AND DON'T FORGET THE & AT THE END!

The Nop entry is a special sort of entry. It does, as the name implies, nothing. Well, that's not completely true.

If you include an entry such as:
Nop ""

which has no spaces at all between the double quotes, it'll put a horizontal dividing line between the entries. This is very nifty as well as admirably tidy.

However, if you put a single space between the double quotes, it'll just leave a space between the two entries... there won't be a horizontal dividing line placed.

So, for our example programs, you'd enter:

    	Popup "Graphics"
    		Title	"Graphics Programs"
    		Exec	"Pixmap"		exec pixmap -g 790x590 &
    		Exec	"XbmBrowser"	exec xbmbrowser -g 790x590 &
    		Exec	"XPaint"		exec xpaint &
    	EndPopup

Notice that if you'd wanted to place, for example, the pixmap application in the upper left hand corner (+0+0), then you would have changed the entry to:

    		Exec	"Pixmap"		exec pixmap -g790x590+0+0 &

So, now you've defined the submenu. You can continue to add other items in this same fashion. How many should you add... well, the default fvwmrc puts ALL of the screensaver apps in a single submenu. When I click on it there's a HUGE list that goes scrolling down to the bottom of the screen. After about the first dozen or so programs, you might want to think about setting up another submenu for other programs. You're an adult... use your discretion...

Now, let's see how you call up those submenus.

As mentioned before, the stock fvwm distribution has a default fvwmrc that defines a pretty handy default popup menu. Mine has been morphed into something that currently looks like this:

    # Main Menu Definition
    #
    # This is bound to the left mouse button and is invoked as the top-most
    # menu.
    Popup "FVWM Menu"
    	Title 	"FVWM Menu"
    	Exec	"XCalc"		exec xcalc -g 565+195 &
    	Exec	"XTerm"		exec xterm -sb -sl 500 -j -ls -fn 9x15 &
    	Exec	"Xman"		exec xman &
    	Exec	"Xconsole"	exec xconsole -g 720x70+410+795 &
    	Nop     ""
    	Popup   "Applications"  Applications
    	Nop     ""
    	Popup	"Desktop"	Desktop
    	Nop	""
    	Popup	"Editors"	Editors
    	Nop	""
    	Popup   "Games"         Games
    	Nop     ""
    	Popup	"Graphics"	Graphics
    	Nop	""
    	Popup	"Modules"	Modules
    	Nop	""
    	Popup	"Network"	Network
    	Nop	""
    	Popup   "Shells"        Shells
    	Nop     ""
    	Popup	"X_Utilities"	X_Utilities
    	Nop	""
    	Popup   "Screensaver"   Screensaver
    	Nop     ""
    	Popup   "Lock Screen"   Screenlock
    	Nop	""
    	Popup	"Exit Fvwm"	Quit-Verify
    	Nop     ""
    	Refresh "Refresh Screen"
    EndPopup

To call up a submenu, you simply add a stanza that's in the form:

    	Popup	"Menu_Item_Name"	Popup_Name

remember that when you first defined a submenu you put the name of the submenu in double quotes after the Popup declaration? Well, here's where you'll need it.

The entry Menu_Item_Name is whatever you want to have appear on the menu listing. Often, as you can see by the example above, it'll be the same name as whatever you've called the submenu. No harm in doing that, although they CAN be different as in the "Exit Fvwm" entries demonstrates.

So that's it!

See, it wasn't so bad... You can easily use the default entries as a template for your customizations. Want to delete an entry? You can either physically delete it or, which may be the better part of valor, you can simple comment it out using a "#" sign.

A couple final points:

- Can you nest submenus more than a single layer deep?

  Yup, you sure can. Use the " Popup Menu_Item_Name Popup_Name" format in the submenu.

  Just remember! You MUST define a menu BEFORE you can include it as a submenu somewhere else. You'll notice that all of the submenus were defined BEFORE the final, topmost menu was defined. That's because, if you wanted to include a popup menu called "MyFavoritePrograms" and you hadn't defined it yet, fvwm would complain severely.

- Add an entry for the programs that you use MOST OFTEN somewhere in the topmost menu. In other words, you'll probably want an entry for an xterm in the main popup menu, because you'll be using them all the time.

  Do you have any other programs that you use all the time? Maybe you're constantly looking up manpages and need the xman program handy. Or maybe you frequently use a calendar program like xcalendar.

  In either case, if you need something frequently, or often need to start multiple copies of the program... keep it handy.

- If you want to invoke a program in a number of differnt ways, Create stanzas for each different iteration!

  In other words, if you want to be able to invoke a single program with various options, simply create a line for each of the differnt ways you want to invoke the program.

  One of the best examples of this is the "XTerm" menus that are included with the stock fvwm distribution. These series of entries call up an xterm with different sized fonts, ranging from quite small to truly myopic!

  Customize, man, customize!

- You DON'T have to add EVERY program to the popup menu!

  This goes almost without saying... but, if you add EVERY program you've loaded up to your menu, it'll stop being very useful. Add the programs that you'll really use.

  The corollary is similar: if a program requires input before it will run, it may not be very handy to put that program on the menu.

  For example, the really impressive graphics program ImageMagick allows you to display images in a huge variety of formats, which you can then manipulate and save to a different format. Thing is, you'll probably be invoking it with the name of the file you want to display. It's a lot easier to invoke this program from an xterm command line.

- Make it easy on yourself, put your applications into logical groups.

  By this, I mean, you should put all your editors under the "Editors" menu, and the various xterms under the "XTerms" menu. You'll find that as you begin adding more and more programs that putting them into some kind of logical order will really make finding them quickly much easier.

  Also, it seems obvious, but it gets overlooked... put the programs that you use most often AT THE TOP OF THE LIST. Man, it's taken me months to discover that it's a LOT easier to click on the Graphics submenu and then immediately hit the xpaint program if it's at the top of the list.

  Never fail to state the obvious...

  Also, use the Nop option to help visually separate dissimilar items. You'll notice that this is done in the default setup and it works quite well.

Well, that's it! Now, have fun!!

## FVWM: Managing the Virtual Desktop!

Of all the excellent things that you can do with or to fvwm, one of the most useful is getting to know the fvwm Pager. This is that handy little gadget that sits up (by default, anyway) in the upper left hand corner of the screen. If you click on one of those little windows... poof! there you are.

Very cool.

Well, like most of the rest of fvwm, this thing is eminently customizable! So, what can you do with/to it?

- change its location
- change the size of the pager itself
- change the number of "windows" for each virtual desktop
- use your LEFT mouse button to move to a virtual desktop
- use your RIGHT mouse button to change your viewport
- use your MIDDLE mouse button to pick up and move objects (program windows) anywhere on your desktop

And, customizing this stuff is easy! Promise.

Ok, so once again, you'll need to be armed with pen and notebook, and you should make a backup of the fvwmrc you're about to hack away on. Once that's done you can quickly and easily do almost anything you want with it.

So, let's edit.

This is what the entry in my fvwmrc looks like:

    ###########################################################################
    #
    #		    VIRTUAL DESKTOP CONFIGURATION
    #
    # Set up the VIRTUAL DESKTOP AND PAGER

    # Define the virtual desktop size in units of the physical screen size.
    # syntax:	DeskTopSize HorizontalxVertical
    #
    DeskTopSize 3x2

    # Define the virtual desktop scale in terms of a reduction factor
    DeskTopScale 36

    # Pager X_Location Y_Location
    # Enables the fvwm PAGER at X_Location Y_Location.  Miniature versions of
    #	all non-sticky windows on the virtual desktop are shown in the pager
    #	with the color of the miniature version the same as the color of the
    #	full-size window's borders
    # Button actions:
    #	Button 1 	move desktop viewport to selected page
    #	Button 2	move selected window anywhere on the desktop
    #	Button 3	move top-left corner of viewport to the location pressed
    #			dragging Button 3 will cause the viewport to scroll.
    #
    Pager -5 5

    #
    # End of VIRTUAL DESKTOP and PAGER configuration
    ##############################################################################

If you copy something like this into your ~/.fvwmrc or system.fvwmrc file you're pretty much home free! Let's see what's going on:

First, define the desktop size. I've set mine to 3x2 since I use one of the "virtual desktops" as my "homebase" if you will, and use the other five as work area. I'll be discussing the rationale behind doing this in later sections. For the moment, suffice it to say that you can set up as many virtual desktops as you like.

Simply put in the number of desktops you want in each row (Horizontal) by the number of columns you want (Vertical). For example, if you wanted a virtual desktop 7 across and 3 high you'd simply put:

    	DeskTopSize 7x3

Easy.

Now, instead of entering the actual size of the window in pixels, as you do with MOST (but not all as we'll see) windows, you enter the reduction factor by which you want the pager reduced. I didn't pick the number 36, it was the default value, but it seems to work well. If you wanted to make the pager larger, simply decrease the reduction factor to, say, 30 and see how it looks. Experiment with it until you find a size that you like.

Now, enter the location (geometry) in which you'd like to put the pager. You'll notice here that I've put it at the coordinates -5 5. Like most of the geometry entries, this places the pager 5 pixels from the right border of the screen and 5 pixels down from the top of the screen. If you aren't sure what this means, puruse the section on Window Geometry.

So, now that you've added lots of desktops, made the pager just the right size, and put it just where you wanted it to be... you ask " what the heck can I do with this thing?"

Aweful glad you asked!

The obvious thing that you can do with this is to switch to another virtual desktop. you just use the left mouse button and click on the desktop to which you want to move. Simple.

What you may not have realized is that the other two mouse buttons have been defined to perform a couple other operations (again, presuming that you're using the stock fvwmrc file). The right button allows you to change the viewport.

So what's a viewport?

Basically, it's the location on the virtual desktop that is currently in focus, if you will. These best way to learn what this means is to try it.

Go ahead... try it!

What you'll discover is that instead of smoothly jumping from one virtual desktop to the next you'll "pass through walls" as it were. You'll be able to change the focus to any point on the virtual desktop, regardless of where the desktop "boundries" are located. Experience it.

Finally, the middle button will allow you pick up a window on the virtual desktop (that is, within the pager window) and move it anywhere on the virtual desktop. Again, to appreciate it, you have to try it. Put a couple xterms on one of your desktops and then use the middle mouse button to drag-n-drop one of those xterms to another location. It may not be the most useful of the functions... but it makes a great party trick ;-)

## FVWM: Quick Tips

One of the great things about fvwm is that not only can you tinker around with some fairly complex stuff, but also, there are innumerable little changes that you can make to it. These aren't overwhelming, but they can make using fvwm a LOT more fun.

Here are a couple ideas for ways that you can customize fvwm. The first three deal with things that add or change the functionality to those ubiquitous window buttons. I won't go into all the details of creating buttons or binding new functions to them, that's for another time. But, until then, try these one's out!

### Making apps go full-screen

I'm sure that most of you have noticed that most all of the windows under fvwm and X have a single button on the left and two on the right. Well, like everything in X, these are eminently customizable, including creating new ones, deleting them, binding new functions to them, creating new popup menus for them.

It's too way cool.

One of the more helpful things that can be done is clicking on the right-most button will cause the application window to go full screen.

Well, it's supposed to anyway. On mine, it didn't. And I didn't have a clue as to why it didn't... until I did a bit of reading in the 'ol manpages.

Adjusting the Maximize function so that it actually enlarges your apps to full screen is pretty easy to do and forever makes life easier! Here's what you'll need to do...

In the fvwmrc file, you'll find an entry for the Maximize function that allows you to set its action. In mine, it looks something like this:

    # This function sets the pattern of maximization.  The values after the mouse
    # action field are:
    #	Horizontal_Maximization  Vertical_Maximization
    #
    # These are in reference to the *entire* desktop, so that "100 100" enlarges the
    # application to the size of the entire *virtual desktop* - i.e., to 1152 x 900.
    #
    # Therefore, we'll set these up so that:
    #	single click	maximizes to screen size (about 800x600)
    #	double click	maximizes to full virtual desktop size (1152x900)
    #	motion		maximizes vertically *only*
    Function "maximize_func"
    	Maximize	"Motion" 0 85
    	Maximize	"Click" 69 85
    	Maximize	"DoubleClick" 100 100
    EndFunction

So, what's going on here?

Well, this is in the section of the fvwmrc that defines complex fuctions. What is germane to this discussion is that this function has been bound to the right-most titlebar button so that a mouse action on that button can do, in this case, one of three things.

There are three mouse actions that you can perform:

- a single click
- a double click
- motion - which is simply pressing the mouse button and then moving it slightly, as though you were going to drag-n-drop something.

What you can see is that in each case, the Maximize function is being invoked, but in different ways. A single click causes the window to be maximized to 69% of the horizontal width of the desktop and 85% of the vertical height.

Why in the world is it doing THAT!?

Thanks for asking...

Remember that I said that I'm running a virtual desktop of 1152 x 900. That gives me a desktop that's 1152 pixels wide by 900 pixels high. But, if you check the modeline for the resolution I'm currently using, you'll see that I can only view about 800 x 600 pixels at a time. The rest is "off-screen" if you will.

Now, are you getting the picture?

A full screen application occupies only the 800 x 600 pixels that I view at any one time, yet fvwm knows that my "virtual desktop" is actually 1152 x 900 pixels. Fvwm uses the size of my virtual desktop as the size to which windows are maximized.

So, in order for apps on my system to be full screen without extending beyond what I can see, I simply maximize them to 69% of 1152 (horizontal) and 85% of 900 (vertical). You can do a bit of math and make a fair estimate of what values you'll need for your system. Simply compare the size of the virtual desktop with the actual size of the viewable area taken from the modeline you're using.

For example, suppose that you were running a virtual desktop of 1000 x 800 pixels and the viewable area you were using came out to be around 640 x 500 pixels. To maximize a window to occupy full screen you'd need to set the horizontal value to 640 / 1000 = 64%, and the vertical value to 500 / 800 = 63%.

In practice, I tried this and found that it worked fairly well, but still needed a bit of tinkering to get it right. It's a matter of trial and error after you've made an initial estimate.

Once you get this value right, your apps will happily expand up to full screen whenever you single click on the rightmost button. Which brings up a very important point and one that I'll probably make again elsewhere:

If you are running a virtual desktop that's larger than your viewable area (such as having a virtual desktop of 1152 x 900 when you're running at a resolution of 800 x 600) AND you want to use this maximize funciton, you should put all of your peripheral apps, such as the pager, clocks, and other sundries, on the right hand side of the screen.

Why is this important?

Simple. You'll find that the maximize function is very handy. You fire up a program, position it where you want, and then decide that you want to use it full screen. When you maximize it, it is enlarged full screen, AND THE UPPER LEFT HAND CORNER IS POSITIONED AT +0+0.

Thus, the window is flush up against the top and left sides. If you put all the other windows on the right side, you'll discover that they won't get covered up when you maximize a window. Since you'll eventually, if you haven't already, find yourself making all kinds of modifications to your desktop, it's important to plan out where things should go.

It's a matter of efficiency.

Trust me.

Anyway, what do the other mouse actions do? Well, if you double click on the rightmost button the window will be maximized to the FULL VIRTUAL DESKTOP size. This hummer will be BIG! There are times when you'll want to do this, especially if you're working with a graphics program and are editing a large image file.

The other mouse action is a bit less intuitive, but still pretty easy. All you do is a "baby drag-n-drop". That is, you push the button down, and you ever-so-slightly move the mouse as though you were going to drag it somewhere. This triggers the "motion" event. In this case, the window is maximized only vertically (0 85) to the height of the viewable screen size. If you want to be able to maximize horizontally only, simply change the entry to, for example, 69 0, and the window will be maximized horizontally. Entering a "0" for either the horizontal or the vertical entry simply causes the window not to be resized in that direction.

Believe me, once you've got this set and working for you, life becomes good!

### Closing Apps with the Left Titlebar Button

You've discovered already that by clicking on the leftmost titlebar button of a window, you're presented with a popup menu that lets you perform several different window actions such as "Move, Resize, Raise, Lower, (Un)Stick" and so forth. You can use this menu to terminate a program if it does not voluntarily do so.

Keep in mind that a "Delete" and a "Destroy" are similar, but not identical functions. The Delete fuction sends a signal to the application to quietly quit and close down the window. This is the more graceful way to request a program to end itself. The other method involves a more violent Destroy action, which simply kills the application.

So, what's the big deal... the end result is the same, isn't it? Not exactly. You see, many programs will perform several actions during the course of their operation. They may set up temporary files or alter certain environmental variables, or set up lock files. When a program quits, at least one that's well behaved, it generally cleans up after itself. It'll delete temporary files, delete lock files, and generally mop up after itself. Deleting causes the application to go about the process of quitting in this manner, if you will. Destroying, on the other hand, simply terminates the program, no matter what it happens to be doing.

So where is all this going...

Well, there's a nice, easy way to close an application that fvwm provides. It is one of the built-in fuctions called "Close". This first attempts to close an application by signalling it to quit gracefully. If that doesn't work, it simply terminates the application. Either way, the app is GHANDI.

In the section of the fvwmrc that defines menu bindings you should find something that looks like this:

    # Menu acts like normal twm menu if you just hold the button down,
    # but if you click instead, the menu stays up, motif style
    Function "window_ops_func"
    	PopUp 	"Click"		Window Ops2
    	PopUp	"Motion"	Window Ops2
    # Motif would add
            Close   "DoubleClick"

In the stock fvwmrc file, this last line is commented out. Simply remove the "#" to uncomment it. Then, if you want to close an application, all you have to do is double click on the left button. Saves your having to pop up the menu and try Delete, and then Destroy.

Like I said, it's worth about 2¢ :-)

### Hiding those icons...

There's an option in the fvwmrc file that allows you to hide window icons. Normally, when you make an icon out of a window, there's a cute little icon sitting down at the bottom of desktop. Double clicking on it returns it to its former size and location.

So why would you want to hide the icons?

Well, if you've opened up several apps and start making icons out of them, you'll quickly discover that there are icons all over. At this point, you're all thinking... "Yup, just as I thought... this guy is seriously anal..."

How'd you know :-)

It's strictly a matter of taste, but I've preferred to keep track of iconified windows by using the FvwmWinList function. Clicking on the right button anywhere on the root window will bring up the WindowList containing a listing of all the applications -- both those that are windowed and those that are iconified. Clicking on one of these entries automatically restores the window. Also, I find that it's easier and faster to restore programs from the window list than to hunt for the icon.

Again, strictly a matter of preference.

If you want to give this a try, you'll find an entry in fvwmrc that looks like:

    # SuppressIcons prevents icon windows from being created or drawn.
    # If you uncomment this, and make sure that the WindowList is bound to
    # something, it works pretty much like an icon manager.
    SuppressIcons

simply uncomment the "SuppressIcons" and you're all set.

### Menus the MWM way...

There's another little alteration that you can make that I've found that I really like a lot. It's the way menus are presented. To really get the feel for this you'll need to do some quick and easy tinkering. You'll find an entry in the fvwmrc file under the "MWM Emulation" heading. It'll look something like this:

    # MWMMenus affects minor aspects for the look-and-feel of MWM.
    # This option triggers a few other MWM-style options, such as centering
    #	the resize/size window on the screen instead of leaving it in the
    #	upper left, and switches the resize-on-initial-placement trigger
    #	action to shift-button-1 instead of the TWM-style press-button-2
    MWMMenus

By uncommenting the "MWMMenus" entry, you'll find a couple things have happened:

- Submenus now pop up beside the parent menu, instead of partially in front of it and obscuring it.
- Also, that little blue box that indicates the window position when you move or resize a window is now placed in the center of the desktop, instead of in the uppermost lefthand corner.

This is nice because if you have a virtual desktop larger than your viewable screen area, you may reposition windows and not be able to see the geometry indicator. Normally, this is OK, but if you're trying to arrange a desktop and need to know the exact position of the window, you'll appreciate the fact that the indicator is now within easy viewing in the middle of your screen.

Again, another 2¢ tip! :-)

## Product Testimonial: XFMail for Sendmail-less mail!

Well, for all of you who've read last month's Gazette about a sendmail-less email setup for standalone boxes...

There's rejoicing!!

I received the following message from Roman Mitnitski:

> From: Roman Mitnitski <mitnits@shani.net>
> To: fisk@web.tenn.com
> Subject: New application for your toy list
> I beleive you should add this mail-reader to your
> Linux Toys list. It's a way-cool, nice-looking, very functional
> X11 based pop3-capable mail reader.
> Get it from
> http://Burka.NetVision.net.il/xfmail/xfmail.html

And he wasn't kidding!

I've been using this now for the last couple weeks and for everyone that has gotten the willies from even the thought of having to set up sendmail simply for a standalone system...

Take heart... help is here!

For anyone that has simple email needs, and by that I mean that you're running Linux on a standalone system or small LAN with access to a POP mail server, you have to give this thing a whirl! It is really awesome!

The XFMail program is based upon the Xforms widgets -- a set of freely available widgets designed to make X application development faster and less complicated. You'll need to install the XForm libs before you can set up XFMail. Still, the end result is VERY much worth it!

Since this month's Gazette is getting a bit large now, I won't go into the steps required to install and compile the XForms libs and the XFMail program. I found that on a stock Slackware 2.2.0 setup with GCC 2.6.3 and XFree86 3.1.1, that everything compiled pretty much without a hitch (you will, however, have to edit the Makefile for XFMail and indicate where the XForms libs were installed, since the default locations were different than where XForms actually installed itself).

This is admittedly still Beta software, and so the old warning that BETA == BUGS still holds. Still, I've found that this software has been pretty stable, VERY easy to configure and use, and has been kind to my mail... that is, it's managed NOT to eat any of it yet... :-)

The list of features really is quite impressive and includes:

- retieving mail from POP3 server or local spool file
- batch SMTP send
- queued mail
- MH-style mail folders
- ability to manipulate messages: view, edit, delete, move to another folder, save as draft, forward, bounce, reply to, search, and so forth
- MANY, MANY configuration options available via easy to use GUI menu

It does have a few drawbacks, however:

- there is no support for MIME messages as of yet
- spell-checking is not implemented yet
- the default editor is VERY small and can handle only about 30 lines; it can be configured to use an external editor for viewing and editing large messages (and this function seems to work well)
- individual mail folders are limited to around 400 or so messages
- it is a bit of a resource consumer ;-) and you'll notice that the pointer movements over the menus are quite shaky.

Still, you need to check this thing out. And if you've been jealous of your Win31-touting buddies because they're running Eudora... well, your time has come. Give this great program a shot!

Let me know if any of you have trouble getting it installed. Seriously. I probably can't fix it for you, but I'd be happy to describe how I got this set up on my system.

Just do it.

You'll be happy that you did!

## Colophon

Colophon: [from the Gk. kolophon summit, finishing touch] an inscription placed at the end of a book or manuscript usu. with facts relative to its production.

I have unabashedly stolen this concept from the great folks at O'Reilly publishing. If you've ever read one of their great nutshell series books you'll likely find a small colophon at the end of the book. If you're looking for truly well written and well researched material on UNIX, these are the guys to go to.

Anyway, I just wanted to wrap up with a few comments and closing thoughts.

I've had a huge amount of fun writing this. I really have.

Doing the reading and tinkering necessary to write this up has been a truly educational experience. I am FAR from achieving gurudom in any of this... you can easily find most all of what I've written about in the README's and manpages (although, maybe not in as lucid a fashion... ;-)

Since I'm trying to keep these at between 70k and 80k in size, I wasn't able to include a third of what I'd hoped to get in. So what's still to come...? Much more FVWM and X stuff including:

- Colors, Colors, Colors!
- Fonts, Paths, and Icons
- The Power of Styles
- The Incredibly configurable XTerm
- Adding programs to your GoodStuff button bar
- The power of GoodStuff!
- Six Must-Have Configuration Utilities
- Efficient FVWM Desktop Layout
- X Resources at your fingertips!
- and anything else I can think of... :-)

And I still haven't forgotten about writing up fly8! It's one of the nicest flight sim's I've seen (take this with a grain of salt... I'm NO gamer...). I'd also like to write about a few of the networking apps I've used and found VERY helpful.

In the long term... who knows?

There's a HUGE amount of stuff to write about the whole topic of shell scripting, which, if you haven't tried it yet, opens up some truly powerful features to you. FORGET what you've learned about the anemic and infantile MSDOG batch file setups, Linux offers some impressively powerful tools in the form of shell scripting.

Let me also commend a couple Web sites to you:

T. Kelly's FVWM home page
  This is a VERY nice page with LOTS of great information about the FVWM window manager. You'll find links to all sorts of resources as well as docs and manpages for the various components of fvwm. If you're interested in getting the most out of fvwm, you'll have to give this place a looking at.
The XFMail home page
  Once again, you need to give this thing a looking over. Not only does the homepage give you information and screen shots about the app, but you'll also be able to jump to the homepage for the XForms stuff as well.
The XEmacs FTP site at UIUC
  I've just installed the Xemacs package from the folks at UIUC. I've been reading about this for some time now and finally got online long enough to ftp this monster. It'll chew up about 3 hours or so of ftp time if you're connected at 14.4... Still, I've only started playing around with it in the past couple days, but it really is a much nicer appearing emacs editor. If you've got the time, give this a try.
The Wizard's LinuX Page
  Looking for Linux resources...? Then you've GOT to check this guy's page out! This guy is one serious URL packrat and there's goobs of links to Linux stuff all over! If you're in one of those "cruisin' for Linux stuff..." type moods, kick back with a Coke and bag 'o chips and launch out from here...

Finally, let me put a plug in for another LINUX Web Author...Scott Dowdle

I recieved this letter from Scott a little while ago...

    Date: Sat, 02 Sep 1995 16:53:23 CDT
    From: Phil <burtonp@initco.net>
    To: <fisk@web.tenn.com>
    Subject: Silicon Times Reports?

    Hello,

    This is Scott Dowdle in Great Falls, Montana... and I'm a fellow Linux
    user.  I'm "hooked" too.

    It just so happens that I've gotten myself involved with a digital
    magazine that has been around for over 8 years... called Silicon Times
    Report, or STReport or STR for short.  STR has allowed me to start
    writing a Linux column...

    [snip]

    and he offered to let me start a Linux column.
    Check out STR at http://www.streport.com

    Hope to hear from you ASAP, Scott Dowdle - Great Falls, Montana

Scott basically began writing a column for the Silicon Times Report a little while ago after writing the editor and complaining that the ezine was WAY too Microsoft oriented. In response, the guy offered to let him write an article about LINUX!

So, go take a look! You'll probably need to do this with a Windows (ugghhh...) box, since I believe that the STR uses the Adobe Acrobat reader which you can ftp from STR. Scott sent a clipping of one of his recent articles and I'd very much recommend your supporting him. Drop him a note!

And finally, I wanted to say once again that I REALLY do appreciate folks writing and offering ideas and suggestions as well as the encouragement that a number of you have offered. Each issue takes on the order of 20 hours or so of writing and research to flesh out. It's definitely enjoyable and I'll admit to being a bit loquacious at times... but I appreciate the encouragement and I'm always glad to hear that someone's found something useful here.

Also, I apologize to anyone whom I promised to include something they sent and it didn't make it in this issue. The 'ol home system underwent a somewhat rocky upgrade here recently and a few things got mislaid. Be patient, I'll eventually get this act together... :-)

Anyway, hope you've enjoyed!

Cheers!
John

(Post-colophon... Sunday, 24 Sept 1995, I just got a note from the publisher of the Linux Journal with a correction: their phone number is (206) 782-7733. This is the number you'll want to call to order this excellent journal. The previous number, (206) 782-7191, is their FAX number. I as also informed that they're in the midst of putting previous articles online, so they will soon become browseable. I'll be adding links to these in the upcoming editions of the Gazette, but wanted to get the word out about these very worthy offerings. -John

#### "The Linux Gazette...making Linux just a little more fun...!"

#### Got any great ideas for improvements! Send your comments, criticisms, suggestions, and ideas.

Back up to Linux HomeBoy WebPage
This page written and maintained by: