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. Buttons on fvwm titlebarmodifiers 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.
 |  |  | | 11. Customizing Your X Environment |  | 11.3. The K Desktop Environment |
Copyright © 2001 O'Reilly & Associates. All rights reserved.
|