The Fabulous FVWM Window Manager for Linux
If you have never tried FVWM as your Linux window manager, I urge you to
give it a chance. If you do, you'll likely at first be baffled at what to do
next, then frustrated at the mounds of documentation that seem to always
miss the point, but then -- perhaps -- enormously pleased at the control
you have over your environment.
According to Wikipedia on FVWM, the F in FVWM doesn't stand for anything, but the VWM stands for
Virtual Window Manager. FVWM is a light weight window manager that
despite its meager resource requirements, provides an incredible amount
of utility. A rather complete list of features can be found at
fvwm.org. However, I'll list a few of
the features here that I think make FVWM stand out from its competition at the
light weight end of the window manager spectrum.
Some features of FVWM that I found handy and easy to set up:
Ability to load background images using any of a number of utilities. I
Ability to have a task button bar -- in any screen location, vertical
or horizontal, one row (column) or more. Most light weight managers have
no direct support for icon buttons. For them the feature must be added with some
In Debian Linux, ability to have a menu category that automatically tracks
all loaded (or removed) programs.
Ability to allow custom shortcut keys for screen controls and even
Ability to allow custom mouse control of window functions.
In Debian Linux, installing FVWM is as easy as doing the following
command as root:
Then either edit your .xinitrc file to run FVWM on the next
startup, or logout of your current window manager and select FVWM for
your next login.
That first login, by the way, may look pretty disappointing. In my
Debian it was just a black gray screen. But a left-mouse click brought up
a menu, and one item was click to build a win95 style setup. I clicked that,
answered a couple of questions (defaulted most), and then FVWM restarted with
a vertical icon button bar along the right side of the screen. From there
I started making a few edits to get to the style I wanted.
What you see above is a screen shot of a typical, easy to obtain, FVWM
screen layout. Click on the image for a full display.
The background image on the screen, by the way, is a photo I took of the
Plato region of the moon. You can see that and more of my lunar photos at Six Inch Newtonian Moon
I think a number of things should be pointed out here that I've not seen
in other reviews.
For example, above is a section of the task button bar and task panel
that in my configuration appear at the bottom of the screen. I use the
fvwm95 variation of FVWM, which is only a set of normal FVWM commands that
configure FVWM to resemble a Windows layout.
For example, the task panel at the very bottom shows a Start button
which brings up a menu of tasks one can run, configuration options one can
modify, and FVWM configuration files one can edit. A left-mouse click anywhere
in the root screen brings up a similar menu.
The bottom task panel also shows all user tasks currently running, and a
click on a panel task label will bring the user to that task.
In addition, notice the task buttons just above the task panel.
Particularly notice the 4th one from the left. As you can see, it is
actually two buttons in one. This trick is an easy configuration option,
and as many mini-buttons as you might wish can be packed within the size
of a normal button. I might point out that the default installation has
gray buttons, but as you can see, more colorful buttons can easily be
Not so obvious is the www button on the task button bar. On my
Debian linux system that button launches seamonkey on a left-mouse
button click. But the button is more than it seems. With a right-mouse
click it will launch iceweasel, and with a middle-mouse click it
will launch opera. Any or all buttons can be configured to launch
different applications with different mouse buttons.
This is another full size view of the right end of my task button panel.
It shows the FVWM Virtual Desktop panel. As you can see, it shows 4
virtual desktops, and gives a visual depiction of what's running on each one.
Four desktops is just the default. You can have as many as you like. You
might also notice the digital clock on the task panel.
One can left-mouse click on any of the squares in the Virtual Desktop panel
to go immediately to that desktop. Or, one can middle-mouse click on
a task in a virtual desktop and drag that task to another desktop. I find
the ability to see at a glance what's going on in those desktops, and easily
navigate to any one of them to be quite useful.
Adding Your Own Buttons To The Button Bar
Note, if you use the Debian Linux system, you may have to manually edit
the .fvwm/menus command as described later in this page to get the
menu edit commands to work.
The default install of FVWM will have a few buttons already in the button
bar. In the fvwm95 option that I chose, the default buttons were in two
columns on the right side of the page.
I wanted to remove some of the default buttons and add some of my own.
But first, I wanted to have a horizontal button bar instead of a vertical one.
The buttons are stored in a file called modules, and it can be
reached from the edit menu as shown near the end of this page. All the
setup files can also be accessed directly in your home directory's
Near the top of the modules file are parameters that set the location
and orientation of the button bar. The initial ones were:
*BarButtons: Geometry -0+5|
# Layout: specify rows or columns, not both
*BarButtons: Columns 2
The Geometry statement placed the vertical buttons 0 pixels offset from the
right side of the screen (-0) and 5 pixels from the top of the screen. As you
can see it created a 2 column button arrangement.
To get a one row set of buttons at the bottom of the screen, I made the
following changes, using the sharp symbol to comment out the original
#*BarButtons: Geometry -0+5|
*BarButtons: Geometry +0-30
# Layout: specify rows or columns, not both
#*BarButtons: Columns 2
*BarButtons: Rows 2
It may look like I specified 2 rows, but the button dimensions, as you'll see later, are actually 1x2, so I had to list the rows as 2 to accommodate the
height of 1 button. The Geometry parameter set my new row of buttons at
0 pixels offset from the left side of the screen and 30 pixels up from the
bottom of the screen (to clear the task panel).
The above image, as shown previously, is the leftmost buttons in my button
bar. The following parameters in the modules file define the
terminal button, the dual MC and Thunar button,
and the www button:
*BarButtons: (1x2, Title terminal, Icon rterm2.xpm, Action 'Exec exec xterm')|
*BarButtons: (1x2, Padding 0 0, Container(Padding 0 0, Frame 2, Columns 1))
*BarButtons: (1x2, Title MC, Icon mini.filemgr.xpm, Action 'Exec exec /home/bat/runMc')
*BarButtons: (1x2, Title Thunar, Icon mini.filemgr.xpm, Action 'Exec exec thunar')
*BarButtons: (1x2, Title www, Icon seamonkey.png, Action 'Exec exec /usr/local/seamonkey/seamonkey', \
Action (mouse 2) 'Exec exec opera', \
Action (mouse 3) 'Exec exec iceweasel')
Most button entries in the modules file look like the terminal parameter
line. It's pretty simple, starting with the *BarButtons keyword, followed
by the button geometry, title, icon, and action to complete if clicked. I
usually just duplicate an existing button line and change the appropriate parts
to indicate my new button. Buttons show up on the button bar in the order they
are listed in the modules file. I seldom delete buttons, I just comment them
out with the sharp symbol. That way I can refer them for guidance later.
The dual button starts with a Container command, defining the
number of rows (frames) and columns in the button sized container. Then
follows the same nomenclature for the regular button commands to add the
button labels, icons, and actions. The container is closed with the
Then next parameter defines a button to launch seamonkey, but notice
the comma backslash at the end of the line instead of a closing parenthesis.
That's used to allow continuation of the button's definition. The following two
lines add an opera action for the middle-click of the mouse (mouse 2)
and an iceweasel action for right-click of the mouse (mouse 3).
That's about all I know about buttons, and I got that from just looking
at the default modules file parameters. I'm sure you can easily do
Some Simple Keyboard and Mouse Augmentations
One reason I've settled on FVWM as my main window manager is that it had
a default configuration that was already very close to what I wanted. The
key and mouse controls of the windows are very handy, the task panel is
very useful, and I wanted a light system, but one that I could have some
icons for launching commonly used applications.
But there were some things I wanted in addition. For example, I do a
lot of work at the keyboard, and there are some things I really accomplish
without reaching for the mouse. One thing is moving between virtual desktops.
The default configuration of FVWM already gives a way to do that. Holding
down the shift key while using the cursor keys will move you
left and right or up and down between virtual desktops. But I wanted something
more direct, yet with easy to reach keys.
The key and mouse commands are all in a file called bindings
(also in your home directory's .fvwm directory). By
editing that file, you can add more functions, or adjust ones that already
exist. The following lines are what I added to let me go directly to any
of the 4 virtual desktops with just an alt key and a number key: 1, 2,
3, or 4 for virtual desktop 1, 2, 3, or 4.
Key 1 A M Gotopage 0 0 |
Key 2 A M Gotopage 1 0
Key 3 A M Gotopage 0 1
Key 4 A M Gotopage 1 1
I also like to simply do an Alt-x to launch an xterm. To do that,
I added the following line to the bindings file:
Key x A M Exec exec xterm -sb|
For a time I was using Window Maker, another very handy light weight
window manager. It had a feature I got very used to, and that was the ability
to simply roll the mouse scroll wheel when positioned somewhere in the root
window, and have this move me through the virtual desktops. Can FVWM do that?
You betcha! The following entries in the bindings file turned on that
Mouse 5 R A Scroll -100000 0|
Mouse 4 R A Scroll 100000 0
For one final example, I wanted to be able to move through the windows
on my current virtual desktop with the Alt-n sequence (for next
window) and Alt-p for the previous window. The following entries
added those features:
Key n A M Next [CurrentPage] Focus|
Key p A M Prev [CurrentPage] Focus
These are just examples. You may want the same features but using different
keys. By looking at these examples and others in the bindings file, hopefully
you can tune FVWM to your liking without getting too bogged down. Be sure
to check out the documentation on fvwm.org
for information on all the FVWM commands.
How do you quickly try out your fixes? Just left click anywhere in the root
screen to bring up the menu illustraged above. Then, click on the
Restart selection. This will cause FVWM to re-read it's config files,
taking into account your new bindings.
By the way, you can edit the menus file and add entries of your own.
I happen to use the Debian Linux distribution. In Debian Linux, the
Programs menu selection lists all of the installed user programs. As one
installs others (with apt-get, aptitude, whatever), they're automatically be
listed after a Restart. Of course, removed ones will also be removed
from the menu.
Alas -- There are a couple of problems with Debian menus, in at least the
Etch and Lenny distributions. One is that the Programs selection
initially doesn't work right. The reason is that the menus file is supposed to
refer to a file kept up to date by the package management system, but the
FVWM install default menu refers to the wrong file.
It's easily fixed. Look for the menu file name in /etc/X11/fvwm, and
make sure that the .fvwm/menus file in your home directory refers to
that file. Do a Restart and things should work fine. Be sure to fix
every reference to the Debian updated menu file in menus, there's more
than one. In my system, the file in /etc/X11/fvwm is menudefs.hook
Another potential problem with the fvwm menu in the Debian Etch and Lenny
distributions is with this sub menu, obtained by selecting settings on
the main menu, then edit .fvwm2rc on the subsequent sub menu. That will
bring you to this sub menu. It's supposed to let you easily select and edit any
of the common FVWM configuration files.
Depending upon what you selected when you did the win95 setup, it might
or might not. The key is which editor you selected on the win95
setup menu. Pick one that is installed, and opens up it's own window. I
mistakenly selected vim as my editor, and later the edit menus
But the reason was simple. If you look into the .fvwm/menus file,
you'll find a section that's designed to launch your selected editor on any of
the configuration files selected. But vim doesn't open a new window, it works
in an existing window -- thus, nothing happened when I clicked to edit a
configuration file. I easily repair that menus file section by replacing
each vim with gvim. Something to keep in mind if you decide
to later change which editor is used by the menus.
This little review and tutorial is by no means exhaustive. By learning
all the intricacies of the many FVWM menu parameters, you can make your
window manager look any way you wish, and do anything you want. The things
presented here are just the few that I found useful in tweaking FVWM
more to my liking. Hopefully they will give you a head start should you
decide to FVWM a look.