Book HomeRunning LinuxSearch this book

11.2. The fvwm Window Manager

Your choice of window manager determines, to a large extent, the look and feel of your X environment. Many window managers also provide menus, which allow you to start other X applications using the mouse, and a virtual desktop, which increases your overall desktop space considerably.

fvwm is a virtual desktop window manager used by many Linux users. It is based partially on the code for twm, a classic window manager included with the MIT X11 distribution. However, fvwm has been trimmed down and requires about half the memory used by twm--welcome news for Linux systems with 8 MB or less of physical RAM. fvwm provides many features not available in other window managers, and for this reason (as well as the fact it was developed specifically for Linux), we are covering it here.

Unlike twm and some other window managers, fvwm undergoes constant development. This means that some of the features described here may not be present in the same form in newer versions of the software. Refer to the manual page for fvwm to verify that the features presented here are available. We will cover Version 2 of fvwm here.

Among the features offered by fvwm are:

  • A simple virtual desktop, which provides a pager (an overall birds-eye view of the desktop) and automatic desktop scrolling when the pointer reaches the screen boundary.

  • A keyboard equivalent for almost every mouse-based feature; this is helpful when using X on laptops without a mouse or trackball, or for people with RSI or other physical problems making use of the mouse difficult.

  • Support for color icons using the XPM libraries.

  • A programming interface for extensions, allowing you to add new features to fvwm. One extension included in the fvwm distribution is a button box that stays put on your root window. You can bind commands to each button, allowing you to point and click to start applications.

  • Fully configurable desktop menus, which appear when you press the mouse buttons.

  • A Motif-like 3D look and feel for window frames. In fact, fvwm includes options to make it compatible with the Motif window manager (mwm).

Among the most powerful fvwm features is the virtual desktop, which allows you to place windows on an area much larger than the actual size of the visible display. Using the mouse, you can switch (page) between areas of the virtual desktop. For example, when you move the mouse pointer to the right edge of the display, the desktop will shift a screen to the left, bringing new windows into view. This way you can place windows across an area larger than your screen, viewing only a portion of the virtual desktop at one time.

A sample desktop using fvwm was shown in Figure 11-1 in the section "Section 11.1.1, "xinit"." Each window is given a decorative frame, provided by fvwm, with configurable titlebar buttons. Later in this section, we'll describe how to customize these to your liking.

The pager, in the top-right corner of the display, gives a bird's-eye view of the entire virtual desktop. The pager can also move windows around the virtual desktop and select the portion of the desktop currently in view.

11.2.1. Configuring fvwm

In order to customize fvwm, you'll need to create a configuration file, .fvwm2rc, in your home directory. In this section, we're going to present a number of features of fvwm and describe how to enable them from .fvwm2rc.

We must warn you that the syntax of some of the options has changed between different versions of fvwm; check them against the manual page if you have problems. You may wish to use the system default .fvwm2rc file (usually found in /usr/lib/X11/fvwm2/system.fvwmrc) as a starting point.

The most basic fvwm customizations deal with colors and fonts used for window frames and menus. For example, you might include the following in your .fvwm2rc:

# Set up colors
Style "*"               Color White/Midnightblue
HilightColor            White Red
WindowFont              -adobe-helvetica-bold-r-normal-*-*-120-*

Some commands depend on which window has the focus, which means that it is receiving input. (Normally you just click with the mouse in a window to make it the one in focus.) Unfocused windows, menus, and the pager use the color that has been set with Style "*" Color, while the window with the focus uses the color that was set with HilightColor. The foreground color is generally used for text (in the window title, and so forth) and the background is used for the window frame itself. Be artistic! WindowFont names the font used by window titlebars. Note that none of these options sets the colors used inside windows, because these are controlled by the application (client). The options apply only to window frames and menus, because those are managed by fvwm.

To get a list of all the colors defined on your system, enter the command:

eggplant$ showrgb | more

Most fvwm users also make use of the virtual desktop. In order to configure it, you should include lines such as the following in .fvwm2rc:

# Configure virtual desktop
DeskTopSize   3x3
AddToFunc     InitFunction "I" Module FvwmPager 0 0
Style         "FvwmPager" Sticky, NoTitle, WindowListSkip
*FvwmPagerGeometry -10 -10
EdgeScroll    100 100
We want the size of the desktop (DeskTopSize) to be three screens wide by three screens high. The line starting with AddToFunc says that when starting fvwm, the pager should be started, too. The Style line determines that the pager is to be shown in each virtual desktop (Sticky), that it should not have a window titlebar (NoTitle), and that it should not be shown in the window list (WindowListSkip). In addition, we place the pager in the bottom right corner of the screen. The pager window provides a view onto the full virtual desktop; clicking with the mouse in the pager window makes the corresponding part of the desktop visible on the screen. In Version 1 of fvwm, the pager was a fixed part of the window manager, but Version 2 makes the pager a module of its own. That's also why the pager is no longer configured via fvwm options like Pager as in earlier versions, but via the settings for the module FvwmPager. A module is an add-on to the window manager that cannot run standalone. Frequently used modules, like the pager, are shipped with fvwm2.

