home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / XWindow-User-HOWTO < prev   
Text File  |  1999-02-08  |  90KB  |  2,179 lines

  1.   The X Window User HOWTO
  2.   by Ray Brigleb, rayola@mindless.com
  3.   v1.3, 22 January 1999
  4.  
  5.   This document contains information on configuring the X Window envi¡
  6.   ronment for the Linux user, as well as for the beginning system admin¡
  7.   istrator attempting to sort through the many configuration options and
  8.   details of X Window. A basic knowledge of software configuration and
  9.   installation is assumed, as is the presence of X on the users system.
  10.   ______________________________________________________________________
  11.  
  12.   Table of Contents
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Introduction
  68.  
  69.      1.1 Other Sources Of Information
  70.      1.2 Versions Of This Document
  71.      1.3 Feedback And Corrections
  72.      1.4 Acknowledgments
  73.      1.5 Copyright
  74.  
  75.   2. Getting Started
  76.  
  77.      2.1 The X Window System: History and Architecture
  78.      2.2 Anatomy of Your Desktop
  79.      2.3 Invoking X Window
  80.      2.4 The X Display Manager
  81.  
  82.   3. Choosing a Window Manager
  83.  
  84.      3.1 FVWM And Its Ancestors
  85.      3.2 The Wide World of Window Systems
  86.      3.3 The X Graphical Interfaces
  87.      3.4 The X Desktop Environments
  88.      3.5 The Flashy Window Managers
  89.  
  90.   4. Working In X
  91.  
  92.      4.1 Command Line Options
  93.      4.2 Display Names
  94.      4.3 XTerm Versus Rxvt, or, Know Thy Terminal Emulator
  95.  
  96.   5. X Startup
  97.  
  98.      5.1 A Sample Starting Configuration
  99.      5.2 A More Intelligent Startup
  100.      5.3 Getting The Windows Where You Want Them
  101.  
  102.   6. Configuring the Window Manager
  103.  
  104.      6.1 Basic FVWM2 Configuration
  105.      6.2 Advanced FVWM2 Configuration
  106.      6.3 FVWM2 Configuration Shortcuts
  107.      6.4 FVWM2 Themes
  108.  
  109.   7. Fonts and Colors
  110.  
  111.      7.1 Fonts Demystified
  112.      7.2 Font Aliases and Configuration
  113.      7.3 Using Type 1 Fonts in X
  114.      7.4 Using TrueType Fonts in X
  115.      7.5 Colors
  116.  
  117.   8. The X Resources
  118.  
  119.      8.1 X Resources: The Basics
  120.      8.2 Inside The X Resource Database With
  121.      8.3 The Anatomy of X Resources
  122.      8.4 Making Your Changes Last With
  123.      8.5 Your Own User Resource Directory
  124.  
  125.   9. Clients and Application Tips
  126.  
  127.      9.1 Screen Savers for X
  128.      9.2 Emacs and XEmacs
  129.      9.3 Some Useful Programs and Tricks
  130.      9.4 Libraries and Compiling X Applications
  131.      9.5 Basic X Security
  132.  
  133.   10. Bibliography and Other Resources
  134.  
  135.  
  136.  
  137.   ______________________________________________________________________
  138.  
  139.   1.  Introduction
  140.  
  141.   The X Window System is an advanced, network transparent, windowing,
  142.   graphical environment, developed at the Massachusetts Institute of
  143.   Technology, and first released in 1984. This document assumes that you
  144.   have installed X and it is functional. We intend to learn how to use X
  145.   productively, not so much how to compile the programs; most Linux
  146.   distributions come with X as an option during installation, compiled
  147.   and ready to go.
  148.  
  149.  
  150.   1.1.  Other Sources Of Information
  151.  
  152.   If you are just starting out, you may find the XFree86 HOWTO and
  153.   XFree86 Video Timings HOWTOs to be more helpful, and you should be
  154.   able to find that in the same place you found this. At the end of the
  155.   document you will also find a Bibliography And Resources section, to
  156.   find even more information. Oh, and don't forget to read the man
  157.   pages.
  158.  
  159.  
  160.   1.2.  Versions Of This Document
  161.  
  162.   New versions of this HOWTO may be periodically posted to
  163.   comp.os.linux.help <news:comp.os.linux.help> They will also be
  164.   uploaded to various Linux WWW and FTP sites, including Linux
  165.   Documentation Project <http://metalab.unc.edu/LDP> web site.  The
  166.   latest version can (almost) always be found at
  167.   <http://www.croftj.net/~ray/howto>.
  168.  
  169.   Changes in version 1.1 include more coverage of rxvt, expanded
  170.   coverage of X Resources, more trivial history of X, corrected
  171.   references to SunSite to point to MetaLab, and instructions on  using
  172.   Type 1 fonts with X.
  173.  
  174.   Changes in version 1.2 include much-requested coverage of using
  175.   TrueType fonts in X, more details about setting up xdm, and a few more
  176.   added resources. There is also a correction to my discussion of screen
  177.   blanking features (thanks to Heinrich Langos for the correction!).
  178.  
  179.   Changes in this version (1.3) include some fixes, info for corrupted
  180.   font paths in some recent distributions, and lots more info about
  181.   basic X security. I've also added some tips about KDE and an e-mail
  182.   address update.
  183.  
  184.  
  185.   1.3.  Feedback And Corrections
  186.  
  187.   If you have questions or comments about this document, please feel
  188.   free to email Ray Brigleb at ray@croftj.net or rayola@mindless.com. I
  189.   readily welcome any suggestions or criticisms. If you find any
  190.   mistakes with this document, please let me know so I can correct them
  191.   in the next revision. If you have information you would like to see in
  192.   future revisions, or you would like to contribute to a future
  193.   revision, drop me a line.  I'm also looking for more resources to add
  194.   to the sections and bibliography.  While we're at it, I'm also looking
  195.   for a job in the Portland, Oregon area...
  196.  
  197.  
  198.  
  199.   1.4.  Acknowledgments
  200.  
  201.   A special thanks to the HOWTO coordinator Tim Bynum for help and
  202.   suggestions, and the XFree86 Group for the man pages and help files
  203.   that come with XFree86.  I really need to thank all of those who have
  204.   written documentation and descriptions of their offerings in the past,
  205.   I have just gleaned a selection of the most relevant items from their
  206.   material for this document. Also, thanks are due to Matt Chapman,
  207.   author of the Window Managers Guide website, and Scott Scriven, for
  208.   the FVWM2 Themes tips and tricks I stole from some of his hacks.
  209.   Thanks are also due to Joe Croft for the Internet service, invaluable
  210.   to the ongoing development of this HOWTO, and Claire Galper, for moral
  211.   support and miscellaneous tips. Last but not least, thanks to the
  212.   whole GNU/Linux community, for everything, and Mr. Stallman, for this
  213.   text editor (and philosophy).
  214.  
  215.  
  216.   1.5.  Copyright
  217.  
  218.   Copyright (c) 1998, 1999 by Ray Brigleb.
  219.  
  220.   Unless otherwise stated, Linux HOWTO documents are copyrighted by
  221.   their respective authors. Linux HOWTO documents may be reproduced and
  222.   distributed in whole or in part, in any medium physical or electronic,
  223.   as long as this copyright notice is retained on all copies. Commercial
  224.   redistribution is allowed and encouraged; however, the author would
  225.   like to be notified of any such distributions.
  226.  
  227.   All translations, derivative works, or aggregate works incorporating
  228.   any Linux HOWTO documents must be covered under this copyright notice.
  229.   That is, you may not produce a derivative work from a HOWTO and impose
  230.   additional restrictions on its distribution. Exceptions to these rules
  231.   may be granted under certain conditions; please contact the Linux
  232.   HOWTO coordinator for more information.
  233.  
  234.   In short, we wish to promote dissemination of this information through
  235.   as many channels as possible. However, we do wish to retain copyright
  236.   on the HOWTO documents, and would very much like to be notified of any
  237.   plans to redistribute the HOWTOs, this one in particular!
  238.  
  239.   Many of the terms mentioned in this document are trade names. Unless
  240.   otherwise stated, all trademarks are property of their respective
  241.   owners.
  242.  
  243.  
  244.   2.  Getting Started
  245.  
  246.  
  247.  
  248.   2.1.  The X Window System: History and Architecture
  249.  
  250.   The X Window System was developed in the Laboratory for Computer
  251.   Science at the Massachusetts Institute of Technology, as part of
  252.   project Athena in cooperation with DEC, and first released in 1984.
  253.   The project lead of the main development was Robert Scheifler, and the
  254.   origins of X owe much debt to the ``W'' Windowing package, developed
  255.   by Paul Asente at Stanford. In September of 1987, MIT issued the first
  256.   release of the X11 that we know and use today. As of X11R2, control
  257.   passed from MIT to the X Consortium, formed in January of 1988.
  258.  
  259.   Many of the ideas that went into X Window also came from research at
  260.   Xerox Corporation's Palo Alto Research Center (PARC), where they were
  261.   working on computers like the Parc and the Star in the late seventies.
  262.   None of these computers made it to market, but when Xerox demonstrated
  263.   a window system custom built to run Smalltalk 80, people were hooked.
  264.   These series of three computers demonstrated the WIMP (Windows, Icons,
  265.   Menus, Pointer) interface so well that it spawned a revolution in
  266.   computing almost overnight. Within a few years many computer users got
  267.   a taste of a windowing system of some kind, and you might say they
  268.   never looked back.
  269.  
  270.   X Window is currently developed and distributed by the X Consortium,
  271.   however, a liberal license permits the existence of free and low-cost
  272.   implementations.  The version of X used on Linux is XFree86. XFree86
  273.   is a collection of X servers for UNIX-like OSs on Intel x86 platforms.
  274.   The work is derived from X386, and much of it is contributed back into
  275.   X11R6 thereafter. We can think of XFree86, for all intents and
  276.   purposes, to be X Window for Linux, unless you have purchased another
  277.   X server.
  278.  
  279.   X Window is built upon a great many toolkits, or libraries. It is
  280.   built upon the X Toolkit Intrinsics and the Athena Widgets. Many
  281.   programs use XView or Motif tools. More still are part of a newer,
  282.   unified windowing and communication system, like GNOME or KDE. If you
  283.   find many of your programs not compiling, or are getting strange and
  284.   inexplicable errors, you may wish to make sure that you have installed
  285.   X correctly, because most of these libraries (with the exception of
  286.   Motif) are free and most likely preinstalled with X on your system.
  287.  
  288.   And remember, it's called X Window, not X Windows!
  289.  
  290.  
  291.   2.2.  Anatomy of Your Desktop
  292.  
  293.   There are a few basic principles and terms you should familiarize
  294.   yourself with to make using X much more straightforward. These terms
  295.   will appear over and over again in the manual pages and help files,
  296.   which it is suggested that you consult whenever necessary.
  297.  
  298.   The screen is your whole ``desktop'', and the words may be used
  299.   interchangeably.  Technically it means the primary video display you
  300.   view X with, and you can have more than one screen, in fact you can
  301.   have more than one computer running off a single X server. This is
  302.   beyond the scope of this humble document, but you should be aware of
  303.   the distinction.
  304.  
  305.   The root window is the background of your screen. It is referred to a
  306.   window in name alone, it does not behave like any other window, but
  307.   rather you run your applications on the root window, or put a picture
  308.   on it, or just a solid color.
  309.  
  310.   The window manager is the main interface between the X Window system
  311.   and the user. Without the window manager, the system would be rather
  312.   difficult to use, and would certainly not be a very productive tool.
  313.   The window manager provides such functionality as window borders,
  314.   menus, icons, virtual desktops, button bars, tool bars, and allows the
  315.   user to customize it at will, often adding to its functionality in the
  316.   process.
  317.  
  318.   The pointer is the arrow or indicator of any given shape which
  319.   represents the location your mouse (or other pointing device)
  320.   corresponds to on the screen.  The pointer often changes to give you
  321.   contextual feedback as to what will happen when you use the mouse at
  322.   that point on the screen.
  323.  
  324.   The window is a frame in which any given application resides which is
  325.   ``managed'' by the window manager. This includes pretty much anything
  326.   except the so-called root window. Even windows which do not appear to
  327.   have frames, titles, or normal borders of any kind are being managed
  328.   by your window manger. The active window is the window you are
  329.   currently using, the window that will receive text when you type, and
  330.   is traditionally denoted by the fact that your mouse cursor is
  331.   pointing at it, though this is not always the case. The active window
  332.   is said to have ``focus,'' the rest of the windows on your display
  333.   being ``unfocused.''
  334.  
  335.   Menus and icons behave in X similar to the way they behave in other
  336.   windowing systems, and the same general principles apply. Windows with
  337.   text only are called terminal emulators, an example would be xterm,
  338.   and these basically emulate a console text-only display, but let you
  339.   multiplex and use more than one at a time, and have many other
  340.   advantages available due to their being used in X. We shall discuss
  341.   many of these later on.
  342.  
  343.  
  344.   2.3.  Invoking X Window
  345.  
  346.   Starting X can be done in several ways. On your system it may be set
  347.   up to start automatically, and you will not need to read this section.
  348.   Most Linux systems, however, presently start at the command line upon
  349.   login, and you have to decipher this for yourself.
  350.  
  351.   The most basic way to start X is with xinit. This will put you at a
  352.   blank desktop, by default, and with no window manager loaded. If no
  353.   client program is specified on the command line, xinit will look for
  354.   the .xinitrc file to run as a shell script, to start up client
  355.   programs. If this file does not exist, xinit will use the following
  356.   command as a default:
  357.  
  358.  
  359.  
  360.         xterm -geometry +1+1 -n login -display :0
  361.  
  362.  
  363.  
  364.  
  365.  
  366.   As you see, this is not very helpful. The most common way to start X
  367.   is with the command startx. This is the most civilized fashion to
  368.   start the windowing system, but requires that you log in from a text
  369.   shell, and start the windowing system yourself. For many Linux users
  370.   this is the most common way to start X, it is also the most flexible.
  371.   You can issue a commands such as the following:
  372.  
  373.  
  374.  
  375.         startx -- -bpp 8    #start x in 256 color mode
  376.         startx -- -bpp 32   #start x in true color mode
  377.  
  378.  
  379.  
  380.  
  381.  
  382.   The double dashes pass arguments directly to xinit, and this way you
  383.   can start up X in the resolution your work will require, and still
  384.   have it use the configuration files we will cover later in this
  385.   document.
  386.  
  387.  
  388.   2.4.  The X Display Manager
  389.  
  390.   The program xdm provides similar services to  getty and login, which
  391.   allow users to log into a  system and start their basic shell. If you
  392.   start X with xdm,  however, users need only to type in their username
  393.   and password at a  friendly prompt, and they are dropped directly into
  394.   the graphical  environment. This is simple and easy to use, and is
  395.   seen frequently  in college campuses, cyber cafes, business
  396.   environments, anywhere you  have users not necessarily familiar with
  397.   Unix to any great extent.
  398.  
  399.   xdm can be configured with configuration  files located in
  400.   /usr/X11R6/lib/X11/xdm on your Linux  system. The file xdm-config is
  401.   for configuring how the  login screen appears to users, and Xsetup_0
  402.   is used to tell   xdm what programs should be launched when X is
  403.   started. Some of the  configuration a normal user would put in their
  404.   .xinitrc file  should go in here, if xdm is to be normally used.
  405.  
  406.   Here is a sample Xsetup_0 file to look at, which might help to
  407.   configure your system. The xfstt program is the TrueType font server,
  408.   and is discussed later in  this document. Also, notice that we're
  409.   using a shell script here, and it's trying to call xv to set the
  410.   background to a nice picture (instead of the boring black and white
  411.   background pattern), and if that call fails, xsetroot is called, to at
  412.   least try to set the background to a nice blue color.
  413.  
  414.  
  415.  
  416.         #!/bin/sh
  417.         xconsole -geometry 480x100-0-0 -daemon -notify -verbose -fn \
  418.         '-schumacher-clean-medium-r-*-*-10-*-*-*-*-*-*-*' -exitOnFail
  419.         /usr/X11R6/bin/xfstt &
  420.         /usr/X11R6/bin/xv -quit -root                               \
  421.         /usr/local/share/WindowMaker/Backgrounds/InDreams.jpg       \
  422.         || xsetroot -solid darkblue
  423.         xset fp+ unix/:7100
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.   3.  Choosing a Window Manager
  431.  
  432.   This is a discussion of the window managers available to the X Window
  433.   user, with a comparison of some finer ones to choose from. In order to
  434.   prevent this document from becoming overwhelmingly large (and
  435.   proportionally difficult to maintain, as well) I am limiting the
  436.   discussion to the more popular and well known window managers out
  437.   there. I believe these are most representative for our purposes, and
  438.   once you grasp the basic concepts of a few, you more or less will have
  439.   the hang of them all.
  440.  
  441.   Your choice of window manager can dramatically influence how pleasant
  442.   your computing experience will be. You spend much of your time dealing
  443.   with windows when you're in X, and you don't want something that's too
  444.   obtrusive, one that will get in your way. Some window managers are
  445.   extremely customizable, to the point that you can pretty much feel
  446.   like it's a new operating system. If you don't like icons, get rid of
  447.   them! If you miss that toolbar, you can build a better one, and it can
  448.   be a pretty painless and rewarding process besides.
  449.  
  450.  
  451.   3.1.  FVWM And Its Ancestors
  452.  
  453.   The most common window managers nowadays have their roots in Robert
  454.   Nation's FVWM window manager. These include FVWM, FVWM2, FVWM95, and
  455.   many more. FVWM itself is derived partly from TWM, which comes with an
  456.   X Window installation, but which we will not cover here.  The syntax
  457.   and usage of TWM is similar to FVWM, but it actually uses more memory,
  458.   and feels clumsy and awkward to most users.
  459.  
  460.   FVWM is the original and old standby favorite Linux window manager.
  461.   Now that the 2.0 of versions of FVWM have become stable and in more
  462.   general usage, this newer version is preferred, for the syntax is much
  463.   more direct and simplified, and much more flexible as well. However,
  464.   many people still have the original FVWM on their systems, as it has
  465.   been a long time favorite and standard, and most of the examples in
  466.   this text are equally applicable to this older version. And if the
  467.   older one is working fine for you, there may be no need to upgrade,
  468.   since it may break your configuration files to some degree, for some
  469.   of the syntax has indeed changed, and is not altogether backward
  470.   compatible. Such is the nature of progress.
  471.  
  472.   Nobody seems quite sure what F in FVWM stands for (not even the
  473.   author, from what I can tell!), but the VWM would seem to (correctly)
  474.   indicate Virtual Window Manager, and indeed the FVWM series are
  475.   virtual window managers, and that is one of their strengths. You can
  476.   bind keys to any function, including the switching between the virtual
  477.   desktops, and do this with ease.
  478.  
  479.   FVWM2 is the new standard, including many improvements and features
  480.   not found in the previous version. Unlike many newer window managers,
  481.   it works just fine on 8-bit, 256 color displays, which I am using at
  482.   the moment, and still can be improved with little icons and gradients,
  483.   to look as much like the Win98 interface as you may or may not want.
  484.   This version is also much more extensible in general, and allows the
  485.   use of themes and dynamic menus. Technically, FVWM2 is still in beta,
  486.   but it works just great, and I have not yet had a single problem with
  487.   it.
  488.  
  489.  
  490.      Resources:
  491.         The official FVWM and FVWM2 site is
  492.         <http://www.hpc.uh.edu/fvwm/>.  The latest version should always
  493.         be available at  <ftp://ftp.hpc.uh.edu/pub/fvwm/>.
  494.  
  495.  
  496.   3.2.  The Wide World of Window Systems
  497.  
  498.   For users more familiar with other window environments on other
  499.   operating systems, there are plenty of window managers to emulate the
  500.   desktop you're accustomed to.
  501.  
  502.   The icewm <http://berta.fri.uni-lj.si/~markom/icewm> window manager is
  503.   aimed at a more consistent look and feel, and can emulate many other
  504.   windowing system standards, hot key bindings, and such.  The OS/2
  505.   emulations are particularly nice.  AmiWM
  506.   <http://www.lysator.liu.se/~marcus/amiwm.html> is an Amiga Workbench
  507.   type window manager, mlvwm <http://www.bioele.nuee.nagoya-
  508.   u.ac.jp/member/tak/mlvwm.html> is a MacOS emulator. A nice addition to
  509.   these window managers is dfm <http://www-c.informatik.uni-
  510.   hannover.de/~kaiser/dfm/dfm.html>, a desktop and file manager that
  511.   pleasantly resembles the OS/2 Workplace Shell.
  512.  
  513.  
  514.      Resources:
  515.         The Window Managers website can be found at
  516.         <http://www.PLiG.org/xwinman/>, and is a consistently good
  517.         resource for finding out about the variety of window managers
  518.         available, particularly for finding good window managers to
  519.         emulate other windowing environments. Many more still are listed
  520.         at  <http://www.PLiG.org/xwinman/others.html>, provided by the
  521.         same author as the previous link, and this is quite a formidable
  522.         and complete list indeed. You can download Linux versions of
  523.         most popular window managers at the metalab
  524.         <ftp://metalab.unc.edu/pub/Linux/X11/window-managers> archive.
  525.  
  526.  
  527.  
  528.  
  529.   3.3.  The X Graphical Interfaces
  530.  
  531.   Open Look and Motif were early attempts to standardize X Window, and
  532.   make it usable in more mainstream environments, around a greater
  533.   variety of workstations. Both were somewhat successful at those
  534.   attempts (in look and feel, if not politically) and can be used under
  535.   a modern Linux system.  Both require specific libraries, which can be
  536.   used to compile a variety of applications specifically designed for
  537.   one or the other environment, to give all programs a similar look and
  538.   feel.
  539.  
  540.   Starting with X11 Release 5, Sun Microsystem's OpenWindows graphical
  541.   interface was available to X users. This includes two versions of the
  542.   Open Look Window Manager, olwm and olvwm (with a virtual desktop).
  543.   This was developed by Sun in hopes of making a standard windowing
  544.   environment, and indeed it was standard with Solaris for many years.
  545.   If your distribution of Linux did not come with this windowing system
  546.   installed, you must remember to install the XView libraries to get it
  547.   to work, and you will also have to put the /usr/openwin/...
  548.   directories in your search path.
  549.  
  550.   If you want the actual OSF/Motif Toolkit for Linux, you'll have to
  551.   pay, the programs and toolkit are not free. However, the Hungry
  552.   Programmers have written LessTif, which allows you to compile Motif
  553.   programs more or less as if you owned to toolkit. LessTif is a clone
  554.   of the Motif toolkit. Currently LessTif is partially implemented with
  555.   most of the API in place. Many programs already work under this free
  556.   version of the toolkit, and it even comes with a window manager,
  557.   derived from FVWM code, which you'd swear was the Motif Window
  558.   Manager.
  559.  
  560.   The most useful feature of this toolkit, however, is compiling
  561.   programs dependent on having a Motif library on your system. The
  562.   window manager is nothing spectacular, and mostly useful if you're
  563.   migrating from the original Motif, and want to keep your configuration
  564.   file. For all intents and purposes, you will find FVWM much more
  565.   feature-filled and useful, and it looks and behaves almost
  566.   identically, even recognizing the window hints supplied by programs
  567.   built with the Motif toolkit.
  568.  
  569.  
  570.      Resources:
  571.         The Hungry Programmers LessTif can be found at
  572.         <http://www.lesstif.org/>.
  573.  
  574.  
  575.   3.4.  The X Desktop Environments
  576.  
  577.   The second generation of Linux window managers was brought about by
  578.   KDE, and soon joined by GNOME. There are some striking similarities,
  579.   and some great differences, between these two, and I will attempt to
  580.   cover them here. The most important thing to remember at this point is
  581.   that neither of them is in any way a complete product. Both are at the
  582.   start of a long development cycle, and not completely stable yet, and
  583.   as such are not suited to mission-critical work at this time.
  584.  
  585.   The KDE Desktop Environment
  586.  
  587.   (A quote from the home page:) ``KDE is a completely new desktop,
  588.   incorporating a large suite of applications for Unix workstations.
  589.   While KDE includes a window manager, file manager, panel, control
  590.   center and many other components that one would expect to be part of a
  591.   contemporary desktop environment, the true strength of this
  592.   exceptional environment lies in the interoperability of its
  593.   components.''
  594.  
  595.   The KDE Desktop Environment is an attempt to make a desktop
  596.   environment, not just a window manager. The tools of KDE work together
  597.   so well, for instance, one might be fooled into thinking KDE was an
  598.   entire operating system. All the tools to work in a windowing system
  599.   are included, and many more have been ported to the KDE environment.
  600.   KDE has achieved a surprising level of maturity already, but many are
  601.   reluctant to install it on their desktop, because of the licensing
  602.   stipulations of the QT toolkit, upon which KDE is based. This has
  603.   changed a little lately, and the licence now qualifies as Open Source
  604.   by definition, but is not the same as that of GNU software.
  605.  
  606.   GNOME: The GNU Object Model Environment
  607.  
  608.   (A quote from the home page:) ``GNOME stands for GNU Network Object
  609.   Model Environment. The GNOME project intends to build a complete,
  610.   user-friendly desktop based entirely on free software. GNOME is part
  611.   of the GNU project, and GNOME is part of the OpenSource(tm) movement.
  612.   The desktop will consist of small utilities and larger applications
  613.   which share a consistent look and feel. GNOME uses GTK+ as the GUI
  614.   toolkit for all GNOME-compliant applications.''
  615.  
  616.   The GNOME project is an attempt to do much of the same work as KDE,
  617.   but even a little more than that. GNOME is less tied to one window
  618.   manager, for instance, and it is interoperable not just between
  619.   applications, but computers and platforms, as it uses the Common
  620.   Object Resource Broker Architecture (CORBA).  Also, and to many most
  621.   importantly, GNOME is based on the GTk+ toolkit, which is free and
  622.   open source, unlike the underlying toolkit of KDE, thereby following
  623.   in the philosophy of Linux itself.
  624.  
  625.  
  626.      Resources:
  627.         The official KDE website is  <http://www.kde.org/>. The official
  628.         GNOME website is  <http://www.gnome.org/>. More detailed
  629.         information regarding the issues surrounding GNOME can be found
  630.         at  <http://www.gnome.org/gnomefaq/FAQ.txt>.  The home page of
  631.         CORBA is located at  <http://www.corba.org/> , and the GTk+
  632.         toolkit home is  <http://www.gtk.org/> .
  633.  
  634.  
  635.   3.5.  The Flashy Window Managers
  636.  
  637.   The latest generation of window manger is very very pretty indeed.
  638.   Sporting every convenience you could think of, and emulating the most
  639.   beautiful operating systems ever used on the most gorgeous
  640.   workstations in the world, these are the window managers to run if
  641.   you've got the memory and CPU cycles to burn.
  642.  
  643.   Window Maker
  644.  
  645.   (A quote from the home page:) ``Window Maker is an X11 window manager
  646.   designed to give additional integration support for GNUstep
  647.   applications. It tries to emulate the elegant look and feel of the
  648.   NEXTSTEP(tm) GUI. It is relatively fast, feature rich, and easy to
  649.   configure and use.''
  650.  
  651.   A big strength of this window manager is that it supports the GNU
  652.   desktop, meaning that it makes a great and very pretty front-end to
  653.   GNOME. This is also one of the most easily configurable window
  654.   managers, and can be configured from a graphical interface, and
  655.   supports the OffiX drag and drop protocol, easy switching of desktop
  656.   themes, and it's now available within the popular Red Hat
  657.   distribution, so it's easy and painless to switch from FVWM when the
  658.   mood finally strikes. As of the 0.50 release, Window Maker supports
  659.   KDE compliance as well.
  660.  
  661.   This is the author's personal favorite window manager.  Get it!
  662.  
  663.   AfterStep
  664.  
  665.   (A quote from the home page:) ``AfterStep is a Window Manager for X
  666.   which started by emulating the NEXTSTEP look and feel, but which has
  667.   been significantly altered according to the requests of various users.
  668.   Many adepts will tell you that NEXTSTEP is not only the most visually
  669.   pleasant interface, but also one of the most functional and intuitive
  670.   out there. AfterStep aims to incorporate the advantages of the
  671.   NEXTSTEP interface, and add additional useful features.  The
  672.   developers of AfterStep have also worked very hard to ensure stability
  673.   and a small program footprint.''
  674.  
  675.   Enlightenment
  676.  
  677.   Enlightenment is more than just a window manager, it is an extreme,
  678.   detailed, and configurable environment, and is particularly attractive
  679.   in that it allows irregular and completely customizable window shapes.
  680.   It is open in design, and instead of dictating a policy it allows the
  681.   user to define their own policy right down to the minute and
  682.   infinitesimal details; from its functionality right on through to its
  683.   looks.
  684.  
  685.   Enlightenment is still in development currently, and can cause your
  686.   system to crash. However, Rasterman, the author of Enlightenment, is
  687.   currently working for Red Hat on the GNOME project, and as that
  688.   project matures, support for Enlightenment will be maturing as well,
  689.   making this an environment to keep an eye on.
  690.  
  691.  
  692.      Resources:
  693.         The official Window Maker website is
  694.         <http://www.windowmaker.org/>. The official AfterStep website is
  695.         <afterstep.org/>.  Enlightenment can be found, predictably, at
  696.         <http://www.enlightenment.org/>.
  697.  
  698.  
  699.   4.  Working In X
  700.  
  701.   In this section we will become familiar with running clients in X
  702.   Window and the basic procedures involved in using the system. X is not
  703.   an intuitive interface on its own, and without any window manager, it
  704.   is easiest to use as a display for programs started from the command
  705.   line. One of the most common uses for X is just to have several xterm
  706.   windows open at the same time. Not exactly maxing out the graphics
  707.   capabilities of the computer, but it's a nice feature to start with.
  708.  
  709.   The flexibility and usefulness of the command line is so great, in
  710.   fact, that you don't really need a window manager. It's nice, and you
  711.   will want it very quickly, but the fact is that you can get by without
  712.   one, just the command line and the mouse. If you give it a shot,
  713.   you'll be surprised as to the exact distinctions between the clients
  714.   and the window manager. If you start toying around with this, however,
  715.   remember that the key combination Ctrl-Alt-Backspace gets you out of X
  716.   Window in a pinch.
  717.  
  718.  
  719.   4.1.  Command Line Options
  720.  
  721.   Most X programs try to use the same basic names for command line
  722.   options.  All applications written using the MIT X Toolkit Intrinsics
  723.   automatically accept the following options:
  724.  
  725.  
  726.  
  727.      -display display
  728.         This option specifies the X server to use. See the section on
  729.         Display Names for details.
  730.  
  731.  
  732.      -geometry geometry
  733.         The initial size and location of the window, in a format such as
  734.         widthxheight+hoffset+voffset or +hoffset-voffset. Note that if
  735.         you put in a negative horizontal or vertical offset, the window
  736.         will be placed counting backward from the right or the bottom of
  737.         the screen, respectively.
  738.  
  739.  
  740.      -font font
  741.         The font to use for displaying the text in your window.
  742.  
  743.  
  744.      -bg color
  745.         The color to use for the window background.
  746.  
  747.  
  748.      -fg color
  749.         The color to use for the window foreground.
  750.  
  751.  
  752.      -name resource-name
  753.         Useful for specifying the name under which the resources for
  754.         this application will be found. This is useful to distinguish
  755.         between invocations of the same application, for example, two
  756.         xterms can be named differently so that they may inherit
  757.         different resources based upon those names in the resource
  758.         database.
  759.  
  760.  
  761.      -title string
  762.         This is the title to be used for the window on your display,
  763.         generally used by the window manager to put a descriptive title
  764.         at the top of the window. Not to be confused with the -name
  765.         option.
  766.  
  767.  
  768.      -iconic
  769.         Invoke window as an icon.
  770.  
  771.  
  772.      -xrm resource-string
  773.         This option specifies a resource name and value to override any
  774.         defaults that may already be set. Also useful for setting X
  775.         resources that do not have explicit command line options. For
  776.         instance, the command line xterm -xrm "xterm*background: blue"
  777.         is functionally identical to typing xterm -bg blue.
  778.  
  779.  
  780.  
  781.   4.2.  Display Names
  782.  
  783.   Every X Server has a display name of the form:
  784.  
  785.   hostname:displaynumber.screennumber
  786.  
  787.   The hostname specifies the name of the machine to which the display is
  788.   actually, physically connected. The hostname can be omitted, and if
  789.   so, the server on the same machine will be chosen. In fact, if you are
  790.   the only one using X on your computer, you will want to just leave
  791.   this off of your display specifications. The displaynumber should
  792.   probably be zero, this is used if the X Server is controlling more
  793.   than one keyboard and monitor unit, for instance, a network of X
  794.   terminals. The screennumber specifies which monitor in a multiple
  795.   monitor setup should be used. Following this specification, you would
  796.   open an xterm window on your local machine with the option -display
  797.   :0.0. You can see that we have omitted the hostname from the option,
  798.   so the current machine is assumed.
  799.  
  800.   On Linux systems, your DISPLAY variable holds your display name, which
  801.   on my system is :0.0. This is usually set by xterm, or one of the
  802.   scripts that starts X Window for you, although you can set it
  803.   yourself, or as discussed above, use the -display command line option
  804.   when invoking your application.
  805.  
  806.   If you have opened an xterm or rxvt window, and then opted to do
  807.   super-user work via the su command, you will find that if you try to
  808.   launch an X application you will have no display to launch it on.
  809.   Silly it seems, because you are sitting right in front of your
  810.   display, but the trick to getting this to work is to pass an option on
  811.   the command line to the program such as -display :0.0, and it will
  812.   work fine.
  813.  
  814.  
  815.   4.3.  XTerm Versus Rxvt, or, Know Thy Terminal Emulator
  816.  
  817.   Your choice of terminal emulator can affect your experience in X
  818.   almost as much as your window manager, so a little discussion of your
  819.   best options is due here. A terminal emulator is a program such as
  820.   xterm, discussed above, which lets you emulate the simple console of
  821.   Linux in X. You will rely heavily on the program you choose, so it
  822.   pays to choose it wisely to begin with.
  823.  
  824.   If you have a slow video card, the first thing you should consider
  825.   doing is switching to rxvt. Using xterm is a good starting point,
  826.   mainly because it comes standard with all X distributions, but it's
  827.   not always the best choice. It contains a lot of legacy code, and is
  828.   quite bloated for a simple terminal emulator. This is partly due to
  829.   the fact that it's not just a plain text terminal emulator, but also
  830.   emulates graphics modes that you simply will never use. Because of
  831.   this, you may wish to switch to rxvt, and also because xterm can be
  832.   extremely slow. I'm not sure why it's so slow, but if you have a slow
  833.   video card you'll know what I mean, and you'll be amazed at the
  834.   difference when you dump xterm.
  835.  
  836.   Some other perks of rxvt include pixmap backgrounds, and a much nicer
  837.   scrollbar. If you specify the -pixmap option on the command line (and
  838.   have support compiled in to your version!) you will get any .xpm-type
  839.   picture in the background. A very cool feature, and it surprisingly
  840.   doesn't slow down your output at all, it still redraws faster than
  841.   your xterm window. Give it a shot, I haven't seen it around lately but
  842.   I think it can be found on metalab.
  843.  
  844.  
  845.   5.  X Startup
  846.  
  847.   We will presume for the following examples that we have picked a
  848.   fairly stable window manager, such as FVWM2, to try out some sample
  849.   configurations.  I would suggest giving that a shot for the purpose of
  850.   learning these topics, as most of what you will learn here and in the
  851.   following sections will apply to any window manager out there, but the
  852.   topics seem most easily picked up using FVWM2.
  853.  
  854.  
  855.   5.1.  A Sample Starting Configuration
  856.  
  857.   Our first step is to write ourselves an initialization file for X
  858.   itself.  This file can be either a system-wide file, in which case it
  859.   would likely be placed in /var/X11R6/lib/xinit/xinitrc, or it can be
  860.   overridden on a per-user basis by placing the file .xinitrc in your
  861.   home directory. Generally, it is expected that there will be a basic,
  862.   default file in the system-wide location, possibly enforced if
  863.   necessary for security reasons, but otherwise users will probably wish
  864.   to configure the file themselves.
  865.  
  866.   First let's create a file in your home directory called .xinitrc. Open
  867.   up your ``favorite'' text editor, and paste the following, or
  868.   something like it, in that file:
  869.  
  870.  
  871.  
  872.         #!/bin/sh
  873.  
  874.         # if your backspace and delete are reversed, try this:
  875.         xmodmap -e "keysym BackSpace=Delete" -e "keysym
  876.        Delete-BackSpace"
  877.  
  878.         xsetroot -solid darkslateblue
  879.  
  880.         # start some basic applications
  881.         xclock -geometry 96x96+2+2 -bg grey40 -fg black -hl white &
  882.         xload -geometry 120x96+2+147 -bg grey40 -fg white -hl darkred -update 4
  883.        &
  884.         xterm -sb -ls -geom 80x25-2+2 -title "shell" &
  885.         xterm -sb -ls -geom 80x25-2-2 &
  886.  
  887.         # start the window manager
  888.         fvwm2
  889.  
  890.  
  891.  
  892.  
  893.  
  894.   There are plenty of things to learn from this example. First of all,
  895.   this file will be a shell script, as indicated by the first line. The
  896.   xsetroot command on the second line turns the background of our
  897.   desktop to a pleasant blue color, not a bad idea if we're going to be
  898.   staring at that color predominantly all day.
  899.  
  900.   The third and fourth lines are some programs that I like to leave
  901.   running while I'm fast at work. You'll notice that some of the options
  902.   make for a nicer setup, for example, specifying the colors and
  903.   geometry (location on screen).  I'll give you some tips for figuring
  904.   this stuff out in a bit. The fifth and sixth lines follow similarly,
  905.   opening up two handy xterm windows for us, which we will no doubt be
  906.   needing soon.
  907.  
  908.   The last line is very important--it is this line that starts up your
  909.   window manager! Notice that the only commands we did not run as
  910.   background processes (by putting the & at the end) were xsetroot,
  911.   xmodmap, fvwm2. With these first two it doesn't matter, as the
  912.   programs exit immediately. But all the rest of the programs have to be
  913.   in the background, otherwise when you closed one, it would kill your X
  914.   Window session. That would not be very pleasant, nor very expected. As
  915.   shown above, when you close fvwm2, you exit X.
  916.  
  917.  
  918.   5.2.  A More Intelligent Startup
  919.  
  920.   We can add lots to our primitive example of a startup file. For
  921.   instance, this is a good way to warn yourself when you may have
  922.   carelessly stared X as the root user.  Red Hat users seem to do this
  923.   often, for many of the configuration programs which must be run as
  924.   root, must also be run in X.  You can avoid this by issuing an su
  925.   command to become root during your normal X user session, and then
  926.   calling the program you need to run as root with the option -display
  927.   :0.0 discussed above.
  928.  
  929.  
  930.  
  931.         # change background color for root
  932.         if [ "$USER" = "root" ];
  933.         then
  934.              xsetroot -solid darkred
  935.         else xsetroot -solid darkslateblue
  936.         fi
  937.  
  938.  
  939.  
  940.  
  941.  
  942.   This will check to see if you are the user named root, and if you are,
  943.   it will set the background to a harsh red, rather than the usual
  944.   friendly blue, to warn you. This next bit of code, also intended for
  945.   your .xinitrc file, will merge in your user-specific and system-wide
  946.   resources, first checking to be sure the files exist.
  947.  
  948.  
  949.  
  950.         userresources=$HOME/.Xresources
  951.         usermodmap=$HOME/.Xmodmap
  952.         sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
  953.         sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
  954.         # Merge in defaults and keymaps
  955.         if [ -f $sysresources ]; then
  956.            xrdb -merge $sysresources; fi
  957.         if [ -f $sysmodmap ]; then
  958.            xmodmap $sysmodmap; fi
  959.         if [ -f $userresources ]; then
  960.            xrdb -merge $userresources; fi
  961.         if [ -f $usermodmap ]; then
  962.            xmodmap $usermodmap; fi
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.   5.3.  Getting The Windows Where You Want Them
  970.  
  971.   Placing everything on your screen by guesswork with the -geometry
  972.   option can get very tedious indeed. Particularly when you consider
  973.   that you can specify the -geometry option to pretty much any program
  974.   you can run in X. This allows a great precision in tuning the
  975.   interface, but that's a heck of a lot of options to set, indeed.
  976.  
  977.   This brings up one very nice feature of the FVWM window managers. By
  978.   default, when you move a window around the screen, you see the
  979.   geometry specification appear on the screen. Go ahead, try moving a
  980.   window around with the left button.  Now try resizing it. As you can
  981.   see, you can get some primitive specifications this way. However, even
  982.   this method can be a little difficult, and it would be nice to have
  983.   all the details about your window in one concise list.
  984.  
  985.   It is at this point that we will introduce the program xwininfo. To
  986.   use this program, go to an xterm window and type in that program name.
  987.   It will ask you to click on another window that you want information
  988.   about, and after you click it will dump out useful information that it
  989.   knows about that window.  This is useful for plugging information
  990.   about windows once you have them set up how you want them on your
  991.   screen - run this program, then click on the window, then put in those
  992.   parameters in your startup file, and your window system will
  993.   henceforth be frozen in a pristine state of immaculate precision.
  994.  
  995.  
  996.   6.  Configuring the Window Manager
  997.  
  998.   Now we take a look at the files to configure your window manager.
  999.   These vary from manager to manager, but for our examples we will focus
  1000.   on the per-user files, and we are looking at FVWM2 in this example, so
  1001.   you will modify the file .fvwm2rc in your home directory.
  1002.  
  1003.  
  1004.   6.1.  Basic FVWM2 Configuration
  1005.  
  1006.   Configuring your window manager resource file in earlier versions of
  1007.   FVWM was a rather arduous process, because the order of the items in
  1008.   the file needed to be very particular, but that has relaxed quite a
  1009.   bit in this version. To my knowledge, the only crucial part of the
  1010.   ordering is the bindings for the menus, but we'll cover that a bit
  1011.   later. Your FVWM2 installation should have come with an example
  1012.   resource file, and you should be able to find that in
  1013.   /var/X11R6/lib/fvwm2/system.fvwm2rc. This is the default system-wide
  1014.   configuration file. A good idea would be to copy that file into your
  1015.   home directory and call it .fvwm2rc. From that point on, when FVWM2
  1016.   starts up it will read the file in your home directory, and ignore the
  1017.   system-wide configuration file.
  1018.  
  1019.   Now that you've got a working, personalized copy of the window manager
  1020.   resource file in your home directory, open it in your favorite text
  1021.   editor, and take a look at it. If you're in X at the moment, you can
  1022.   see the correlation between the file and what you see on your desktop.
  1023.   Very helpful indeed. Let's try changing something and see if we can
  1024.   make it look a little better. Probably the first entry in your file
  1025.   (that is not followed by the # comment character) is the WindowFont
  1026.   entry, followed by a very bizarre font name. If you want to figure out
  1027.   how to set up the fonts and colors to their fullest, skip ahead to the
  1028.   next section on X Fonts and Colors.
  1029.  
  1030.  
  1031.   6.2.  Advanced FVWM2 Configuration
  1032.  
  1033.   Configuring FVWM2 can get incredibly subtle and complex. Take this
  1034.   code snippet from the fvwm2gnome setup for the .fvwm2rc file:
  1035.  
  1036.  
  1037.  
  1038.         # import config files
  1039.  
  1040.         Echo -Styles-
  1041.         Read .fvwm2gnome/config/styles/app.styles
  1042.         Read .fvwm2gnome/config/styles/window.styles
  1043.  
  1044.         Echo -Buttons & Keys-
  1045.         Read .fvwm2gnome/config/buttons.config
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.   This is an example of a way to read in other configurations. In this
  1052.   fashion you can modularize your .fvwm2rc -- not a bad idea,
  1053.   considering how jumbled one huge configuration file can become. This
  1054.   can make it easier to change and to debug, and it also makes it easier
  1055.   to configure so-called themes, which we will cover in a moment.
  1056.  
  1057.   6.3.  FVWM2 Configuration Shortcuts
  1058.  
  1059.   A really neat way to configure your script for FVWM2 (and FVWM, and
  1060.   bash, and a whole lot of other programs besides!) is to use the
  1061.   Dotfile Generator, by Jesper K. Pedersen, available from
  1062.   <http://www.imada.ou.dk/~blackie/dotfile/>.  You will need to have a
  1063.   recent version of Tcl/Tk installed (available with most Linux
  1064.   distributions). This program starts with a configuration preset, or
  1065.   takes the one you presently have, and allows you to tweak it via many
  1066.   structured menus of options.
  1067.  
  1068.   Be warned, however, for I advise learning how to set up your
  1069.   configuration file yourself! Not only is this the Unix Way (for what
  1070.   that's worth) but it's much easier to make small and incremental
  1071.   changes to your .fvwm2rc file that way, and get things exactly how you
  1072.   like them. Also, being a Tcl/Tk program, it's a little slow.
  1073.   Nevertheless, if you want a painless way to start with a decent
  1074.   configuration, this is definitely worth a shot.
  1075.  
  1076.  
  1077.   6.4.  FVWM2 Themes
  1078.  
  1079.   Among the many new possibilities of FVWM2 are something commonly
  1080.   called themes. This basically means that you can switch between a
  1081.   basic look for all of your windows on your desktop, on the fly. Note
  1082.   that if you've made the distinction between the functions of the
  1083.   window manager and the functions of the applications themselves, you
  1084.   will realize that a window manager theme is not going to affect the
  1085.   look and feel of the applications themselves. Integrated toolkits such
  1086.   as KDE and GNOME do have this capability, however, and the two might
  1087.   be used together very effectively.
  1088.  
  1089.   In order to generate a theme, you must roll up your sleeves and modify
  1090.   your .fvwm2rc file a little bit. Here's something I added near the
  1091.   beginning of my file, try putting it right after your Style
  1092.   definitions:
  1093.  
  1094.  
  1095.  
  1096.         # Blue Theme
  1097.         DestroyDecor Blue
  1098.         AddToDecor Blue
  1099.         + WindowFont -b&h-lucida-bold-r-*-*-*-140-*-*-*-*-*-*
  1100.         + TitleStyle ActiveDown (Solid DarkSteelBlue)\
  1101.             ActiveUp (Solid SteelBlue) Inactive (Solid Grey)
  1102.         + HilightColor white blue
  1103.         + ButtonStyle 1 -- UseBorderStyle
  1104.         Style Blue UseDecor Blue, BorderWidth 5, HandleWidth 5,\
  1105.             MWMborder, MWMbuttons
  1106.  
  1107.         # Function to change all windows to a new style.
  1108.         DestroyFunc ChangeStyle
  1109.         AddToFunc ChangeStyle
  1110.         + "I" Style $0 $1
  1111.         + "I" Recapture
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.   That's a lot to swallow, I know. Basically we're first defining a
  1118.   theme called ``Blue,'' and you can use that first half as a model to
  1119.   design other themes. Themes can describe many more features than that,
  1120.   in fact, and can be quite remarkably different from one another. Then
  1121.   we're defining a function to change all the windows to a new style.
  1122.   Notice in both sections above that we destroy the object before
  1123.   creating it. This is a good idea since you may well be restarting
  1124.   FVWM2 a lot to try out your different styles, and this makes it work a
  1125.   bit more smoothly.
  1126.  
  1127.   The function call is needed as a generic interface to call the
  1128.   definitions of the styles we have defined. Now we will make the menu
  1129.   items to call them.
  1130.  
  1131.  
  1132.  
  1133.         DestroyMenu "Themes"
  1134.         AddToMenu "Themes"
  1135.         + "Choose a theme..." Title
  1136.         + "" Nop
  1137.         + "Blue" ChangeStyle "*" "UseStyle Blue"
  1138.         + "Mwm" ChangeStyle "*" "UseStyle Mwm"
  1139.         + "Flat" ChangeStyle "*" "UseStyle Flat"
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.   We're being a little terse with the menu definition here, but there
  1146.   should be a lot more in the sample file on your system. What we're
  1147.   doing is calling the ChangeStyle function that we defined above to
  1148.   change the style for all the windows on the screen to one of the
  1149.   presets we defined above that. Notice, again, our good practice in
  1150.   destroying the menu before creating it. Now if you restart FVWM2 (you
  1151.   should also have a menu option for that, hopefully!)  you will see a
  1152.   new Themes menu selection, and you should be able to try out the
  1153.   different themes.
  1154.  
  1155.   For more examples of FVWM2 Themes, visit
  1156.   <http://www.vis.colostate.edu/~scriven/Linux/fvwm/index.html>.
  1157.  
  1158.  
  1159.   7.  Fonts and Colors
  1160.  
  1161.   There are a lot of tricks to the fonts and colors used in X. They are
  1162.   not quite as simple as in some other systems, for instance, the font
  1163.   is not just a one-word name. You specify these resources quite
  1164.   explicitly, and it seems rather complex at first, but with a little
  1165.   explanation you'll be a whiz in no time.
  1166.  
  1167.  
  1168.   7.1.  Fonts Demystified
  1169.  
  1170.   The X Logical Font Description (``XLFD'') is the full name for a font.
  1171.   It consists of the following fields:
  1172.  
  1173.  
  1174.   ╖  fndry - font foundry, the company or individual which made the font
  1175.  
  1176.   ╖  fmly - font family, the popular nickname of the font
  1177.  
  1178.   ╖  wght - font weight (bold, medium, etc.)
  1179.  
  1180.   ╖  slant - font slant (italics, oblique, roman (normal), etc.)
  1181.  
  1182.   ╖  sWdth - font width (normal, condensed, extended, etc.)
  1183.  
  1184.   ╖  adstyl - additional style (sans serif, serif, etc.)
  1185.  
  1186.   ╖  pxlsz - pixel size, the number of pixels vertically in a character
  1187.  
  1188.  
  1189.   ╖  ptSz - approximate point size of the text (similar to pxlsz)
  1190.  
  1191.   ╖  resx - horizontal resolution, in dpi
  1192.  
  1193.   ╖  resy - vertical resolution, in dpi
  1194.  
  1195.   ╖  spc - spacing, only useful, apparently, in the Schumacher fonts
  1196.  
  1197.   ╖  avgWidth - average character width of the font
  1198.  
  1199.   ╖  rgstry - the recognized registry that lists the font
  1200.  
  1201.   ╖  encdng - nationality encoding
  1202.  
  1203.   In light of this chaos, the program xfontsel (the default X Window
  1204.   font selection program) will come in enormously useful to you.  Try
  1205.   launching it right now. You will see a strange nothing helpful in the
  1206.   main window, but try holding the left button down on the fndry button.
  1207.   If all your fonts are in order, you will see a menu of selections such
  1208.   as adobe and b&h and bitstream and so forth. Select one such as b&h
  1209.   and you will notice that the font in the lower window changes to
  1210.   something intelligible. This is generally the way you will select
  1211.   fonts with this program, starting from the left, which is the most
  1212.   general selection, and moving toward the right, to the more specific
  1213.   options. Selecting an option toward the rightmost end will not make
  1214.   much sense before the foundry, for instance, is selected, because the
  1215.   options are generally ordered by their dependence on each other.
  1216.  
  1217.   When you go to select from the fmly selection, you will see most of
  1218.   the options greyed out, and only three remaining. That means that
  1219.   these three are the only families of font made by this foundry. Some
  1220.   families appear under more than one foundry, for instance, both Adobe
  1221.   and Bitstream make a variation of the Courier font. Now you can select
  1222.   the wght, and so forth. After you get far enough you will have
  1223.   narrowed it down to the font that you want.  You don't necessarily
  1224.   have fill in all the options to choose a single font, there's not that
  1225.   many fonts on your system! The options that you do not select will be
  1226.   represented by a * indicating that any option will do in that spot.
  1227.  
  1228.   When you are happy with your font selection, you can hit the select
  1229.   button, and your selection will be placed in the X clipboard, ready to
  1230.   be pasted into your document or whatever you are working on. For
  1231.   instance, go to your xterm window and type in something like xterm
  1232.   -font  followed by an opening quotation mark. Then point to that spot
  1233.   on your screen, and click your middle mouse button (or click both the
  1234.   left and right, if you're middle-button impaired).  This will paste
  1235.   the selection from the clipboard, which should be the font you just
  1236.   selected. Then enter the closing quote, and hit Enter. For instance, a
  1237.   nice big xterm with a Courier font specified would look like this:
  1238.   xterm -font "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*" A fresh
  1239.   xterm should the pop up using the font that you selected.
  1240.  
  1241.   The utility xfd is very helpful for examining a font.  If you launch
  1242.   it with a command line such as xfd -fn fixed, it will show you the
  1243.   character set for the font, much like the keycaps utility on a
  1244.   Macintosh.  Note that you can also limit the number of fonts that you
  1245.   want xfontsel to display with the command line option -pattern,
  1246.   followed by a quoted font specification, as discussed above.
  1247.  
  1248.  
  1249.   7.2.  Font Aliases and Configuration
  1250.  
  1251.   Sometimes it gets tiresome to remember all of the long font names, and
  1252.   very impractical too. Luckily, it is not necessary to type in a
  1253.   hundred keystrokes or so just to get the font name you want, for X
  1254.   provides something called font aliases.
  1255.   If you look in the directory /usr/X11R6/lib/fonts/misc/fonts.alias,
  1256.   you will find shortcut names for many of the fonts. For example, 8x16
  1257.   is listed as a shortcut for -sony-fixed-medium-r-
  1258.   normal--16-120-100-100-c-80-iso8859-1, and anywhere you enter 8x16 as
  1259.   an X font resource or at a command line for a font name, the long
  1260.   version of the font will be substituted.  The 75dpi and 100dpi
  1261.   directories have similar aliases to take advantage of, on most systems
  1262.   the Lucida Sans font has a nice shortcut.
  1263.  
  1264.   If you add fonts or aliases to your system, you will have to issue a
  1265.   few commands (probably as root).  If you add fonts, you will have to
  1266.   issue the following two commands (these are examples, you will have to
  1267.   put in the correct directory, or perhaps leave it off altogether, to
  1268.   have your fonts re-read correctly.
  1269.  
  1270.  
  1271.  
  1272.         mkfontdir /usr/lib/X11/fonts/misc
  1273.         xset fp rehash
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.   If you change the alias file for a font, you may only have to issue
  1280.   the last command above, but it may be a good idea to issue them both,
  1281.   to be sure.  With the xset command you can explicitly issue a font
  1282.   path you wish the server to use, you can delete a specific directory
  1283.   from your font path, see the man page for more information.
  1284.  
  1285.   Another common problem is that some distributions (notably Red Hat
  1286.   5.2, at the moment) come with the fonts configured in the wrong order.
  1287.   If you take a look at your /etc/XF86Config (it may be somewhere else
  1288.   in some distributions, unfortunately, and I'm not sure where it is in
  1289.   Red Hat at the moment, so maybe locate it...)  Take a look at this
  1290.   file if you fonts are ugly in X (as in, very difficult to read even at
  1291.   large sizes).  You will see a bunch of entries that look something
  1292.   like this:
  1293.  
  1294.  
  1295.  
  1296.         FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
  1297.         FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
  1298.         FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
  1299.         FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
  1300.         FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.   The important thing to note here is that we have the unscaled
  1307.   bitmapped fonts (the directories misc, 75dpi, 100dpi) before the
  1308.   scaled fonts (such as Type1 and Speedo).  Bitmapped fonts are
  1309.   preferred for the X Server, because scaled fonts don't look very
  1310.   pretty for common use, they're better for things like The Gimp or
  1311.   Netscape, perhaps.  You should also do a sanity check to see that
  1312.   these directories all do, in fact exist, and if you have modified any
  1313.   lately, you might need to (as root) go in and issue an mkfontdir *
  1314.   command in the fonts directory.
  1315.  
  1316.  
  1317.   7.3.  Using Type 1 Fonts in X
  1318.  
  1319.   The font types X generally accepts are of limited use, considering
  1320.   that about the only place you'll find fonts of that kind used are in
  1321.   the X Window System itself, and unfortunately most media junkies and
  1322.   fontaholics work in operating systems that prefer other formats.  Type
  1323.   1 fonts, most commonly used in conjunction with PostScript document
  1324.   formats, can be found for free on the internet with considerable ease.
  1325.   Try  <ftp://ftp.cdrom.com/pub/os2/fonts/> for starters.
  1326.  
  1327.   To make use of these fonts is not that difficult, and graphics
  1328.   programs like GIMP will take advantage of them tremendously, and best
  1329.   of all, the Linux X servers understand Type 1 fonts ``out of the
  1330.   box.''  To use them, first unpack the archive using the appropriate
  1331.   commands, and put the fonts with a .pfb extension in
  1332.   /usr/X11R6/lib/X11/fonts/type1/ on your system. Then, add mention of
  1333.   those fonts in the fonts.scale file in that directory, using the
  1334.   format for the other fonts, already there. Then save the file.
  1335.  
  1336.   Now, you should be able to mkfontdir to tell the X server about the
  1337.   updates, and then run xset fp rehash to re-read the font path. If this
  1338.   doesn't work for you, you might have to restart X to see the changes.
  1339.  
  1340.   If you find yourself using Type 1 fonts a lot, and for things other
  1341.   than just X (GhostScript, for instance, can handle this font format as
  1342.   well), you'll want to check out the type1inst utility by James
  1343.   Macnicol. This program can configure Type 1 fonts for GhostScript and
  1344.   X, and it can also generate sample sheets for your fonts, and does
  1345.   most of the work of configuration for you. This program can usually be
  1346.   found at  <ftp://metalab.unc.edu/pub/Linux/X11/xutils/>.
  1347.  
  1348.  
  1349.   7.4.  Using TrueType Fonts in X
  1350.  
  1351.   If you have been using an operating system such as Windows or the
  1352.   MacOS, you may have lots of fonts sitting on your computer already
  1353.   that are TrueType fonts. TrueType fonts are considered best on
  1354.   smaller,  low-resolution displays, such as your computer monitor, and
  1355.   attempt to  provide nice features like shading and antialiasing,
  1356.   making your display look smoother. It is also really easy to find
  1357.   cheap TrueType fonts in bulk, and CD's featuring upwards of 500 fonts
  1358.   in the TrueType format are common in computer stores.
  1359.  
  1360.   X does not understand TrueType fonts, and has no innate capability (at
  1361.   present) to do so, and so it needs a separate program to do the font
  1362.   rendering for it.  There is a FreeType library to do this, but if you
  1363.   just want to use them on your computer, all you will need is a program
  1364.   called xfstt, the X font server for TrueType.  This program should be
  1365.   available at  <ftp://metalab.unc.edu/pub/Linux/X11/fonts/>.
  1366.  
  1367.   Installation is fairly straightforward.  Extract the archive, and make
  1368.   the file, and then make install. You may get a few errors that don't
  1369.   make sense after the second command; ignore them.  What you need to do
  1370.   next is create a writable directory called /usr/ttfonts and put some
  1371.   of your .ttf fonts there, just to make sure it's going to work.  Then
  1372.   synchronize the font server with the command xfstt --sync.
  1373.  
  1374.   If you got no errors there, run the font server in the background with
  1375.   the command xfstt & and tell your X11 server about the font service
  1376.   with the command xset fp+ unix/:7100.  If you got no errors, you
  1377.   should be able to run Netscape, the GIMP, even xfontsel, and have
  1378.   those fonts available to you. Your biggest problem may be finding the
  1379.   font you want, but that's not really a bad thing.
  1380.  
  1381.   If everything seems to be working fine, at this point you will want to
  1382.   configure your system so that the fonts will be working when you start
  1383.   X.  If you are just starting X from the command line, this is easy.
  1384.   All you have to do is add the two commands from the previous paragraph
  1385.   to your .xinitrc file, in that order.  When you next start X, it
  1386.   should work just fine.  If you are starting X via xdm, you will need
  1387.   to add /usr/X11R6/bin/xfstt & to /usr/X11R6/lib/X11/xdm/Xsetup_0. Got
  1388.   that? Then add xset vp+ unix/:7100 as well.
  1389.  
  1390.   Bear in mind that the installation of a TrueType font server can be
  1391.   tricky business. Remember that the order that you issue the above
  1392.   commands is important. The font server must be started before X is
  1393.   started, otherwise you will run into problems. Be sure to read the FAQ
  1394.   file that came with the distribution, and the xfstt man page too.
  1395.  
  1396.  
  1397.   7.5.  Colors
  1398.  
  1399.   Let's go back to our terminal window and try some more things. Try
  1400.   opening an xterm with a command line like the following:
  1401.  
  1402.  
  1403.  
  1404.         xterm -fg darkslateblue -bg red3 &
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.   While that window may not be pretty, and you may not do much of your
  1411.   best work in it, it demonstrates one interesting theme of X, the names
  1412.   of the colors.  While not very precise, this is a nice way to remember
  1413.   the colors more easily than remembering a series of hexadecimal
  1414.   numbers. Note that color names are never case-sensitive.
  1415.  
  1416.   If you're interested in the gory details, or want to see the samples,
  1417.   or even want to replace those silly color names with your own for some
  1418.   strange reason, you can find the file listing all the colors with
  1419.   their hexadecimal representation in /usr/X11R6/lib/X11/rgb.txt on your
  1420.   system. There are also some extremely useful utilities with names like
  1421.   xcolorsel and such. They can be found in the usual locations, on
  1422.   <http://metalab.unc.edu/pub/Linux/> and elsewhere.
  1423.  
  1424.   A more precise way of specifying colors is through the numerical
  1425.   definition.  This consists of a color space name and a set of values
  1426.   in the following syntax:
  1427.  
  1428.   <colorspace-name>:<value>/.../<value>
  1429.  
  1430.   An RGB Device, which you will most likely be using, is specified with
  1431.   the prefix "rgb:" and has the following syntax:
  1432.  
  1433.   rgb:<red>/<green>/<blue> , where <color> is a 1 to 4 digit hexadecimal
  1434.   number.
  1435.  
  1436.   As an example, you might represent the color red with rgb:ffff/0/0.
  1437.   For backward compatibility, you can also specify red with a syntax
  1438.   such as #ff0000 or #ffff00000000, and you will likely be seeing that
  1439.   (older) syntax a lot.
  1440.  
  1441.  
  1442.   8.  The X Resources
  1443.  
  1444.   We will at this point consider some finer modifications to your
  1445.   system. Configuring the window manager only gets you so far. The
  1446.   window manager lets you customize everything that happens outside the
  1447.   windows, the frames, the borders, the buttons, the desktop... but what
  1448.   about making the inside of the windows pretty? The only way to do this
  1449.   is by modifying the X Resources for your system.
  1450.  
  1451.   X Resources provide a mechanism for storing default values for program
  1452.   resources and tailoring your windowing environment to your favored
  1453.   look and feel. Resources are specified as text strings that are read
  1454.   in from various places when an application is run. Program components
  1455.   are named in a hierarchical fashion, with each object in the hierarchy
  1456.   identified by a class as well as an instance name. At the top level of
  1457.   the hierarchy is the class and instance name of the application
  1458.   itself. By convention, the class name of the application is the same
  1459.   as the program name, but with the first letter capitalized (e.g.
  1460.   Bitmap or Emacs) although some programs that begin with the letter
  1461.   ``X'' also capitalize the second letter for historical reasons (e.g.
  1462.   XTerm).
  1463.  
  1464.  
  1465.   8.1.  X Resources: The Basics
  1466.  
  1467.   Let's try a few examples to ease you into the world of resources.
  1468.   Start by opening an xterm window. Most likely you have one open
  1469.   already, can open one with a menu selection, or may wish to backtrack
  1470.   a bit in this document to get your bearings! Type something like this
  1471.   into the xterm window:
  1472.  
  1473.  
  1474.  
  1475.         xterm -background blue &
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.   This command should have resulted in another xterm window popping up
  1482.   on your screen, but this time with a blue background. ``Wow,'' you
  1483.   say, ``that's amazing!'' Yes, indeed it is.
  1484.  
  1485.   We'll need a little more background for our next example. Type exit in
  1486.   that xterm (which will close that window) and go back to the original
  1487.   window that you typed that command in. Try this: hold the Ctrl key and
  1488.   then hold the left mouse button. Now try that with the middle mouse
  1489.   button. Now the right.  All xterm windows give you options to try
  1490.   while they are running. With the right button, for instance, you can
  1491.   change the font of the window. Notice the color of these menus. Now
  1492.   try this example:
  1493.  
  1494.  
  1495.  
  1496.         xterm -xrm 'xterm*fontMenu*background: green' &
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.   This time, it just looks like a normal xterm window. But if you try
  1503.   holding Ctrl and the right mouse button in that window, you will see
  1504.   that this menu (the ``fontMenu'' mentioned in the above example) is
  1505.   green.  What just happened?  If you look at the man page for xterm,
  1506.   you will see many command-line options, such as -background or -font,
  1507.   that you can set when you launch any given window in X, listed after
  1508.   the options just for xterm windows. These particular options are
  1509.   called X Toolkit Options, and they apply to just about anything in X.
  1510.  
  1511.  
  1512.   8.2.  Inside The X Resource Database With editres
  1513.  
  1514.   To really get inside the resources of X, we need to run editres. Go
  1515.   ahead and launch it (and a sample program to play with) now:
  1516.  
  1517.  
  1518.  
  1519.    xclock &
  1520.    editres &
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.   Probably you will see a simple clock, and the rather innocent looking,
  1527.   mostly-blank window of editres.  The main window is showing us the
  1528.   resource tree of any given window on our desktop, and upon program
  1529.   launch, there is none. So let's give it one. Hold down the left button
  1530.   on the Commands menu, and select Get Tree. In the top of the window
  1531.   will appear Click the mouse pointer on any toolkit client. This
  1532.   message is more than it seems, and it is a hint to us that not all X
  1533.   applications are toolkit clients (though most of the basic ones are,
  1534.   and the program will usually tell us if it is not in the manual page).
  1535.   The mouse cursor will turn to a crosshair, and wait for you to click
  1536.   on another window.
  1537.  
  1538.   For this example, let's first click on the xclock. You will see a
  1539.   couple things appear in the editres window. These are the configurable
  1540.   branches that the toolkit sees. Click on the bottom right one (clock).
  1541.   It should invert.  Now select ``Show Resource Box'' from the
  1542.   ``Commands'' menu. You will see another window pop up, with the
  1543.   heading ".xclock.clock.unknown". Bingo!
  1544.  
  1545.   >From here you can toy with the configuration options of the main
  1546.   xclock window. First, click on ``Set Save File'' at the bottom, and
  1547.   put in a filename such as /home/yourname/resources, to indicate that
  1548.   you're testing some of the resources here. Now click on ``foreground''
  1549.   and put in ``blue'' next to the ``Enter Resource Value:'' prompt. Then
  1550.   hit ``Apply'' at the bottom. The minute notches around the clock
  1551.   should turn blue. Go to ``background'' and enter ``navajowhite'' (or
  1552.   whatever color you prefer). The apply that. As you can see, we can
  1553.   configure the whole window just fine this way. But if you were to try
  1554.   launching another xclock, it would appear just as this one appeared
  1555.   before any changes. We need to save these changes.
  1556.  
  1557.   Click ``Save'' and then ``Popdown Resource Box'' (a fancy name indeed
  1558.   for the ``Close'' function!). If you view the file you just created
  1559.   (cat /home/yourname/resources perhaps) you will see all those
  1560.   resources spelled out, in correct X Toolkit format, for your
  1561.   convenience. But that does us little good, for if you try launching
  1562.   another xclock, it will still look Plain Jane. So here is the last and
  1563.   final step in loading in your resources:
  1564.  
  1565.  
  1566.  
  1567.         xrdb -merge /home/yourname/resources
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.   This command merges the resources we just wrote into the X Resource
  1574.   Database (xrdb) for your session of X Window.  That means that for all
  1575.   future invocations of the X applications we modified, our changes will
  1576.   take place, and remain binding. So if you run another xclock, it will
  1577.   look as nice as you have just now set it up, every time you run it.
  1578.   Mind you, xrdb is a complex program, and you may want to have a look
  1579.   at the man page before moving on, or playing around with it some more.
  1580.   If you added the modification to .xinitrc listed earlier in this
  1581.   document, to load the resources automatically on X startup, you should
  1582.   only have to worry about the xrdb command when you make changes during
  1583.   your X session.
  1584.  
  1585.   8.3.  The Anatomy of X Resources
  1586.  
  1587.   As you can see we have stumbled across a plethora of configuration
  1588.   options here. This method of configuring X, as has been stated, offers
  1589.   nearly limitless possibilities, and an equivalent amount of confusion.
  1590.   To get some picture of the scope of the resources in just the X
  1591.   Toolkit Intrinsics alone, run the program viewres, and play around
  1592.   with it a bit. This program graphically displays the tree of resources
  1593.   in the Xt Library.
  1594.  
  1595.   If you read the manual page for X, you will find a rather obscure
  1596.   definition of the exact syntax for defining resources it understands.
  1597.   We can simplify this quite a bit and break it down into this essential
  1598.   syntax definition:
  1599.  
  1600.   <program><binding><widget><binding><widget><...><resource>:<value>
  1601.  
  1602.   That doesn't really seem that simple, actually. Well, let's define
  1603.   some things about what has just been said, and it will all start to
  1604.   make sense after all. You can peek ahead to the examples in the next
  1605.   section as you read along, if you wish.
  1606.  
  1607.   The program in this definition is the invocation of an application in
  1608.   the resource database. This would be XTerm for an invocation of xterm,
  1609.   emacs for an invocation of the emacs text editor, or a user-defined
  1610.   name that was given when the applications was launched with the -name
  1611.   command line option. In this way you can define separate resources for
  1612.   xterms which will be used in different ways. Which is pretty cool,
  1613.   really.
  1614.  
  1615.   The binding can be one of two characters to separate the widgets and
  1616.   such.  If you use a . (period), you get a tight binding, which means
  1617.   that one widget is directly above or below the other in the widget
  1618.   hierarchy. This also has the highest precedence of the specification
  1619.   methods. If you use a * (asterisk), you get a so-called loose binding,
  1620.   and you will skip any number of widgets in the hierarchy, and it will
  1621.   attempt to match the next possible widget defined.
  1622.  
  1623.   The widget entries are items in the widget tree, in order of most-
  1624.   specific to least-specific, that they appear in the widget tree,
  1625.   visible with editres.  Any single widget entry can also be replaced
  1626.   with a ? (question mark) to skip a single widget definition, and match
  1627.   any possible widget item.
  1628.  
  1629.   The resource item must be specified, and cannot be replaced with the ?
  1630.   character. This is the most-specific item in the hierarchy, and
  1631.   usually contains items like the actual color to define, actual font to
  1632.   define, and so forth.  In fact, everything else before the resource in
  1633.   this definition can be left out and replaced with a single asterisk,
  1634.   but the actual resource to define must be present. If you just put an
  1635.   asterisk and the most-specific resource name, such as *background:
  1636.   blue, X will attempt to define that resource globally, for all its
  1637.   clients, if possible.
  1638.  
  1639.   Following the colon is the value entry. This entry defines what the
  1640.   resource will be set to, such as a font name or color value. The value
  1641.   can be specified (depending on context) as a boolean, numeric, or text
  1642.   data type. The value entry, also, cannot be omitted in a valid
  1643.   resource definition.
  1644.  
  1645.  
  1646.   8.4.  Making Your Changes Last With .Xdefaults
  1647.  
  1648.   There is a magic file you can put in your home directory called
  1649.   .Xdefaults. If you copy the lines in the resources file from the last
  1650.   example into the .Xdefaults in your home directory, you will never
  1651.   have to configure xclock again! While this might not be the finest
  1652.   example of its utility, it makes its point. This file can be crammed
  1653.   full of every option you prefer for every type of program you run in
  1654.   X, and if you take proper care of it, you can still easily go back and
  1655.   make slight changes when you need to. But making lots of changes, and
  1656.   hunting down lots of subtle resources using editres can be an
  1657.   extremely tiring and painstaking procedure. Indeed, sometimes that's
  1658.   too much work, and most of these resources are already waiting for
  1659.   you, neat and orderly, grouped by program, on your system.
  1660.  
  1661.   In the directory /var/X11R6/lib/app-defaults you will find a great
  1662.   many files, all named after an X Toolkit program. If you examine these
  1663.   files you will find that they contain a great many configuration
  1664.   options for each one, and I do mean a great many! You would not want
  1665.   all of these options from all of these files in your .Xdefaults file,
  1666.   that would be quite tiresome to deal with. These are the defaults, and
  1667.   it is from these that you can decide what you would like to see
  1668.   changed for your particular configuration.
  1669.  
  1670.   The following are some samples from my .Xdefaults file. Notice a few
  1671.   things we have not yet mentioned about the resource definition files.
  1672.   If a line begins with ! (exclamation point), it is considered a
  1673.   comment, and the rest of the line is ignored. If the line begins with
  1674.   #include filename, that line is an include directive, and at that
  1675.   point in the resources another file will be merged, when it is loaded.
  1676.   This can help keep your resource files from becoming too bloated. And
  1677.   here are some examples:
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.    ! Default resources for me@localhost xterms
  1718.    ! start with the generic, move to the specific...
  1719.    *Dialog*Text*font:     -b&h-lucida-medium-r-*-*-12-*-*-*-*-*-*-*
  1720.    *dialog*value*background: white
  1721.    *Dialog*Label*font:    -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*
  1722.    *MenuButton*font:      -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*
  1723.    *MenuButton*background:        grey80
  1724.    *MenuButton*foreground:        black
  1725.    *Label.font:           -adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*
  1726.    *Label*shadowWidth:    1
  1727.    *SmeBSB.font:          -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*
  1728.    *SimpleMenu*font:      -adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*
  1729.    *OptionMenu*font:      -adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*
  1730.    *Command.font:         -linotype-helvetica-bold-r-narrow-*-12-*-*-*-*-*-*-*
  1731.    *commandBox*font:      -b&h-lucida-bold-r-*-*-12-*-*-*-*-*-*-*
  1732.    *Toggle.font:          -adobe-helvetica-bold-o-*-*-12-*-*-*-*-*-*-*
  1733.    *Form.background:      grey70
  1734.    *TransientShell*Dialog.background: grey70
  1735.    *Scrollbar.Foreground: grey80
  1736.    *Scrollbar.Background: grey50
  1737.    *Scrollbar*cursorName: top_left_arrow
  1738.    *Scrollbar*width:      16
  1739.    *shapeStyle:           Rectangle
  1740.    *XlwMenu.shadowThickness: 1
  1741.    *shadowWidth:          1
  1742.  
  1743.    ! xterm stuff
  1744.    xterm*scrollbar.background: grey40
  1745.    xterm*foreground: grey90
  1746.    xterm*background: grey25
  1747.    xterm*cursorColor: white
  1748.    xterm*visualbell: on
  1749.    ! rxvt stuff (a quicker, better xterm)
  1750.    rxvt*color12: steelblue
  1751.    rxvt*color15: white
  1752.    rxvt*color9: rgb:ff/7f/5f
  1753.    rxvt*foreground: grey90
  1754.    rxvt*background: grey10
  1755.    rxvt*cursorColor: white
  1756.    rxvt*font: lucidasanstypewriter-12
  1757.    rxvt*loginShell: false
  1758.    rxvt*saveLines: 1024
  1759.    rxvt*title: shell
  1760.    rxvt*geometry: 80x25
  1761.    ! Make Xman just a little bit more sane
  1762.    xman*topBox: false
  1763.    xman*background: lightsteelblue
  1764.    xman*foreground: black
  1765.    ! xcalc is too bland by default...
  1766.    xcalc*Command.font: -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
  1767.    xcalc*customization: -color
  1768.    ! Disallow the <blink> tag in Netscape
  1769.    Netscape*blinkingEnabled: False
  1770.  
  1771.    ! Merge other resources (example)
  1772.    # include $HOME/.otherXresources
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.   One word of warning with regard to X resources.  KDE users will find
  1779.   that their X resources are ignored.  That's right.  They are.  I'm not
  1780.   actually aware of any way to get around this at present, nor have I
  1781.   looked into it extensively. KDE configures your resources for you, so
  1782.   that all your X applications have the same look and feel, sort of.
  1783.   This can be very disorienting if you're switching between window
  1784.   managers. If anybody knows how to get around this (read: fix it ;)
  1785.   please let me know.
  1786.  
  1787.  
  1788.   8.5.  Your Own User Resource Directory
  1789.  
  1790.   You can also create a directory of resource files, just like the
  1791.   system-wide app-defaults directory mentioned above, with one file per
  1792.   program. Just create the directory (for our example we'll use app-
  1793.   defaults under your home directory,) and then set the environment
  1794.   variable XAPPLRESDIR to point to it. A good place to set this variable
  1795.   would be in the beginning of your .xinitrc file, for example, put in
  1796.   the line export XAPPLRESDIR=$HOME/app-defaults (if your files are
  1797.   going to be in an app-defaults directory under your home directory).
  1798.  
  1799.   Now, whenever you start an X program, this directory will be searched
  1800.   for a file with the same name as the resource name of the program,
  1801.   just like the system-wide directory.  This is the client name that you
  1802.   used in .Xdefaults files.
  1803.  
  1804.   For example, a file called XTerm could contain the line *background:
  1805.   gold, and all your xterms would, by default, come up with a gold
  1806.   background. This is a nice alternative to a single .Xdefaults file,
  1807.   and makes it more clear when trying to decide which settings to
  1808.   configure later on, and to find the ones for a certain program. There
  1809.   are still uses for the .Xdefaults, though.  It's useful for setting
  1810.   resources not bound to a single program, like modifications that you
  1811.   would make to turn all of a certain kind of button blue, regardless of
  1812.   the application.
  1813.  
  1814.  
  1815.   9.  Clients and Application Tips
  1816.  
  1817.   We have covered a few clients in X, and this section will cover some
  1818.   more.  We will limit our discussion here to the most basic and
  1819.   important core items, those which come with X or you are likely to
  1820.   find yourself using with X. If you have installed an integrated
  1821.   desktop environment such as KDE or GNOME, you will have many others to
  1822.   choose from which likely perform many of the same functions. However,
  1823.   it is important to know about and understand many of the fundamental
  1824.   programs in X, because they can be very useful for working with your
  1825.   environment and such.  Also X offers many new options that even your
  1826.   normal console applications can take advantage of.
  1827.  
  1828.  
  1829.   9.1.  Screen Savers for X
  1830.  
  1831.   A common feature of many operating systems is the ability to blank the
  1832.   screen after a specified amount of time, and optionally display some
  1833.   sort of nifty graphics demo thing, a screen saver.  There are a couple
  1834.   ways to do that in X, too.
  1835.  
  1836.   The most basic way to use this feature is by putting a command in your
  1837.   .xinitrc startup file such as xset dpms 2400 3600 4800.   The xset
  1838.   program can configure the screen saving features of  the X server, not
  1839.   to be confused with the screen blanking that the  kernel does when you
  1840.   are at the text console.  With the dpmi  option, X can use the power
  1841.   saving features of your monitor as well.   The first option configures
  1842.   how many seconds before the screen blanks,  the second option is how
  1843.   many seconds before the power saving  feature starts, and the third
  1844.   option is for the "off" mode.  Turning on an option implicitly enables
  1845.   the feature, setting a feature  to zero explicitly disables it.
  1846.  
  1847.   Many Linux distributions come with xlock preinstalled, or as an
  1848.   option.  This is a pretty basic and fairly nice screen saver.  If you
  1849.   run it with the -nolock option, you can see some of the modes that it
  1850.   offers, and if you leave that option off, it will ask you for a
  1851.   password when you move the mouse or press a key, as a security
  1852.   feature.  Note that this is no real security, for at a Linux console a
  1853.   user could restart the computer or just drop out of X with a
  1854.   combination of keystrokes.  The last method can be disabled, however,
  1855.   and if you are using xdm, it will offer as much security as your
  1856.   login, so it may be that only rebooting will let someone in.
  1857.  
  1858.   A newer and better program is xscreensaver by Jamie Zawinski.  This
  1859.   program offers a great many niceties, for instance, it can run its
  1860.   processes at a nicer priority level, lessening the load to the system
  1861.   while it's running, and it automatically detects when the screen has
  1862.   been powered down by xset and doesn't waste processor time. Also, all
  1863.   of the graphics routines it calls are modular demos, and you can add
  1864.   routines without upgrading the whole package, and it can also call
  1865.   other programs, such as xearth or xdaliclock, as modules.
  1866.  
  1867.   The latest version of xscreensaver can be found at
  1868.   <http://www.jwz.org/xscreensaver/>.  Once you get it installed and
  1869.   ready to go, here are some nice additions you might wish to add to
  1870.   your .Xdefaults file:
  1871.  
  1872.  
  1873.  
  1874.         !!! some XScreenSaver sample defaults
  1875.         ! Time out after 3 minutes, cycle mode after each 2
  1876.         xscreensaver.timeout: 3
  1877.         xscreensaver.cycle: 2
  1878.         ! Run very low priority, and fade between modes
  1879.         xscreensaver.nice: 12
  1880.         xscreensaver.fadeSeconds: 2
  1881.  
  1882.  
  1883.  
  1884.  
  1885.  
  1886.  
  1887.   9.2.  Emacs and XEmacs
  1888.  
  1889.   If you are a fan of the text editor EMACS, or just someone who uses it
  1890.   a lot, you will find your work even easier in X Windows.  If you have
  1891.   not tried XEmacs, you may want to get it for use in X.  There are
  1892.   features in XEmacs that are nice even if you are not in X, for
  1893.   instance, your text can be colored to match the markup style you are
  1894.   editing automatically.  You should give the following modification to
  1895.   your .emacs file a shot, and read the info pages for more options.
  1896.   Also look for an option to edit faces in the menus.
  1897.  
  1898.  
  1899.  
  1900.         (global-font-lock-mode t)
  1901.         (setq font-lock-maximum-decoration t)
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.   9.3.  Some Useful Programs and Tricks
  1909.  
  1910.  
  1911.  
  1912.      appres
  1913.         The appres program prints the resources seen by an application
  1914.         (or sub-hierarchy of an application) with the specified class
  1915.         and instance names.  It can be used to determine which resources
  1916.         a particular program will load.  Useful for debugging your X
  1917.         defaults and such.
  1918.  
  1919.  
  1920.      rclock
  1921.         Many distributions come with this nice replacement for xclock,
  1922.         which saves memory, alerts you when your mail comes, and can pop
  1923.         up reminder messages and launch programs.  The Battery-Powered
  1924.         Mini-HOWTO contains instructions on patching this utility to
  1925.         show how much battery is left in your laptop, too.
  1926.  
  1927.  
  1928.      rxvt
  1929.         A nice replacement for xterm - uses less memory, works faster,
  1930.         lets you put in a background pixmap, and lets you switch fonts
  1931.         with keyboard hotkeys, rather than menus.
  1932.  
  1933.  
  1934.      xcpustate
  1935.         Displays CPU state (idle, nice, system, kernel) statistics, as
  1936.         well as Ethernet information.
  1937.  
  1938.  
  1939.      xearth
  1940.         Display the earth on your root window, many options for display
  1941.         available. Xscreensaver can use this as a screensaver module,
  1942.         for maximum fun.
  1943.  
  1944.  
  1945.      xfig
  1946.         A vector drawing program, particularly useful for charts and
  1947.         documentation. Quite useful but hard to get the hang of at
  1948.         first.
  1949.  
  1950.  
  1951.      xfontsel
  1952.         Font selection utility for X Window.  Try the command xterm -fn
  1953.         `xfontsel -print` & to pick a font and then open the xterm
  1954.         window using that font.
  1955.  
  1956.  
  1957.      xload
  1958.         Monitor your memory usage with a moving graph or the lights on
  1959.         your keyboard! If you use Window Maker, look for wmmon to do the
  1960.         same, but prettier.
  1961.  
  1962.  
  1963.      xmag
  1964.         A magnifying glass for X, with a couple other useful features.
  1965.  
  1966.  
  1967.      xman
  1968.         Manual page browser for X.  If the little box it starts with
  1969.         gets annoying, launch it with the -notopbox option.
  1970.  
  1971.  
  1972.      xmodmap
  1973.         Edit and display the keyboard modifier map and keymap table that
  1974.         are used by client applications to convert event keycodes into
  1975.         keysyms, usually run from user's startup script. An example was
  1976.         given earlier in this document, see the man pages for more info.
  1977.  
  1978.  
  1979.      xpaint
  1980.         Basic bitmap painting program, for any real work you should grab
  1981.         GIMP <http://www.gimp.org/>.
  1982.  
  1983.  
  1984.      xset
  1985.         User preference utility for X. You can change all sorts of stuff
  1986.         with this.  For instance, xset s 600 sets the screen to blank
  1987.         after ten minutes.
  1988.  
  1989.  
  1990.      xsetroot
  1991.         Change the color of your desktop.  If you have a color selector
  1992.         program like xcolorsel installed, try a command like xsetroot
  1993.         -solid `xcolorsel` to pick a color and set your desktop to that
  1994.         color.
  1995.  
  1996.  
  1997.      xwininfo
  1998.         You can run this program and click on any window for lots of
  1999.         useful information about it.
  2000.  
  2001.  
  2002.      The Intellimouse
  2003.         You can use the Intellimouse in X with a great many
  2004.         applications.  There is an excellent resource page located at
  2005.         <http://www.inria.fr/koala/colas/mouse-wheel-scroll/>.
  2006.  
  2007.  
  2008.  
  2009.   9.4.  Libraries and Compiling X Applications
  2010.  
  2011.   Sooner or later you will have to deal with compiling applications of
  2012.   your own. Later, if you just installed a nice distribution of linux,
  2013.   and are happy with what you've got, sooner, if you're the kind of
  2014.   person who likes to tinker and install. Remember, this is a privelage,
  2015.   not a right, so have fun with it!
  2016.  
  2017.   First, a few pointers on compiling programs with X. Many newer
  2018.   applications, GNU applictions in particular, come with a script in the
  2019.   root directory called configure.  This assumes of course that you've
  2020.   extracted the file and are in the directory. This program should be
  2021.   run as ./configure, and will automatically detect many things about
  2022.   your system.  Afterwards, simply running make and perhaps becoming
  2023.   root and running make install will get the program up on your system.
  2024.  
  2025.   You may have to do a little more tinkering if you do not have a
  2026.   configure script available. Many X programs require you to run a
  2027.   program to make the Makefile, called xmkmf.  If you don't see a
  2028.   Makefile in your directory, this will sometimes work, and will
  2029.   generate a suitable configuration for you, and you'll be ready to make
  2030.   from there.
  2031.  
  2032.   Sometimes you will have run the configure script, and have been warned
  2033.   that you lack a library that would be helpful or necessary to properly
  2034.   use that application. For instance, I recently installed the
  2035.   xscreensaver application, and found that it would support several 3D
  2036.   modes if the Mesa library was installed. If you run into this
  2037.   situation and want that library installed, the first thing you should
  2038.   do is check the CD or installation media for your Linux distribution
  2039.   to see if you have the library on there.  That may save you lots of
  2040.   trouble trying to compile the library.
  2041.  
  2042.   Once you get a library compiled and installed and ready to use, you
  2043.   can go back to the directory you were installing your X program from,
  2044.   remove the config.cache file, and run the configure script again.
  2045.   Hopefully it will find the library you have installed. Sometimes it
  2046.   does not, and you have to tinker to get it working. This happens
  2047.   occasionally with libraries you download off the net, that do not
  2048.   adequately support the Linux File System Standard (most do, however).
  2049.  
  2050.  
  2051.   9.5.  Basic X Security
  2052.  
  2053.   It has often been said that X has a very simple security model: All or
  2054.   Nothing. This is not much of an exaggeration at all. X can be
  2055.   configured to use somewhat sophisticated security, via encryption, but
  2056.   that is beyond the scope of this HOWTO (for the present).  It is
  2057.   assumed that the user is not using any encryption for this discussion.
  2058.  
  2059.   First of all, you should try and follow some simple rules when you're
  2060.   compiling programs for X (or for any reason, really).  Try not to
  2061.   become root any more than necessary.  Configure your programs as a
  2062.   normal user with the ./configure && make (or just make if there's no
  2063.   configure script), and then issue the single command to install it as
  2064.   root by typing su -c "make install", and then typing in the root
  2065.   password at the prompt.  That way you won't have to be logged in as
  2066.   root, you can just issue a single command, and you're back to your
  2067.   normal user prompt. This is a smart, safe way to install software.
  2068.  
  2069.   The next thing to think about is running X software as root. Realize
  2070.   that X is more or less inherently insecure, and if your primary
  2071.   concern for a particular Linux box is security, you really don't want
  2072.   to install X at all! Having said that, some folks want to run nice
  2073.   fancy configuration programs or package management tools in X. I do
  2074.   not recommend starting X as root. It's just not a good idea.  There's
  2075.   much, much better ways to do these things!
  2076.  
  2077.   If you want to run an X application as root, just log in under your
  2078.   normal user account, and launch it from there. As I mentioned above,
  2079.   you don't want to be logged in as root any more than absolutely
  2080.   necessary. The root user has the ability to do just about anything on
  2081.   the system, including about a million ways to destroy it completely.
  2082.   Simply go to your xterm or such application and type in a command such
  2083.   as su -c "glint -display :0.0" to launch the window on your desktop.
  2084.   Now you have a single window running as root, and not the whole
  2085.   desktop. You might also want to consider using the complete pathname
  2086.   to the program you're running as root, for extra security.
  2087.  
  2088.  
  2089.   10.  Bibliography and Other Resources
  2090.  
  2091.   There is lots of information on X Window to be found, on your computer
  2092.   right now, on the Internet, and in some excellent books available at
  2093.   your favorite bookseller. Give some of the following resources a try,
  2094.   they have been extremely helpful to the author, and can be extremely
  2095.   helpful to you, too.
  2096.  
  2097.  
  2098.   ╖  Check the Linux  Documentation Project <http://metalab.unc.edu/LDP>
  2099.      website for a lot more documentation on Linux, X, and related
  2100.      items.
  2101.  
  2102.   ╖  <http://www.x11.org/>is sort of a clearinghouse for all things X.
  2103.  
  2104.   ╖  <http://www.themes.org/>is a headquarters for themes for various
  2105.      window managers.
  2106.  
  2107.   ╖  The X Consortium's web site is  <http://www.x.org/>... or perhaps
  2108.      it's moved to  <http://www.opengroup.com/>.
  2109.  
  2110.   ╖  XFree86 can be found at <http://www.xfree86.org/>.
  2111.  
  2112.  
  2113.   ╖  The O'Reilly series on X Window! Visit  <http://www.ora.com/>for
  2114.      the definitive books on X.
  2115.  
  2116.   ╖  Much more information on using TrueType with X is at
  2117.      <http://www.freetype.org/>.
  2118.  
  2119.   ╖  The man pages for X, xterm, XFree86, and for any other clients you
  2120.      find yourself using often, are very useful and quite information-
  2121.      packed, and highly recommended.  As the oft-repeated saying goes,
  2122.      RTFM.
  2123.  
  2124.   ╖  There is a Remote X Apps MINI-HOWTO that is very helpful in
  2125.      figuring out how to run local and remote clients with X.
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.  
  2142.  
  2143.  
  2144.  
  2145.  
  2146.  
  2147.  
  2148.  
  2149.  
  2150.  
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.