xscreensaver
XScreenSaver(r)                                   XScreenSaver(r)



NAME
       xscreensaver  -  graphics hack and screen locker, launched
       when the user is idle

SYNOPSIS
       xscreensaver [-display host:display.screen] [-timeout int]
       [-cycle  int]  [-lock-mode] [-no-lock-mode] [-lock-timeout
       int] [-visual visual] [-install] [-no-install]  [-verbose]
       [-silent]    [-timestamp]    [-capture-stderr]   [-no-cap-
       ture-stderr]   [-splash]    [-no-splash]    [-nice    int]
       [-mit-extension]    [-no-mit-extension]   [-sgi-extension]
       [-no-sgi-extension]  [-xidle-extension]  [-no-xidle-exten-
       sion]   [-proc-interrupts]   [-no-proc-interrupts]   [-xrm
       resources]

DESCRIPTION
       The xscreensaver program  waits  until  the  keyboard  and
       mouse  have been idle for a period, and then runs a graph-
       ics demo chosen at random.  It turns off as soon as  there
       is any mouse or keyboard activity.

       This  program  can  lock your terminal in order to prevent
       others from using it, though its default mode of operation
       is  merely  to display pretty pictures on your screen when
       it is not in use.

       The benefit that this program has over the combination  of
       the  xlock(k)  and  xautolock(k) programs is the ease with
       which new graphics hacks can be installed.  You don't need
       to  recompile  (or  even re-run) this program to add a new
       display mode.

GETTING STARTED
       For the impatient, try this:

            xscreensaver &
            xscreensaver-demo

       The xscreensaver-demo(o) program should pop  up  a  dialog
       box  that  lets  you experiment with the xscreensaver set-
       tings and graphics modes.

       Note: unlike xlock(k), xscreensaver  has  a  client-server
       model:  the  xscreensaver program is a daemon that runs in
       the  background;  it  is  controlled  by  the   foreground
       xscreensaver-demo(o) and xscreensaver-command(d) programs.