EdgeScroll specifies the percentage by which the desktop should scroll when the pointer reaches the edge of the screen. Using EdgeScroll 100 100 causes the desktop to shift by an entire screen when we move the mouse cursor to the edge; this gives the appearance of switching from one screen to an entirely different one. This way you can place windows across the entire virtual desktop and wander around the desktop using only the mouse.

The Style command sets a whole slew of attributes for windows on your screen. For instance, to specify that the xbiff always stays on top of other windows on the display, use the command:

Style "XBiff" StaysOnTop

Now, no other window is allowed to obscure xbiff. Besides StaysOnTop, other popular options to Style include:

NoTitle

Prevents a window from having a decorative title on the top with its name. This option is often used for small windows like xclock and xbiff, especially if you don't expect to move or resize them.

NoBorder

Prevents a window from having a border.

Sticky

Makes a window stay in the same place on the screen when you shift the virtual desktop.

BoundaryWidth

Sets the width in pixels of frames placed around windows by fvwm. The default used by fvwm is six pixels, which is quite wide.

Arguments to Style may be window titles or application-class names. Older versions of fvwm don't have the Style command. Instead, they offer a variety of commands named StaysOnTop, NoTitle, and so on. You use them like this:

StaysOnTop XBiff

There are various .fvwm2rc commands dealing with icons. As with other window managers, fvwm allows you to iconify a window; this replaces the window with a small icon containing the name of the window and possibly a picture depicting the type of window. fvwm supports both bitmaps and color pixmaps for icons. A bitmap allows only one bit for each pixel it displays and therefore is limited to one background and one foreground color (although you can get a mixture or gray by alternating pixels, a process called dithering). A pixmap, on the other hand, has several bits per pixel and can therefore support a large number of colors:

IconFont    -adobe-helvetica-medium-r-*-*-*-120-*
IconPath    /usr/include/X11/bitmaps/:/usr/include/X11/xfm/bitmaps
PixmapPath  /usr/include/X11/pixmaps/:/usr/include/X11/xfm/pixmaps

Style IconBox     700 0 1080 50
Style "*" Icon unknown.xpm
Style "XTerm" Icon xterm.xpm
Style "Emacs" Icon emacs.xpm
IconFont specifies the font to use for icons. IconPath and PixmapPath specify colon-separated pathnames where icon images can be found; if you keep images in several directories, separate their pathnames with colons. IconPath specifies locations for bitmaps (XBM), and PixmapPath specifies locations for color pixmaps (XPM).

Style IconBox defines a region of the screen where icons should be placed. You can specify more than one IconBox: up to four, if you wish. In this case, icons should be placed in an invisible box defined by the top-left corner at location (700,0) and bottom-right corner at (1080,50).

Following Style IconBox are several Style commands that bind icon images to windows. In this case, we want all XTerm windows to use xterm.xpm, and Emacs to use emacs.xpm. The name of the icon file can either be a full pathname, or a pathname relative to either IconPath or PixmapPath. The command:

Style "*" Icon unknown.xpm

sets the default icon to unknown.xpm.

If your fvwm does not support the Style command, use commands such as:

Icon "" unknown.xpm
Icon "XTerm" xterm.xpm
Icon "Emacs" emacs.xpm

11.2.2. More Customizations

Most fvwm users include at least the previous options in the .fvwm2rc file. However, fvwm also provides the ability to configure the desktop menus, functions executed by the window titlebar buttons, and so on. Here, we'll introduce several of those features.

First, let's configure fvwm pop-up menus, which appear when pressing the mouse buttons on the root window. You can use these menus to execute commands, manipulate windows, and so on. Note that some distributions, like Debian and SuSE, can automatically update your window manager menus with the installed packages on the system:

AddToMenu xclients "Xclients" Title
+ "Netscape"	Exec netscape
+ "xterm"		Exec xterm
+ "emacs"		Exec emacs -w
+ ""			Nop
+ "eggplant"    Exec xterm -e rlogin eggplant &
+ "papaya"      Exec xterm -e rlogin papaya &
+ ""			Nop
+ "screensaver" Exec xscreensaver-command -activate &
+ "xcalc"       Exec xcalc &
+ "xman"        Exec xman &
+ "xlock"       Exec xlock -mode rotor &
EndPopup
The menu is defined with the command AddToMenu. There is no command for terminating a menu definition; the menu entries do not even have to be on subsequent lines. Each menu gets a name with which it can be referenced later (in this case xclients).

