Linux Goodies

In Pursuit Of The Perfect O/S



FVWM -- A Lightweight, Immensely Tunable Window Manager

Amazon Computers

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 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 use fbsetbg.

  • 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 additional utility.

  • 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 launching programs.

  • Ability to allow custom mouse control of window functions.

  • In Debian Linux, installing FVWM is as easy as doing the following command as root:

    apt-get fvwm

    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.

    FVWM Screen Shot

    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 Photos.

    I think a number of things should be pointed out here that I've not seen in other reviews.

    FVWM task buttons

    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 created.

    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.

    FVWM Virtual Desktops

    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 .fvwm directory.

    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 parameter lines:

    #*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).

    FVWM buttons

    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: (End)
    *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 (End) command.

    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 the same.

    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 feature:

    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 for information on all the FVWM commands.

    FVWM Menu

    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

    FVWM Edit Menu

    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 wouldn't work.

    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.