ScreenSaverWrapper

xscreensaver

Detect

  • Use $DISPLAY and search to find a window with the unique XA_SCREENSAVER_VERSION property.

  • xscreensaver-demo (the control panel) is driver/demo-Gtk.c and uses:

    xscreensaver_running_p (state *s)
    {
      char *rversion = NULL;
      server_xscreensaver_version (dpy, &rversion, 0, 0);
      return rversion != NULL;
    }
  • To do it from the command line:

    $ xscreensaver-command -version
    xscreensaver-command: no screensaver is running on display :0.0

Communicate

  • Uses $DISPLAY and then send a custom XAtom via an Xevent:

    $ xscreensaver-command -deactive
    
    XA_DEACTIVATE = XInternAtom (dpy, "DEACTIVATE", False);
    if (!strncmp (s, "-deactivate", L)) cmd = &XA_DEACTIVATE;
    event.xclient.message_type = XA_SCREENSAVER;
    event.xclient.data.l[0] = (long) command;

Notes

  • after matching, xscreensaver-4.23/driver/screensaver-command.c which calls into remote.c for the dirty work.

gnome-screensaver

  • gnome-screensaver-2.13.92/src/gnome-screensaver-command.c:

Detect

  • Use the Session DBus to check for org.gnome.ScreenSaver being owned:

    connection = dbus_bus_get (DBUS_BUS_SESSION, &dbus_error);
    dbus_bus_name_has_owner(connection, "org.gnome.ScreenSaver");
  • On the command-line:

    $ gnome-screensaver-command --version
    gnome-screensaver-command 2.14.0

Communicate

  • Sends a Message over the session DBus:

    message = dbus_message_new_method_call(
      "org.gnome.ScreenSaver",
      "/org/gnome/ScreenSaver",
      "org.gnome.ScreenSaver",
      "Poke");
    message = dbus_message_new_method_call(
      "org.gnome.ScreenSaver",
      "/org/gnome/ScreenSaver",
      "org.gnome.ScreenSaver",
      ("setActive", FALSE));
  • Or on the command-line:

    $ gnome-screensaver --poke
    $ gnome-screensaver --deactivate

    ...which basically end up doing the same thing after 4 levels of indirection as Poke calls gs_watcher_reset() which calls:

    gs_watcher_set_active (watcher, FALSE);
    gs_watcher_set_active (watcher, TRUE);

Kscreensaver

PaulSladen/ScreenSaverWrapper (last edited 2008-08-06 16:37:12 by localhost)