The format of the menu is relatively self-explanatory. The title is already set in the AddToMenu line; Nop causes a separator line to appear in the menu. The Exec function causes a command to be executed when the menu item is chosen; the arguments to Exec determine which command is executed. The leftmost argument of each command line is the name of the item as it appears in the menu (such as "Netscape"); the remaining arguments specify the command to be executed.

We define a second menu, fvwm, which uses the fvwm window-manipulation functions:

AddToMenu fvwm "Window Ops" Title
+ "Move Window"		Move
+ "Resize Window" 	Resize
+ "Raise Window" 	Raise
+ "Lower Window" 	Lower
+ "Iconify Window" 	Iconify
+ "Stick Window" 	Stick
+ ""				Nop
+ "Xclients"  		Popup Xclients
+ ""				Nop
+ "Destroy Window"  Destroy
+ "Delete Window"   Delete
+ ""                Nop
+ "Load Xdefaults"  Exec xrdb -load $HOME/.Xdefaults
+ "Restart Fvwm"    Restart fvwm2
+ "Start twm"       Restart twm
+ "Quit Fvwm"
EndPopup
Each of the built-in functions Move, Resize, Lower, and so on are described in the fvwm2 manual page. One function of note is Popup, which allows a previously defined pop-up menu to be used as a submenu of the current menu. Here, we include the xclients menu defined as a submenu.

Also included here are commands for restarting fvwm or starting another window manager (twm) in place of fvwm.

fvwm also allows you to modify the function of the mouse buttons in various contexts. The Mouse command is used for this, and takes the form:

Mouse button context modifiers function
button is 1, 2, 3, or 0 (where 0 means "any button"). context specifies the region in which the mouse binding takes effect; context may be:

  • R for the root window

  • W for an application window

  • S for a window frame

  • F for a window frame corner

  • T for a window titlebar

  • I for an icon window

  • A digit from 0-9, specifying a particular titlebar button (described later)

  • A for any context (except titlebar buttons)

  • Any combination of these

For example, a context of TSIF specifies window titlebars, frames, and frame corners, as well as icon windows.

Using a digit from 0 through 9 in context binds the function to a window titlebar button. By default, there are two such buttons--one on the left edge of the titlebar, and one on the right. Binding mouse functions to other buttons causes them to be visible. Left titlebar buttons are given odd numbers (1, 3, 5, 7, and 9), and right titlebar buttons are given even numbers (2, 4, 6, 8, 0). Figure 11-2 shows a window with all buttons visible, with their corresponding numbers. Unless you bind mouse functions to each button, most of them will be invisible.

Figure 11-2

Figure 11-2. Buttons on fvwm titlebar

modifiers specifies various key combinations to be used in conjunction with a mouse-button click. Valid modifiers are C for control, M for meta, S for shift, N for none, or A for any of the above. For example, setting modifiers to C means that the Control key must be pressed while the mouse button is clicked.

Here are some examples of mouse bindings:

# Button        Context Modifi  Function
Mouse 1         R       N       PopUp "Fvwm"
Mouse 2         R       N       PopUp "Xclients"
Mouse 3         R       N       WindowList
These lines bind each mouse button to one of the pop-up menus fvwm or xclients, defined previously, or the WindowList command, which is a pop-up menu containing entries for each window on the display:
# Window titlebar buttons
Mouse 1         1       N       Popup "Fvwm"
Mouse 1         3       N       Iconify
Mouse 1         4       N       Destroy
Mouse 1         2       N       Resize
Here we bind titlebar buttons 1, 3, 4, and 2 (two buttons on each side of the titlebar) to various functions. The left-most titlebar button pops up the fvwm menu, the second-left button iconifies the window, and so on. The fvwm2 manual page lists all the available functions, such as Resize, Move, and RaiseLower.

You can also specify key bindings with the Key command. They are similar in syntax to mouse bindings:

Key key context modifiers function
with context and modifiers having the meanings given earlier. Here are some examples:
Key Up          A       C       Scroll +0   -100
Key Down        A       C       Scroll +0   +100
Key Left        A       C       Scroll -100 0
Key Right       A       C       Scroll +100 +0
These bindings cause Ctrl-arrowkey to scroll the desktop by a full page in the given direction. You can bind any key to an fvwm function in this way; for instance, the function keys are named F1, F2, and so on.

Read the fvwm2 manual page. As new versions are released, the syntax of the configuration file changes slightly, and new features are added periodically.



Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.