XScreenSaver - X11 Screen Saver extension client library


   #include <X11/extensions/scrnsaver.h>

   typedef struct {
       Window window;                / screen saver window */
       int state;                    / ScreenSaver{Off,On,Disabled} */
       int kind;                     / ScreenSaver{Blanked,Internal,External} */
       unsigned long til_or_since;   / milliseconds */
       unsigned long idle;           / milliseconds */
       unsigned long eventMask;      / events */
   } XScreenSaverInfo;

   typedef struct {
       int type;               / of event */
       unsigned long serial;   / # of last request processed by server */
       Bool send_event;        / true if this came frome a SendEvent request */
       Display *display;       / Display the event was read from */
       Window window;          / screen saver window */
       Window root;            / root window of event screen */
       int state;              / ScreenSaver{Off,On,Cycle} */
       int kind;               / ScreenSaver{Blanked,Internal,External} */
       Bool forced;            / extents of new region */
       Time time;              / event timestamp */
   } XScreenSaverNotifyEvent;

   Bool  XScreenSaverQueryExtension(Display  *dpy, int *event_base_return,
          int *error_base_return);

   Status        XScreenSaverQueryVersion(Display        *dpy,         int
          *major_version_return, int *minor_version_return);

   XScreenSaverInfo *XScreenSaverAllocInfo(void);

   Status    XScreenSaverQueryInfo(Display    *dpy,   Drawable   drawable,
          XScreenSaverInfo *saver_info);

   void XScreenSaverSelectInput(Display *dpy, Drawable drawable,  unsigned
          long mask);

   void  XScreenSaverSetAttributes(Display *dpy, Drawable drawable, int x,
          int y, unsigned int width, unsigned  int  height,  unsigned  int
          border_width,  int  depth,  unsigned  int class, Visual *visual,
          unsigned long valuemask, XSetWindowAttributes *attributes);

   void XScreenSaverUnsetAttributes(Display *dpy, Drawable drawable);

   void XScreenSaverSaverRegister(Display *dpy, int screen, XID xid,  Atom

   Status XScreenSaverUnregister(Display *dpy, int screen);

   Status  XScreenSaverGetRegistered(Display  *dpy,  int screen, XID *xid,
          Atom *type);

   void XScreenSaverSuspend(Display *dpy, Bool suspend);


   The X Window System provides  support  for  changing  the  image  on  a
   display  screen  after  a  user-settable  period of inactivity to avoid
   burning the cathode ray tube phosphors.   However,  no  interfaces  are
   provided  for  the  user  to  control  the  image  that is drawn.  This
   extension allows an external ``screen saver'' client to detect when the
   alternate image is to be displayed and to provide the graphics.

   Current X server implementations typically provide at least one form of
   ``screen saver'' image.  Historically, this has been a copy  of  the  X
   logo  drawn  against  the root background pattern.  However, many users
   have asked for the mechanism  to  allow  them  to  write  screen  saver
   programs  that  provide capabilities similar to those provided by other
   window systems.  In particular, such users often wish  to  be  able  to
   display  corporate logos, instructions on how to reactivate the screen,
   and automatic screen-locking  utilities.   This  extension  provides  a
   means for writing such clients.

   This extension exports the notion of a special screen saver window that
   is mapped above all other windows on a display.  This  window  has  the
   override-redirect   attribute   set  so  that  it  is  not  subject  to
   manipulation by the window manager.  Furthermore, the X identifier  for
   the  window is never returned by QueryTree requests on the root window,
   so it is typically not visible to other clients.

   XScreenSaverQueryExtension returns True if the  XScreenSaver  extension
   is   available   on   the   given   display.    A   client   must  call
   XScreenSaverQueryExtension  before  calling  any   other   XScreenSaver
   function in order to negotiate a compatible protocol version; otherwise
   the client will get undefined behavior (XScreenSaver  may  or  may  not

   If  the  extension is supported, the event number for ScreenSaverNotify
   events is returned in the value pointed to  by  event_base.   Since  no
   additional  errors  are  defined  by  this  extension,  the  results of
   error_base are not defined.

   XScreenSaverQueryVersion returns True if  the  request  succeeded;  the
   values of the major and minor protocol versions supported by the server
   are returned in major_version_return and minor_version_return .

   XScreenSaverAllocInfo  allocates  and   returns   an   XScreenSaverInfo
   structure for use in calls to XScreenSaverQueryInfo.  All fields in the
   structure  are  initialized  to  zero.   If  insufficient   memory   is
   available,  NULL  is  returned.   The  results  of  this routine can be
   released using XFree.

   XScreenSaverQueryInfo returns information about the  current  state  of
   the  screen  server in saver_info and a non-zero value is returned.  If
   the extension is not supported, saver_info is  not  changed  and  0  is

   The  state field specifies whether or not the screen saver is currently
   active and how the til-or-since value should be interpreted:

   Off The screen is not currently being saved; til-or-since specifies the
       number  of  milliseconds  until  the  screen  saver  is expected to

   On  The screen is currently being  saved;  til-or-since  specifies  the
       number of milliseconds since the screen saver activated.

       The screen saver is currently disabled; til-or-since is zero.

   The  kind  field specifies the mechanism that either is currently being
   used or would have been were the screen being saved:

       The video signal to the display monitor was disabled.

       A server-dependent, built-in  screen  saver  image  was  displayed;
       either  no  client  had set the screen saver window attributes or a
       different client had the  server  grabbed  when  the  screen  saver

       The  screen saver window was mapped with attributes set by a client
       using the ScreenSaverSetAttributes request.

   The idle field specifies the number  of  milliseconds  since  the  last
   input was received from the user on any of the input devices.
   The  event-mask field specifies which, if any, screen saver events this
   client has requested using ScreenSaverSelectInput.

   XScreenSaverSelectInput asks that events related to the screen saver be
   generated  for  this client.  If no bits are set in event-mask, then no
   events will be generated.  Otherwise, any combination of the  following
   bits may be set:

           If  this  bit  is  set,  ScreenSaverNotify events are generated
           whenever the screen saver is activated or deactivated.

           If this bit is  set,  ScreenSaverNotify  events  are  generated
           whenever the screen saver cycle interval passes.

   XScreenSaverSetAttributes  sets the attributes to be used the next time
   the external screen saver is activated.  If  another  client  currently
   has  the attributes set, a BadAccess error is generated and the request
   is ignored.
   Otherwise, the specified window attributes are checked as if they  were
   used  in  a  core  CreateWindow  request whose parent is the root.  The
   override-redirect field is ignored as it is implicitly set to True.  If
   the  window  attributes  result  in an error according to the rules for
   CreateWindow, the request is ignored.
   Otherwise, the attributes are stored and will take effect on  the  next
   activation  that  occurs  when  the  server  is  not grabbed by another
   client.  Any resources specified for the  background-pixmap  or  cursor
   attributes  may  be  freed immediately.  The server is free to copy the
   background-pixmap  or  cursor  resources  or  to  use  them  in  place;
   therefore,  the  effect  of changing the contents of those resources is
   undefined.  If the specified colormap no longer exists when the  screen
   saver  activates,  the parent's colormap is used instead.  If no errors
   are generated  by  this  request,  any  previous  screen  saver  window
   attributes set by this client are released.
   When  the  screen saver next activates and the server is not grabbed by
   another client, the screen saver window is created, if  necessary,  and
   set to the specified attributes and events are generated as usual.  The
   colormap  associated  with  the  screen  saver  window  is   installed.
   Finally, the screen saver window is mapped.
   The  window  remains  mapped and at the top of the stacking order until
   the screen saver is deactivated in response to activity on any  of  the
   user  input  devices, a ForceScreenSaver request with a value of Reset,
   or any request that would cause the window to be unmapped.
   If the screen saver activates while the server is  grabbed  by  another
   client,  the  internal  saver  mechanism is used.  The ForceScreenSaver
   request may be used with a value of Active to deactivate  the  internal
   saver and activate the external saver.
   If  the  screen saver client's connection to the server is broken while
   the screen saver is activated and the client's close down mode has  not
   been  RetainPermanent  or  RetainTemporary, the current screen saver is
   deactivated and the internal screen saver is immediately activated.
   When the screen saver deactivates, the screen saver  window's  colormap
   is  uninstalled and the window is unmapped (except as described below).
   The screen saver XID is disassociated with the window  and  the  server
   may,  but  is  not  required  to,  destroy  the  window  along with any
   When the  screen  saver  is  being  deactivated  and  then  immediately
   reactivated  (such  as  when  switching  screen savers), the server may
   leave the screen saver window mapped  (typically  to  avoid  generating

   XScreenSaverUnsetAttributes   instructs   the  server  to  discard  any
   previous screen saver window attributes set by this client.

   XScreenSaverRegister stores  the  given  XID  in  the  _SCREEN_SAVER_ID
   property  (of  the  given  type)  on  the  root window of the specified
   screen.  It returns zero if an error is encountered and the property is
   not changed, otherwise it returns non-zero.

   XScreenSaverUnregister  removes  any  _SCREEN_SAVER_ID  from  the  root
   window of the specified  screen.   It  returns  zero  if  an  error  is
   encountered and the property is changed, otherwise it returns non-zero.

   XScreenSaverGetRegistered  returns  the  XID  and  type  stored  in the
   _SCREEN_SAVER_ID property on the root window of the  specified  screen.
   It  returns zero if an error is encountered or if the property does not
   exist or is not of the correct format; otherwise it returns non-zero.

   XScreenSaverSuspend temporarily suspends the screensaver and DPMS timer
   if suspend is 'True', and restarts the timer if suspend is 'False'.
   This  function  should  be  used  by  applications  that don't want the
   screensaver or DPMS to become activated while they're  for  example  in
   the  process of playing a media sequence, or are otherwise continuously
   presenting visual information to the user while  in  a  non-interactive
   state.  This  function  is  not  intended  to  be called by an external
   screensaver application.
   If XScreenSaverSuspend is called multiple times  with  suspend  set  to
   'True',  it must be called an equal number of times with suspend set to
   'False' in order for  the  screensaver  timer  to  be  restarted.  This
   request  has  no  affect  if  a  client tries to resume the screensaver
   without first having suspended it.  XScreenSaverSuspend can thus not be
   used  by one client to resume the screensaver if it's been suspended by
   another client.
   If a client that has suspended  the  screensaver  becomes  disconnected
   from  the  X  server,  the  screensaver  timer  will  automatically  be
   restarted, unless it's still suspended by  another  client.  Suspending
   the  screensaver  timer  doesn't  prevent  the  screensaver  from being
   forceably activated with the ForceScreenSaver request, or a  DPMS  mode
   from being set with the DPMSForceLevel request.
   XScreenSaverSuspend  also doesn't deactivate the screensaver or DPMS if
   either is active at the time the request to suspend them is received by
   the   X   server.   But  once  they've  been  deactivated,  they  won't
   automatically be activated again, until the  client  has  canceled  the


   XScreenSaverSelectInput,                         XScreenSaverQueryInfo,
   XScreenSaverSetAttributes and XScreenSaverUnsetAttributes will generate
   a BadDrawable error if drawable is not a valid drawable identifier.  If
   any undefined bits are set in event-mask, a BadValue error is generated
   by XScreenSaverSelectInput .


   XScreenSaverSuspend  is  available in version 1.1 and later versions of
   the X Screen Saver Extension.  Version  1.1  was  first  released  with




   Jim Fulton and Keith Packard.


   This API is considered as experimental.  The Xss library major revision
   may be incremented whenever incompatible changes are done  to  the  API
   without notice.  Use with care.


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.

Free Software

Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.

Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.

Free Books

The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.

Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.

Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.