CONFIGURATION
       The easiest way to configure xscreensaver is to simply run
       the  xscreensaver-demo(o) program, and change the settings
       through the GUI.  The rest of this manual  page  describes
       lower level ways of changing settings.

       Options  to  xscreensaver are stored in one of two places:
       in a .xscreensaver file in your home directory; or in  the
       X resource database.  If the .xscreensaver file exists, it
       overrides any settings in the resource database.

       The syntax of the .xscreensaver file is similar to that of
       the  .Xdefaults  file;  for  example,  to  set the timeout
       paramter in the .xscreensaver file, you  would  write  the

       following:

            timeout: 5

       whereas, in the .Xdefaults file, you would write

            xscreensaver.timeout: 5

       If  you  change  a setting in the .xscreensaver file while
       xscreensaver is already running, it will notice this,  and
       reload the file.  (The file will be reloaded the next time
       the screen saver needs to take some action, such as blank-
       ing  or  unblanking  the screen, or picking a new graphics
       mode.)

       If you change a setting in your X resource database, or if
       you  want  xscreensaver to notice your changes immediately
       instead of the next time it wakes up, then you  will  need
       to  tell the running xscreensaver process to re-initialize
       itself, like so:

            xscreensaver-command -restart

       Note that if you changed the .Xdefaults  file,  you  might
       also need to run xrdb(b):

            xrdb < ~/.Xdefaults

       If  you  want  to  set the system-wide defaults, then make
       your edits to the xscreensaver  app-defaults  file,  which
       should  have  been  installed when xscreensaver itself was
       installed.  The app-defaults file will  usually  be  named
       /usr/lib/X11/app-defaults/XScreenSaver, but different sys-
       tems might keep it in  a  different  place  (for  example,
       /usr/openwin/lib/app-defaults/XScreenSaver on Solaris.)

       When  settings  are  changed in the Preferences dialog box
       (see above) the current settings will be  written  to  the
       .xscreensaver  file.   (The  .Xdefaults  file and the app-
       defaults  file  will  never  be  written  by  xscreensaver
       itself.)


       timeout (class Time)
               The  screensaver  will activate (blank the screen)
               after the keyboard and mouse have  been  idle  for
               this many minutes.  Default 10 minutes.

       cycle (class Time)
               After  the  screensaver  has been running for this
               many minutes, the currently running  graphics-hack
               sub-process  will  be killed (with SIGTERM), and a
               new one started.  If this is 0, then the  graphics
               hack will never be changed: only one demo will run
               until  the  screensaver  is  deactivated  by  user
               activity.  Default 10 minutes.

       lock (class Boolean)
               Enable  locking:  before the screensaver will turn
               off, it will require you to type the  password  of
               the  logged-in  user  (really,  the person who ran
               xscreensaver), or the root password.  (Note:  this
               doesn't  work  if  the  screensaver is launched by
               xdm(m) because it can't know the  user-id  of  the
               logged-in user.  See the ``Using XDM(M)'' section,
               below.

       lockTimeout (class Time)
               If locking is enabled, this controls the length of
               the  ``grace period'' between when the screensaver
               activates, and when  the  screen  becomes  locked.
               For  example,  if  this  is 5, and -timeout is 10,
               then after 10 minutes, the screen would blank.  If
               there was user activity at 12 minutes, no password
               would be required to un-blank the screen.  But, if
               there  was  user  activity  at 15 minutes or later
               (that is, -lock-timeout minutes after  activation)
               then a password would be required.  The default is
               0, meaning that if  locking  is  enabled,  then  a
               password  will  be  required as soon as the screen
               blanks.

       passwdTimeout (class Time)
               If the screen is locked, then  this  is  how  many
               seconds  the password dialog box should be left on
               the screen before giving up (default 30  seconds.)
               This  should  not  be  too  large: the X server is
               grabbed for the duration that the password  dialog
               box  is up (for security purposes) and leaving the
               server grabbed for too long can cause problems.

       dpmsEnabled (class Boolean)
               Whether power management is enabled.

       dpmsStandby (class Time)
               If power management is enabled, how long until the
               monitor goes solid black.

       dpmsSuspend (class Time)
               If power management is enabled, how long until the
               monitor goes into power-saving mode.

       dpmsOff (class Time)
               If power management is enabled, how long until the
               monitor  powers  down completely.  Note that these
               settings will have no effect  unless  both  the  X
               server and the display hardware support power man-
               agement; not all do.   See  the  Power  Management
               section, below, for more information.

       visualID (class VisualID)
               Specify  which  X visual to use by default.  (Note
               carefully that this resource is  called  visualID,
               not  merely visual; if you set the visual resource
               instead, things will malfunction in  obscure  ways
               for obscure reasons.)

               Legal values for the VisualID resource are:

               default Use   the  screen's  default  visual  (the
                       visual of the root window.)  This  is  the
                       default.

               best    Use  the  visual  which  supports the most
                       colors.  Note, however,  that  the  visual
                       with  the most colors might be a TrueColor
                       visual, which does  not  support  colormap
                       animation.  Some programs have more inter-
                       esting behavior when  run  on  PseudoColor
                       visuals than on TrueColor.

               mono    Use  a monochrome visual, if there is one.

               gray    Use a grayscale or staticgray  visual,  if
                       there  is  one  and  it  has more than one
                       plane (that is, it's not monochrome.)

               color   Use the best  of  the  color  visuals,  if
                       there are any.

               GL      Use  the  visual  that  is best for OpenGL
                       programs.  (OpenGL programs have  somewhat
                       different  requirements  than other X pro-
                       grams.)

               class   where class is one of StaticGray,  Static-
                       Color,  TrueColor, GrayScale, PseudoColor,
                       or  DirectColor.   Selects   the   deepest
                       visual of the given class.

               number  where  number  (decimal  or hex) is inter-
                       preted as a visual id number, as  reported
                       by  the  xdpyinfo(o)  program; in this way
                       you can have finer  control  over  exactly
                       which  visual  gets  used, for example, to
                       select a shallower one than  would  other-
                       wise have been chosen.

               Note  that  this option specifies only the default
               visual that will be used: the visual used  may  be
               overridden on a program-by-program basis.  See the
               description of the programs resource, below.

       installColormap (class Boolean)
               Install a private colormap while  the  screensaver
               is  active,  so that the graphics hacks can get as
               many colors as possible.   This  is  the  default.
               (This  only  applies  when  the  screen's  default
               visual is being used,  since  non-default  visuals
               get  their own colormaps automatically.)  This can
               also be overridden on a per-hack  basis:  see  the
               discussion  of  the  default-n name in the section
               about the programs resource.

       verbose (class Boolean)
               Whether to print diagnostics.  Default false.

       timestamp (class Boolean)
               Whether to print the time of day  along  with  any
               other diagnostic messages.  Default false.

       splash (class Boolean)
               Whether  to  display  a  splash screen at startup.
               Default true.

       splashDuration (class Time)
               How long the splash screen should remain  visible;
               default 5 seconds.

       helpURL (class URL)
               The  splash  screen has a Help button on it.  When
               you press it, it will display the web  page  indi-
               cated here in your web browser.

       loadURL (class LoadURL)
               This  is the shell command used to load a URL into
               your web browser.  The default setting  will  load
               it   into  Netscape  if  it  is  already  running,
               otherwise, will launch a new Netscape  looking  at
               the helpURL.

       demoCommand (class DemoCommand)
               This is the shell command run when the Demo button
               on the splash window is pressed.  It  defaults  to
               xscreensaver-demo.

       prefsCommand (class PrefsCommand)
               This  is the shell command run when the Prefs but-
               ton on the splash window is pressed.  It  defaults
               to xscreensaver-demo -prefs.

       nice (class Nice)
               The  sub-processes created by xscreensaver will be
               ``niced'' to this level, so that  they  are  given
               lower priority than other processes on the system,
               and don't increase the  load  unnecessarily.   The
               default is 10.

               (Higher  numbers  mean lower priority; see nice(e)
               for details.)

       memoryLimit (class MemoryLimit)
               The sub-processes created by xscreensaver will not
               be  allowed to allocate more than this much memory
               (more accurately, this is the maximum  size  their
               address  space  may  become.)   If any sub-process
               tries to allocate more than this,  malloc(c)  will
               fail,  and the process will likely exit (or safely
               crash) rather than going forth and hogging memory.

               The  assumption here is that if one of the screen-
               hacks is trying to use a lot of memory, then some-
               thing has gone wrong, and it's better to kill that
               program than to overload the machine.

               Default: 50M.

       fade (class Boolean)
               If this is true, then when the  screensaver  acti-
               vates,  the  current  contents  of the screen will
               fade to black instead of simply winking out.  This
               only  works  on  displays with writable colormaps,
               that is, if the screen's default visual is a Pseu-
               doColor  visual.   A  fade  will also be done when
               switching graphics hacks  (when  the  cycle  timer
               expires.)  Default: true.

       unfade (class Boolean)
               If this is true, then when the screensaver deacti-
               vates, the original contents of  the  screen  will
               fade  in  from  black instead of appearing immedi-
               ately.  This only works on displays with  writable
               colormaps,  and  if fade is true as well.  Default
               false.

       fadeSeconds (class Time)
               If fade is true, this is how long the fade will be
               in seconds (default 3 seconds.)

       fadeTicks (class Integer)
               If  fade  is true, this is how many times a second
               the colormap will be changed  to  effect  a  fade.
               Higher  numbers yield smoother fades, but may make
               the  fades  take   longer   than   the   specified
               fadeSeconds  if  your  server isn't fast enough to
               keep up.  Default 20.

       captureStderr (class Boolean)
               Whether xscreensaver should  redirect  its  stdout
               and  stderr  streams  to the window itself.  Since
               its nature is to take over the screen,  you  would
               not  normally  see  error  messages  generated  by
               xscreensaver or the  sub-programs  it  runs;  this
               resource  will  cause  the  output of all relevant
               programs to be drawn  on  the  screensaver  window
               itself,  as  well as being written to the control-
               ling terminal of the screensaver  driver  process.
               Default true.

       font (class Font)
               The  font used for the stdout/stderr text, if cap-
               tureStderr        is        true.          Default
               *-medium-r-*-140-*-m-*  (a  14  point  fixed-width
               font.)

       programs (class Programs)
               The graphics hacks which  xscreensaver  runs  when
               the user is idle.  The value of this resource is a
               string, one sh-syntax command per line.  Each line
               must  contain  exactly one command: no semicolons,
               no ampersands.

               When the screensaver starts up, one  of  these  is
               selected  at  random,  and  run.   After the cycle
               period expires,  it  is  killed,  and  another  is
               selected and run.

               If a line begins with a dash (-) then that partic-
               ular program is disabled: it won't be selected  at
               random  (though you can still select it explicitly
               using the xscreensaver-demo(o) program.)

               If all programs are disabled, then the screen will
               just be made blank.

               To  disable  a  program, it's better to mark it as
               disabled with a dash than to remove  it  from  the
               list.   This  is  because  the  system-wide  (app-
               defaults) and  per-user  (.xscreensaver)  settings
               are merged together, and if a user just deletes an
               entry from their programs  list,  but  that  entry
               still exists in the system-wide list, then it will
               come back.  However, if the user disables it, then
               their setting takes precedence.

               If  the  display has multiple screens, then a dif-
               ferent program will be run for each screen.   (All
               screens are blanked and unblanked simultaniously.)

               Note that you must escape the newlines; here is an
               example   of  how  you  might  set  this  in  your
               ~/.xscreensaver file:


                    programs:  \
                           qix -root                          \n\
                           ico -r -faces -sleep 1 -obj ico    \n\
                           xdaliclock -builtin2 -root         \n\
                           xv -root -rmode 5 image.gif -quit  \n

               Make sure your $PATH environment variable  is  set
               up  correctly  before xscreensaver is launched, or
               it won't be able to find the  programs  listed  in
               the programs resource.

               To  use a program as a screensaver, two things are
               required: that that program draw on the root  win-
               dow  (or  be  able to be configured to draw on the
               root window); and  that  that  program  understand
               ``virtual  root'' windows, as used by virtual win-
               dow managers such as tvtwm(m).   (Generally,  this
               is  accomplished  by  just including the "vroot.h"
               header file in the program's source.)

               If there are some programs that you  want  to  run
               only  when  using a color display, and others that
               you want to run only when using a monochrome  dis-
               play, you can specify that like this:

                           mono:   mono-program  -root        \n\
                           color:  color-program -root        \n\

               More generally, you can specify the kind of visual
               that should be used for the window  on  which  the
               program will be drawing.  For example, if one pro-
               gram works best if it has a colormap, but  another
               works  best if it has a 24-bit visual, both can be
               accommodated:

                           PseudoColor: cmap-program  -root   \n\
                           TrueColor:   24bit-program -root   \n\

               In addition to the symbolic visual names described
               above (in the discussion of the visualID resource)
               one other visual name is supported in the programs
               list:

                default-n
                    This  is  like default, but also requests the
                    use of the default  colormap,  instead  of  a
                    private colormap.  (That is, it behaves as if
                    the -no-install command-line option was spec-
                    ified,  but  only  for this particular hack.)
                    This is  provided  because  some  third-party
                    programs   that   draw  on  the  root  window
                    (notably: xv(v), and xearth(h)) make  assump-
                    tions  about  the  visual and colormap of the
                    root window: assumptions  which  xscreensaver
                    can violate.

               If  you specify a particular visual for a program,
               and that visual does not exist on the screen, then
               that  program  will  not  be  chosen to run.  This
               means that on displays with  multiple  screens  of
               different  depths, you can arrange for appropriate
               hacks to be run on  each.   For  example,  if  one
               screen is color and the other is monochrome, hacks
               that look good in mono can  be  run  on  one,  and
               hacks that only look good in color will show up on
               the other.


       Normally you won't need to change the following resources:


       pointerPollTime (class Time)
               When  server  extensions are not in use, this con-
               trols how frequently xscreensaver checks to see if
               the   mouse  position  or  buttons  have  changed.
               Default 5 seconds.

       windowCreationTimeout (class Time)
               When server extensions are not in use,  this  con-
               trols  the  delay between when windows are created
               and when  xscreensaver  selects  events  on  them.
               Default 30 seconds.

       initialDelay (class Time)
               When  server  extensions  are not in use, xscreen-
               saver will wait this many seconds before selecting
               events  on  existing windows, under the assumption
               that xscreensaver is  started  during  your  login
               procedure,  and  the  window state may be in flux.
               Default 0.  (This used to default to 30, but  that
               was back in the days when slow machines and X ter-
               minals were more common...)

       sgiSaverExtension (class Boolean)
               There are a number of different  X  server  exten-
               sions  which  can  make xscreensaver's job easier.
               The  next  few  resources  specify  whether  these
               extensions  should  be utilized if they are avail-
               able.

               This   resource   controls   whether    the    SGI
               SCREEN_SAVER  server  extension  will  be  used to
               decide whether the user  is  idle.   This  is  the
               default  if  xscreensaver  has  been compiled with
               support for this extension (which is  the  default
               on   SGI  systems.).   If  it  is  available,  the
               SCREEN_SAVER method is faster  and  more  reliable
               than what will be done otherwise, so use it if you
               can.  (This extension is only available on Silicon
               Graphics systems, unfortunately.)

       mitSaverExtension (class Boolean)
               This     resource     controls     whether     the
               MIT-SCREEN-SAVER server extension will be used  to
               decide  whether  the  user  is idle.  However, the
               default for this resource is false,  because  even
               if  this  extension is available, it is flaky (and
               it also makes the fade option not work  properly.)
               Use of this extension is not recommended.

       xidleExtension (class Boolean)
               This  resource  controls  whether the XIDLE server
               extension will be used to decide whether the  user
               is  idle.  This is the default if xscreensaver has
               been compiled with  support  for  this  extension.
               (This  extension  is  only available for X11R4 and
               X11R5 systems, unfortunately.)

       procInterrupts (class Boolean)
               This resource controls  whether  the  /proc/inter-
               rupts  file  should be consulted to decide whether
               the user is idle.  This is the default if xscreen-
               saver has been compiled on a system which supports
               this mechanism (i.e., Linux systems.)

               The benefit to doing this is that xscreensaver can
               note  that the user is active even when the X con-
               sole is not the active one: if the user is  typing
               in  another  virtual  console,  xscreensaver  will
               notice that and will fail to activate.  For  exam-
               ple, if you're playing Quake in VGA-mode, xscreen-
               saver won't wake up in the middle of your game and
               start competing for CPU.

               The  drawback  to  doing  this is that perhaps you
               really do want idleness on the X console to  cause
               the  X  display to lock, even if there is activity
               on other virtual consoles.  If you want that, then
               set  this  option  to  False.  (Or just lock the X
               console manually.)

               The default value for this resource  is  True,  on
               systems where it works.

       overlayStderr (class Boolean)
               If captureStderr is True, and your server supports
               ``overlay'' visuals, then the text will be written
               into  one of the higher layers instead of into the
               same layer as the running screenhack.  Set this to
               False  to  disable that (though you shouldn't need
               to.)

       overlayTextForeground (class Foreground)
               The foreground color used  for  the  stdout/stderr
               text,  if captureStderr is true.  Default: Yellow.

       overlayTextBackground (class Background)
               The background color used  for  the  stdout/stderr
               text, if captureStderr is true.  Default: Black.

       bourneShell (class BourneShell)
               The  pathname  of the shell that xscreensaver uses
               to start subprocesses.  This must be whatever your
               local  variant  of  /bin/sh  is: in particular, it
               must not be csh.

COMMAND-LINE OPTIONS
       xscreensaver  also  accepts  the  following  command  line
       options.   Except  for the -display option, these command-
       line options are all simply shorthand for the X  resources
       described in the Configuration section, above.

       -display host:display.screen
               The  X display to use.  For displays with multiple
               screens, XScreenSaver will manage all  screens  on
               the  display  simultaniously;  the screen argument
               (the ``default'' screen) says which screen  should
               be  used  for  dialog  boxes (the password window,
               Demo Mode, etc.)

       -timeout minutes
               Same as the timeout resource.

       -cycle minutes
               Same as the cycle resource.

       -lock-mode
               Same as setting the lock resource to true.

       -no-lock-mode
               Same as setting the lock resource to false.

       -lock-timeout minutes
               Same as the lockTimeout resource.

       -visual visual
               Same as the visualID resource.

       -install
               Same as setting the  installColormap  resource  to
               true.

       -no-install
               Same  as  setting  the installColormap resource to
               false.

       -verbose
               Same as setting the verbose resource to true.

       -silent Same as setting the verbose resource to false.

       -timestamp
               Same as setting the timestamp resource to true.

       -capture-stderr
               Same as  setting  the  captureStderr  resource  to
               true.

       -no-capture-stderr
               Same  as  setting  the  captureStderr  resource to
               false.

       -splash Same as setting the splash resource to true.

       -no-splash
               Same as setting the splash resource to false.

       -nice integer
               Same as the nice resource.

       -sgi-extension
               Same as setting the sgiSaverExtension resource  to
               true.

       -no-sgi-extension
               Same  as setting the sgiSaverExtension resource to
               false.

       -mit-extension
               Same as setting the mitSaverExtension resource  to
               true.

       -no-mit-extension
               Same  as setting the mitSaverExtension resource to
               false.

       -xidle-extension
               Same as setting  the  xidleExtension  resource  to
               true.

       -no-xidle-extension
               Same  as  setting  the  xidleExtension resource to
               false.

       -proc-interrupts
               Same as setting  the  procInterrupts  resource  to
               true.

       -no-proc-interrupts
               Same  as  setting  the  procInterrupts resource to
               false.

       -xrm resource-specification
               As with all other Xt programs, you can  specify  X
               resources on the command-line using the -xrm argu-
               ment.  Most of the interesting resources have com-
               mand-line equivalents, however.

HOW IT WORKS
       When it is time to activate the screensaver, a full-screen
       black window is created on each  screen  of  the  display.
       Each  window  is created in such a way that, to any subse-
       quently-created programs, it will appear to be a ``virtual
       root''  window.   Because of this, any program which draws
       on the root window (and which understands  virtual  roots)
       can be used as a screensaver.

       When  the  user becomes active again, the screensaver win-
       dows are unmapped, and the running subprocesses are killed
       by  sending  them  SIGTERM.   This is also how the subpro-
       cesses are killed when the screensaver decides  that  it's
       time  to run a different demo: the old one is killed and a
       new one is launched.

       Before launching  a  subprocess,  xscreensaver  stores  an
       appropriate value for $DISPLAY in the environment that the
       child will  receive.   (This  is  so  that  if  you  start
       xscreensaver  with a -display argument, the programs which
       xscreensaver launches will draw on the same  display;  and
       so  that  the child will end up drawing on the appropriate
       screen of a multi-headed display.)

       When the screensaver turns off,  or  is  killed,  care  is
       taken to restore the ``real'' virtual root window if there
       is one.  Because of this, it is  important  that  you  not
       kill  the screensaver process with kill -9 if you are run-
       ning a virtual-root window manager.  If you kill  it  with
       -9,  you may need to restart your window manager to repair
       the damage.  This isn't an issue if you aren't  running  a
       virtual-root window manager.

       For all the gory details, see the commentary at the top of
       xscreensaver.c.

       You can control a running screensaver process by using the
       xscreensaver-command(d) program (which see.)

POWER MANAGEMENT
       Modern X servers contain support to power down the monitor
       after an idle period.  If the monitor  has  powered  down,
       then  xscreensaver will notice this (after a few minutes),
       and will not waste CPU by  drawing  graphics  demos  on  a
       black  screen.  An attempt will also be made to explicitly
       power the monitor back up as  soon  as  user  activity  is
       detected.

       As  of version 3.28, the ~/.xscreensaver file controls the
       configuration of your display's power management settings:
       if  you  have used xset(t) to change your power management
       settings, then xscreensaver will  override  those  changes
       with  the values specified in ~/.xscreensaver (or with its
       built-in defaults, if there  is  no  ~/.xscreensaver  file
       yet.)

       To  change  your  power  management settings, run xscreen-
       saver-demo(o) and change the various timeouts through  the
       user interface.  Alternately, you can edit the ~/.xscreen-
       saver file directly.

       If the power management  section  is  grayed  out  in  the
       xscreensaver-demo(o)  window,  then that means that your X
       server does not support the XDPMS extension, and  so  con-
       trol over the monitor's power state is not available.

       If  you're  using a laptop, don't be surprised if changing
       the DPMS settings has no effect: many laptops have monitor
       power-saving behavior built in at a very low level that is
       invisible to Unix and X.  On such systems, you  can  typi-
       cally only adjust the power-saving delays by changing set-
       tings in the BIOS in some hardware-specific way.

USING XDM(M)
       You can run xscreensaver from your xdm(m) session, so that
       the  screensaver will run even when nobody is logged in on
       the console.

       The trick to using xscreensaver with xdm is this: keep  in
       mind  the  two very different states in which xscreensaver
       will be running:

           1: Nobody logged in.

              If you're thinking of running xscreensaver from XDM
              at  all, then it's probably because you want graph-
              ics demos to be running on the console when  nobody
              is  logged  in  there.   In this case, xscreensaver
              will function only as a screen saver, not a  screen
              locker:  it  doesn't make sense for xscreensaver to
              lock the screen, since nobody  is  logged  in  yet!
              The  only  thing  on  the  screen  is the XDM login
              prompt.

           2: Somebody logged in.

              Once someone has logged in through  the  XDM  login
              window, the situation is very different.  For exam-
              ple: now it makes sense to  lock  the  screen  (and
              prompt  for the logged in user's password); and now
              xscreensaver should consult that user's ~/.xscreen-
              saver file; and so on.

       The  difference  between  these two states comes down to a
       question of, which user is the xscreensaver  process  run-
       ning  as?  For the first state, it doesn't matter.  If you
       start xscreensaver in the usual XDM way, then xscreensaver
       will  probably  end  up running as root, which is fine for
       the first case (the ``nobody logged in'' case.)

       However, once someone is logged in, running as root is  no
       longer  fine:  because  xscreensaver  will  be  consulting
       root's .xscreensaver file instead of that of the logged in
       user,  and  won't  be  prompting  for the logged in user's
       password, and so on.  (This is  not  a  security  problem,
       it's just not what you want.)

       So,  once  someone has logged in, you want xscreensaver to
       be running as that user.  The way to accomplish this is to
       kill  the old xscreensaver process and start a new one (as
       the new user.)

       The simplest way to accomplish all of this is as follows:

           1: Launch xscreensaver before anyone logs in.

              To the file /usr/lib/X11/xdm/Xsetup, add the lines

                   xhost +localhost
                   xscreensaver-command -exit
                   xscreensaver &

              This will run xscreensaver as root,  over  the  XDM
              login  window.   Moving  the  mouse  will cause the
              screen to un-blank, and  allow  the  user  to  type
              their password at XDM to log in.

           2: Restart xscreensaver when someone logs in.

              Near the top of the file /usr/lib/X11/xdm/Xsession,
              add those same lines:

                   xscreensaver-command -exit
                   xscreensaver &

              When someone logs in, this will kill off the exist-
              ing  (root)  xscreensaver  process, and start a new
              one, running as the user who has  just  logged  in.
              If  the user's .xscreensaver file requests locking,
              they'll get it.   They  will  also  get  their  own
              choice  of timeouts, and graphics demos, and so on.

              Alternately, each user could just put  those  lines
              in their personal ~/.xsession files.

       Make  sure  you  have $PATH set up correctly in the Xsetup
       and Xsession  scripts,  or  xdm  won't  be  able  to  find
       xscreensaver,  and/or  xscreensaver  won't be able to find
       its graphics demos.

       (If your system does not seem to be executing  the  Xsetup
       file,  you  may  need to configure it to do so: the tradi-
       tional way to do this is to make that file  the  value  of
       the      DisplayManager*setup      resource     in     the
       /usr/lib/X11/xdm/xdm-config file.  See the  man  page  for
       xdm(m) for more details.)

       It  is  safe to run xscreensaver as root (as xdm is likely
       to do.)  If run as root, xscreensaver changes  its  effec-
       tive  user and group ids to something safe (like "nobody")
       before connecting to the X server or launching user-speci-
       fied programs.

       An  unfortunate  side  effect of this (important) security
       precaution is  that  it  may  conflict  with  cookie-based
       authentication.

       If  you  get  "connection  refused"  errors  when  running
       xscreensaver from xdm, then this probably means  that  you
       have  xauth(h) or some other security mechanism turned on.
       One way  around  this  is  to  add  "xhost +localhost"  to
       Xsetup, just before xscreensaver is launched.

       Note  that this will give access to the X server to anyone
       capable of logging in to the local  machine,  so  in  some
       environments,  this  might not be appropriate.  If turning
       off file-system-based access control  is  not  acceptable,
       then  running  xscreensaver from the Xsetup file might not
       be possible, and xscreensaver will only work when  running
       as a normal, unprivileged user.

       For  more  information  on  the  X server's access control
       mechanisms, see the  man  pages  for  X(X),  Xsecurity(y),
       xauth(h), and xhost(t).

USING GDM(M)
       The  instructions  for  using xscreensaver with gdm(m) are
       almost the same as for using  xdm(m),  above.   There  are
       only   two   differences,   really:   instead  of  editing
       /usr/lib/X11/xdm/Xsetup,       edit        the        file
       /etc/X11/gdm/Init/Default;    and   instead   of   editing
       /usr/lib/X11/xdm/Xsession, edit one or all of the files in
       the  /etc/X11/gdm/Sessions/  directory.   (Note  that  the
       default  session  (/etc/X11/gdm/Sessions/Default)  usually
       simply  executes  /usr/lib/X11/xdm/Xsession, so be careful
       you aren't initializing xscreensaver twice.)

       All the same caveats apply for gdm(m) as for xdm(m).

USING CDE (COMMON DESKTOP ENVIRONMENT)
       The easiest way to use xscreensaver on a system  with  CDE
       is  to simply switch off the built-in CDE screensaver, and
       use xscreensaver instead; and second, to  tell  the  front
       panel to run xscreensaver-command(d) with the -lock option
       when the Lock icon is clicked.

       To accomplish this involves five steps:

           1: Switch off CDE's locker
              Do this by turning off ``Screen  Saver  and  Screen
              Lock''  in the Screen section of the Style Manager.

           2: Edit sessionetc
              Edit the file ~/.dt/sessions/sessionetc and add  to
              it the line

                   xscreensaver &

              And  make  sure  the sessionetc file is executable.
              This will cause xscreensaver to  be  launched  when
              you  log  in.   (As always, make sure that xscreen-
              saver and the graphics demos are on your $PATH; the
              path  needs  to be set in .cshrc and/or .dtprofile,
              not .login.)

           3: Create XScreenSaver.dt
              Create a  file  called  ~/.dt/types/XScreenSaver.dt
              with the following contents:

                   ACTION XScreenSaver
                   {
                     LABEL         XScreenSaver
                     TYPE          COMMAND
                     EXEC_STRING   xscreensaver-command -lock
                     ICON          Dtkey
                     WINDOW_TYPE   NO_STDIO
                   }

              This  defines  a ``lock'' command for the CDE front
              panel, that knows how to talk to xscreensaver.

           4: Create Lock.fp
              Create a file called ~/.dt/types/Lock.fp  with  the



              following contents:

                   CONTROL Lock
                   {
                     TYPE             icon
                     CONTAINER_NAME   Switch
                     CONTAINER_TYPE   SWITCH
                     POSITION_HINTS   1
                     ICON             Fplock
                     LABEL            Lock
                     PUSH_ACTION      XScreenSaver
                     HELP_TOPIC       FPOnItemLock
                     HELP_VOLUME      FPanel
                   }

              This  associates  the CDE front panel ``Lock'' icon
              with the lock command we just defined in step 3.

           5: Restart
              Select ``Restart Workspace Manager'' from the popup
              menu  to  make your changes take effect.  If things
              seem not to be working, check the file ~/.dt/error-
              log for error messages.

USING HP VUE (VISUAL USER ENVIRONMENT)
       Since  CDE  is  a  descendant of VUE, the instructions for
       using xscreensaver under VUE are similar to the above:

           1: Switch off VUE's locker
              Open the ``Style Manager'' and  select  ``Screen.''
              Turn off ``Screen Saver and Screen Lock'' option.

           2: Make sure you have a Session
              Next,  go to the Style Manager's, ``Startup'' page.
              Click on ``Set Home Session'' to create a  session,
              then  on  ``Return to Home Session'' to select this
              session each time you log in.

           3: Edit vue.session
              Edit the file ~/.vue/sessions/home/vue.session  and
              add to it the line

                   vuesmcmd -screen 0 -cmd "xscreensaver"

              This  will  cause  xscreensaver to be launched when
              you log in.  (As always, make  sure  that  xscreen-
              saver and the graphics demos are on your $PATH; the
              path needs to be set in .cshrc and/or .profile, not
              .login.)

           3: Edit vuewmrc
              Edit  the  file  ~/.vue/vuewmrc and add (or change)
              the Lock control:

                   CONTROL Lock
                   {
                     TYPE         button
                     IMAGE        lock
                     PUSH_ACTION  f.exec "xscreensaver-command -lock"
                     HELP_TOPIC   FPLock
                   }

              This associates the VUE front panel  ``Lock''  icon
              with the xscreensaver lock command.


ADDING TO MENUS
       The xscreensaver-command(d) program is a perfect candidate
       for something to add to your window manager's popup menus.
       If  you  use mwm(m), 4Dwm(m), twm(m), or (probably) any of
       twm's many descendants, you can do it like this:

       1. Create ~/.mwmrc (or ~/.twmrc or ...)
          If you don't have a  ~/.mwmrc  file  (or,  on  SGIs,  a
          ~/.4Dwmrc  file;  or,  with  twm, a ~/.twmrc file) then
          create one by making a copy  of  the  /usr/lib/X11/sys-
          tem.mwmrc  file  (or /usr/lib/X11/twm/system.twmrc, and
          so on.)

       2. Add a menu definition.
          Something like this:

               menu XScreenSaver
               {
                "Blank Screen Now" !"sleep 3; xscreensaver-command -activate"
                "Lock Screen Now"  !"sleep 3; xscreensaver-command -lock"
                "Screen Saver Demo"         !"xscreensaver-demo"
                "Screen Saver Preferences"  !"xscreensaver-demo -prefs"
                "Reinitialize Screen Saver" !"xscreensaver-command -restart"
                "Kill Screen Saver"         !"xscreensaver-command -exit"
                "Launch Screen Saver"       !"xscreensaver &"
               }


       3. Add the menu
          For mwm(m) and 4Dwm(m), find the section  of  the  file
          that  says  Menu  DefaultRootMenu.  For twm(m), it will
          probably be menu "defops".  If you add a line somewhere
          in that menu definition that reads

                 "XScreenSaver"        f.menu XScreenSaver

          then  this  will  add  an XScreenSaver sub-menu to your
          default root-window popup menu.  Alternately, you could
          just  put the xscreensaver menu items directly into the
          root menu.

       For  Fvwm2,  the  process  is  similar:  first  create   a
       ~/.fvwm2rc file if you don't already have one, by making a
       copy of the /etc/X11/fvwm2/system.fvwm2rc file.  Then, add
       a menu definition to it:

            AddToMenu XScreenSaver "XScreenSaver" Title
            + "Blank Screen Now"          Exec xscreensaver-command -activate
            + "Lock Screen Now"           Exec xscreensaver-command -lock
            + "Screen Saver Demo"         Exec xscreensaver-command -demo
            + "Screen Saver Preferences"  Exec xscreensaver-command -prefs
            + "Reinitialize Screen Saver" Exec xscreensaver-command -restart
            + "Kill Screen Saver"         Exec xscreensaver-command -exit
            + "Launch Screen Saver"       Exec xscreensaver
            + "Run Next Demo"             Exec xscreensaver-command -next
            + "Run Previous Demo"         Exec xscreensaver-command -prev

            # To put the XScreenSaver sub-menu at the end of the root menu:
            AddToMenu RootMenu "XScreenSaver" Popup XScreenSaver

       The  Enlightenment  window manager keeps each of its menus
       in a separate file. So, you need to create  a  file  named




       ~/.enlightenment/xscreensaver.menu with the contents:

            "XScreenSaver Commands"
             "Blank Screen Now"    NULL exec "xscreensaver-command -activate"
             "Lock Screen Now"     NULL exec "xscreensaver-command -lock"
             "Screen Saver Demo"   NULL exec "xscreensaver-command -demo"
             "Screen Saver Prefs"  NULL exec "xscreensaver-command -prefs"
             "Reinitialize Saver"  NULL exec "xscreensaver-command -restart"
             "Kill Screen Saver"   NULL exec "xscreensaver-command -exit"
             "Launch Screen Saver" NULL exec "xscreensaver"

       then add

             "XScreenSaver"        NULL menu "xscreensaver.menu"

       to ~/.enlightenment/file.menu to put the XScreenSaver sub-
       menu on your left-button root-window menu.

       As you see, every window manager does  this  stuff  gratu-
       itously  differently,  just  to  make your life difficult.
       You are in a maze of twisty menu configuration  languages,
       all alike.

BUGS
       Bugs?   There  are no bugs.  Ok, well, maybe.  If you find
       one,  please  let  me  know.   http://www.jwz.org/xscreen-
       saver/bugs.html  explains how to construct the most useful
       bug reports.

       Locking and XDM
               If xscreensaver  has  been  launched  from  xdm(m)
               before anyone has logged in, you will need to kill
               and then restart the xscreensaver daemon after you
               have  logged  in,  or  you will be confused by the
               results.  (For example, locking  won't  work,  and
               your ~/.xscreensaver file will be ignored.)

               When  you are logged in, you want the xscreensaver
               daemon to be running under your user  id,  not  as
               root or some other user.

               If  it  has  already  been started by xdm, you can
               kill it by sending it the exit command,  and  then
               re-launching  it as you, by putting something like
               the following in your personal X startup script:

                    xscreensaver-command -exit
                    xscreensaver &

               The ``Using XDM(M)''  section,  above,  goes  into
               more  detail,  and  explains  how to configure the
               system to do this for all users automatically.

       Locking and root logins
               In order for it to be safe for xscreensaver to  be
               launched  by  xdm,  certain  precautions had to be
               taken, among them that xscreensaver never runs  as
               root.   In  particular,  if it is launched as root
               (as xdm is likely to do), xscreensaver  will  dis-
               avow  its  privileges, and switch itself to a safe
               user id (such as nobody.)

               An implication of this is that if you  log  in  as
               root  on  the console, xscreensaver will refuse to
               lock the screen (because it can't tell the differ-
               ence  between root being logged in on the console,
               and a normal user being logged in on  the  console
               but  xscreensaver  having  been  launched  by  the
               xdm(m) Xsetup file.)

               The solution to this is simple: you  shouldn't  be
               logging  in  on  the  console as root in the first
               place!  (What, are you crazy or something?)

               Proper Unix hygiene dictates that you  should  log
               in  as  yourself,  and su(u) to root as necessary.
               People who spend their day logged in as  root  are
               just begging for disaster.

       XAUTH and XDM
               For  xscreensaver to work when launched by xdm(m),
               programs running on  the  local  machine  as  user
               "nobody"  must be able to connect to the X server.
               This means that if you want to run xscreensaver on
               the  console  while  nobody  is logged in, you may
               need to disable cookie-based access  control  (and
               allow  all  users  who  can  log  in  to the local
               machine to connect to the display.)

               You should be sure  that  this  is  an  acceptable
               thing  to  do in your environment before doing it.
               See the ``Using XDM(M)'' section, above, for  more
               details.

               If  anyone  has  suggestions  on  how xscreensaver
               could be made to work with  xdm(m)  without  first
               turning   off  .Xauthority-based  access  control,
               please let me know.

       Passwords
               If you  get  an  error  message  at  startup  like
               ``couldn't get password of user'' then this proba-
               bly means that you're on a  system  in  which  the
               getpwent(t)  library  routine  can  only be effec-
               tively used by root.  If this is  the  case,  then
               xscreensaver  must  be installed as setuid to root
               in order for locking to work.  Care has been taken
               to make this a safe thing to do.

               It  also  may  mean  that  your system uses shadow
               passwords  instead  of  the  standard  getpwent(t)
               interface;  in  that  case, you may need to change
               some options with configure and recompile.

               If you change your password after xscreensaver has
               been  launched,  it  will  continue using your old
               password to unlock the screen  until  xscreensaver
               is restarted.  So, after you change your password,
               you'll have to do

                    xscreensaver-command -restart

               to make xscreensaver notice.

       PAM Passwords
               If your system uses PAM (Pluggable  Authentication
               Modules),  then  in  order for xscreensaver to use
               PAM properly, PAM must be told about xscreensaver.
               The   xscreensaver   installation  process  should
               update the PAM data (on  Linux,  by  creating  the
               file   /etc/pam.d/xscreensaver  for  you,  and  on
               Solaris, by telling you what lines to add  to  the
               /etc/pam.conf file.)

               If  the  PAM configuration files do not know about
               xscreensaver, then you might  be  in  a  situation
               where  xscreensaver will refuse to ever unlock the
               screen.

               This is a design flaw in PAM (there is no way  for
               a  client  to  tell  the  difference  between  PAM
               responding ``I have never heard of your  module,''
               and responding, ``you typed the wrong password.'')
               As far as I can tell, there is no way for xscreen-
               saver to automatically work around this, or detect
               the problem in advance, so if you have  PAM,  make
               sure it is configured correctly!

       Colormap lossage: TWM
               The  installColormap option doesn't work very well
               with the twm(m) window  manager  and  its  descen-
               dants.

               There  is a race condition between the screensaver
               and this window manager, which can result  in  the
               screensaver's colormap not getting installed prop-
               erly, meaning the graphics hacks  will  appear  in
               essentially  random  colors.   (If the screen goes
               white instead of black, this is probably why.)

               The mwm(m) and olwm(m) window managers don't  have
               this problem.  The race condition exists because X
               (really, ICCCM) does not  provide  a  way  for  an
               OverrideRedirect  window to have its own colormap,
               short of grabbing the server (which is  neither  a
               good  idea,  nor  really possible with the current
               design.)   What  happens  is  that,  as  soon   as
               xscreensaver  installs  its colormap, twm responds
               to  the  resultant  ColormapNotify  event  by  re-
               instaling  the  default colormap.  Apparently, twm
               doesn't always do this; it seems to  do  it  regu-
               larly  if the screensaver is activated from a menu
               item, but seems to not do it  if  the  screensaver
               comes on of its own volition, or is activated from
               another console.

               Attention, window manager authors!
                   You should only  call  XInstallColormap(p)  in
                   response  to  user  events.   That  is,  it is
                   appropriate to install a colormap in  response
                   to   FocusIn,   FocusOut,   EnterNotify,   and
                   LeaveNotify events; but it is not  appropriate
                   to  call  it  in  response  to  ColormapNotify
                   events.  If you install colormaps in  response
                   to  application actions as well as in response
                   to user actions, then you create the situation
                   where  it  is impossible for override-redirect
                   applications (such as xscreensaver) to display
                   their windows in the proper colors.

       Colormap lossage: XV, XAnim, XEarth
               Some  programs  don't  operate properly on visuals
               other than the  default  one,  or  with  colormaps
               other than the default one.  See the discussion of
               the magic "default-n" visual name in the  descrip-
               tion of the programs resource in the Configuration
               section.  When programs only work with the default

               colormap, you need to use a syntax like this:

                       default-n: xv -root image-1.gif -quit  \n\
                       default-n: xearth -nostars -wait 0     \n\

               It would also work to turn off the installColormap
               option altogether, but that would deny extra  col-
               ors  to  those programs that can take advantage of
               them.

       Machine Load
               Although this program ``nices''  the  subprocesses
               that it starts, graphics-intensive subprograms can
               still overload the machine by causing the X server
               process  itself (which is not ``niced'') to suck a
               lot of cycles.  Care should be taken to slow  down
               programs  intended  for  use  as  screensavers  by
               inserting strategic calls to sleep(p) or usleep(p)
               (or making liberal use of any -delay options which
               the programs may provide.)

               Note that the OpenGL-based graphics demos are real
               pigs on machines that don't have texture hardware.

               Also, an active  screensaver  will  cause  your  X
               server  to  be pretty much permanently swapped in;
               but the same is true of  any  program  that  draws
               periodically, like xclock(k) or xload(d).

       Latency and Responsiveness
               If  the  subprocess is drawing too quickly and the
               connection to the X server is a slow one (such  as
               an  X terminal running over a phone line) then the
               screensaver might not turn off right away when the
               user  becomes  active  again  (the ico(o) demo has
               this problem if being  run  in  full-speed  mode).
               This  can  be  alleviated  by  inserting strategic
               calls to XSync(c) in code intended for  use  as  a
               screensaver.   This  prevents  too  much  graphics
               activity from being buffered up.

       XFree86's Magic Keystrokes
               The  XFree86  X   server   traps   certain   magic
               keystrokes  before  client programs ever see them.
               Two that are of note are Ctrl+Alt+Backspace, which
               causes  the  X  server  to  exit; and Ctrl+Alt+Fn,
               which switches virtual  consoles.   The  X  server
               will  respond to these keystrokes even if xscreen-
               saver has the screen locked.   Depending  on  your
               setup, you might consider this a problem.

               Unfortunately,  there  is  no way for xscreensaver
               itself to override  the  interpretation  of  these
               keys.   If  you want to disable Ctrl+Alt+Backspace
               globally, you need to set the DontZap flag in your
               /etc/X11/XF86Config  file.   See the XF86Config(g)
               manual for details.

               There is no way (as far as I can tell) to  disable
               the VT-switching keystrokes.

               Some  Linux  systems  come  with  a  VT_LOCKSWITCH
               ioctl, that one could theoretically use to prevent
               VT-switching  while  the  screen  is  locked;  but
               unfortunately, this ioctl  can  only  be  used  by
               root,  which  means that xscreensaver can't use it
               (since  xscreensaver   disavows   its   privileges
               shortly after startup, for security reasons.)

               Any  suggestions for other solutions to this prob-
               lem are welcome.

       XView Clients
               Apparently there are some problems with XView pro-
               grams  getting  confused  and  thinking  that  the
               screensaver window is the real  root  window  even
               when the screensaver is not active: ClientMessages
               intended for the window manager are  sent  to  the
               screensaver  window instead.  This could be solved
               by making xscreensaver  forward  all  unrecognised
               ClientMessages  to the real root window, but there
               may be other problems as well.  If anyone has  any
               insight  on  the cause of this problem, please let
               me know.  (XView is an X11 toolkit that implements
               the  (quite  abominable)  Sun  OpenLook  look-and-
               feel.)

       MIT Extension and Fading
               The MIT-SCREEN-SAVER extension is junk.  Don't use
               it.

               When  using the MIT-SCREEN-SAVER extension in con-
               junction with the fade option,  you'll  notice  an
               unattractive  flicker just before the fade begins.
               This is because the server  maps  a  black  window
               just  before  it tells the xscreensaver process to
               activate.  The  xscreensaver  process  immediately
               unmaps that window, but this results in a flicker.
               I haven't figured a way  to get  around  this;  it
               seems  to  be a fundamental property of the (mis-)
               design of this server extension.

               It sure would be nice if someone  would  implement
               the  SGI  SCREEN_SAVER  extension in XFree86; it's
               dead  simple,  and  works  far  better  than   the
               overengineered  and broken MIT-SCREEN-SAVER exten-
               sion.

       SGI Power Saver
               If you're running Irix 6.3, you  might  find  that
               your monitor is powering down after an hour or two
               even if you've told it not to.  This is  fixed  by
               SGI patches 2447 and 2537.

               If  you're  running Irix 6.5, this bug is back.  I
               don't know a fix.

       MesaGL and Voodoo Cards
               If you have a 3Dfx/Voodoo card, the  default  set-
               tings  for  xscreensaver  will  run  the  GL-based
               graphics demos in such a way that  they  will  not
               take  advantage  of  the 3D acceleration hardware.
               The solution is to change the programs entries for
               the GL hacks from this:

                           gears -root                        \n\

               to this:

                           MESA_GLX_FX=fullscreen  gears      \n\

               That  is,  make  sure  that $MESA_GLX_FX is set to
               fullscreen, and don't tell the program to draw  on
               the  root  window.  This may seem strange, but the
               setup used by Mesa and these  kinds  of  cards  is
               strange!

               For those who don't know, these cards work by sit-
               ting between your normal video card and the  moni-
               tor,  and seizing control of the monitor when it's
               time to do 3D.  But this means that accelerated 3D
               only  happens in full-screen mode (you can't do it
               in a window, and you can't see the  output  of  3D
               and  2D programs simultaniously), and that 3D will
               probably drive your monitor at a lower resolution,
               as well.  It's bizarre.

               If  you  find  that GL programs only work properly
               when run as root, and not as  normal  users,  then
               the  problem  is  that  your /dev/3dfx file is not
               configured properly.  Check the Linux 3Dfx FAQ.

       Keyboard LEDs
               If procInterrupts is on (which is the  default  on
               Linux  systems) and you're using some program that
               toggles the state of your keyboard LEDs,  xscreen-
               saver  won't  work right: turning those LEDs on or
               off causes a keyboard  interrupt,  which  xscreen-
               saver  will  interpret  as  user  activity.  So if
               you're using such a program,  set  the  procInter-
               rupts resource to False.

       Extensions
               If  you  are  not  making use of one of the server
               extensions  (XIDLE,  SGI  SCREEN_SAVER,  or   MIT-
               SCREEN-SAVER), then it is possible, in rare situa-
               tions, for xscreensaver to  interfere  with  event
               propagation  and  make  another X program malfunc-
               tion.  For this to occur, that  other  application
               would  need  to  not select KeyPress events on its
               non-leaf windows within the first  30  seconds  of
               their  existence,  but then select for them later.
               In this case, that client might  fail  to  receive
               those  events.  This isn't very likely, since pro-
               grams generally select a constant  set  of  events
               immediately  after creating their windows and then
               don't change them, but this  is  the  reason  that
               it's  a  good  idea  to install and use one of the
               server extensions instead,  to  work  around  this
               shortcoming in the X protocol.

               In  all these years, I've not heard of even a sin-
               gle case of this happening, but  it  is  theoreti-
               cally possible, so I'm mentioning it for complete-
               ness...

       Red Hot Lava
               There need to be a lot more  graphics  hacks.   In
               particular,  there  should  be  a  simulation of a
               Lavalite (tm).

ENVIRONMENT
       DISPLAY to get the default host and display number, and to
               inform  the sub-programs of the screen on which to
               draw.

       PATH    to find the sub-programs to run.

       HOME    for the directory in which to read and  write  the
               .xscreensaver file.

       XENVIRONMENT
               to  get the name of a resource file that overrides
               the global resources stored in  the  RESOURCE_MAN-
               AGER property.

UPGRADES
       The    latest    version    can   always   be   found   at
       http://www.jwz.org/xscreensaver/

SEE ALSO
       X(X),    xscreensaver-demo(o),    xscreensaver-command(d),
       xscreensaver-gl-helper(r),  xdm(m), xset(t), Xsecurity(y),
       xauth(h), xhost(t).  ant(t),  atlantis(s),  attraction(n),
       blitspin(n),  bouboule(e), braid(d), bsod(d), bubble3d(d),
       bubbles(s), cage(e),  compass(s),  coral(l),  critical(l),
       crystal(l),    cynosure(e),    decayscreen(n),    deco(o),
       deluxe(e), demon(n),  discrete(e),  distort(t),  drift(t),
       epicycle(e), fadeplot(t), flag(g), flame(e), flow(w), for-
       est(t),   galaxy(y),   gears(s),   glplanet(t),   goop(p),
       grav(v),  greynetic(c),  halo(o),  helix(x),  hopalong(g),
       hypercube(e),  ifs(s),  imsmap(p),  interference(e),  jig-
       saw(w),  julia(a),  kaleidescope(e), kumppa(a), lament(t),
       laser(r),  lightning(g),  lisa(a),  lissie(e),  lmorph(h),
       loop(p),   maze(e),   moebius(s),   moire(e),   moire2(2),
       morph3d(d), mountain(n), munch(h),  noseguy(y),  pedal(l),
       penetrate(e), penrose(e), petri(i), phosphor(r), pipes(s),
       pulsar(r),   pyro(o),   qix(x),   rd-bomb(b),    rocks(s),
       rorschach(h),     rotor(r),    rubik(k),    sierpinski(i),
       slidescreen(n), slip(p), sonar(r),  sphere(e),  spiral(l),
       spotlight(t),    sproingies(s),   squiral(l),   stairs(s),
       starfish(h),   strange(e),   superquadrics(s),   swirl(l),
       t3d(d),   triangle(e),  truchet(t),  vines(s),  wander(r),
       worm(m),  xflame(e),   xjack(k),   xlyap(p),   xmatrix(x),
       bongo(o),  ico(o),  xaos(s),  xbouncebits(s), xcthugha(a),
       xdaliclock(k), xfishtank(k), xmountains(s), xsplinefun(n),
       xswarm(m), xtacy(y), xv(v), chbg(g), xwave(e).

COPYRIGHT
       Copyright  (C)  1991,  1992, 1993, 1994, 1995, 1996, 1997,
       1998, 1999, 2000, 2001 by Jamie Zawinski.   Permission  to
       use,  copy, modify, distribute, and sell this software and
       its documentation for any purpose is hereby granted  with-
       out  fee,  provided that the above copyright notice appear
       in all copies and that both that copyright notice and this
       permission  notice appear in supporting documentation.  No
       representations are made about  the  suitability  of  this
       software  for any purpose.  It is provided "as is" without
       express or implied warranty.

AUTHOR
       Jamie Zawinski <jwz@jwz.org>.  Written in late 1991; first
       posted to comp.sources.x on 13-Aug-1992.

       Please  let  me  know  if  you  find  any bugs or make any
       improvements.

ACKNOWLEDGEMENTS
       Thanks to Angela Goodman for the XScreenSaver logo.

       Thanks to the many people who  have  contributed  graphics
       demos to the package.

       Thanks to David Wojtowicz for implementing lockTimeout.

       Thanks  to  Martin  Kraemer  for adding support for shadow
       passwords and locking-disabled diagnostics.

       Thanks to Patrick Moreau for the VMS port.

       Thanks to Mark Bowyer for figuring out how to hook  it  up
       to CDE.

       Thanks to Nat Lanza for the Kerberos support.

       Thanks to Bill Nottingham for the initial PAM support.

       And  thanks  to  Jon  A.  Christopher for implementing the
       Athena dialog support, back in the days before Lesstif  or
       Gtk were viable alternatives to Motif.



X Version 11            25-Oct-2001 (3.34)        XScreenSaver(r)