/* gcc -g -Wall -L/usr/X11R6/lib/ -lXss -o test test.c */ #include #include #include #include #include #include Display *dpy; void elock_open_display(int argc, char *argv[]) { char *display; display = getenv("DISPLAY"); if (!(dpy = XOpenDisplay(display))) { perror("Cannot open display\n"); exit(1); } fprintf(stdout,"DISPLAY OPENDED\n"); } int fatal(char *s) { printf ("fatal: %s\n", s); exit (1); } void ignoreError (Display *dpy, XErrorEvent *error) { printf ("ignoring error\n"); } char *stateNames[] = { "Off", "On", "Cycle", "Disable" }; char *kindNames[] = { "Blanked", "Internal", "External" }; int main(int argc, char **argv) { XEvent pe; XScreenSaverNotifyEvent *se; Window root, saver; int screen; int majorVersion, minorVersion; int error_base, event_base; XScreenSaverInfo *info; XSetWindowAttributes attr; unsigned long mask; GC gc; /*_Xdebug = 1;*/ /* turn on synchronization */ elock_open_display(argc, argv); if (!XScreenSaverQueryExtension (dpy, &event_base, &error_base)) fatal ("QueryExtension failed"); printf ("event_base %d, error_base %d\n", event_base, error_base); if (!XScreenSaverQueryVersion (dpy, &majorVersion, &minorVersion)) fatal ("QueryVersion failed"); printf ("majorVersion: %d, minorVersion: %d\n", majorVersion, minorVersion); root = DefaultRootWindow (dpy); info = XScreenSaverAllocInfo (); if (!XScreenSaverQueryInfo (dpy, root, info)) fatal ("QueryInfo"); if ( stateNames[info->state] == "Disable" || info->til_or_since == 0 ) printf("YOU YOU YOU YOU ICI"); printf ("|| window: 0lx%lx\n", info->window); printf ("|| state: %s\n", stateNames[info->state]); printf ("|| kind: %s\n", kindNames[info->kind]); printf ("|| til_or_since: %ld\n", info->til_or_since); printf ("|| idle: %ld\n", info->idle); printf ("|| eventMask: 0lx%lx\n\n", info->eventMask); saver = info->window; XFree (info); XScreenSaverSelectInput (dpy, root, ScreenSaverNotifyMask|ScreenSaverCycleMask); screen = DefaultScreen(dpy); attr.background_pixel = BlackPixel (dpy, screen); mask = CWBackPixel; XScreenSaverSetAttributes (dpy, root, 0, 0, DisplayWidth(dpy, screen), DisplayHeight (dpy, screen), 0, CopyFromParent, CopyFromParent, CopyFromParent, mask, &attr); gc = DefaultGC (dpy, screen); XSetForeground (dpy, gc, WhitePixel(dpy, screen)); while (1) { if ( ! XNextEvent(dpy, &pe)); fprintf(stdout,"ERROR\n"); fprintf(stdout,"DEBUG pe.type:%s\n",pe.type); if (pe.type == event_base) { se = (XScreenSaverNotifyEvent *) &pe; printf ("ScreenSaverNotifyEvent\n"); printf ("serial: %ld\n", se->serial); printf ("send_event: %d\n", se->send_event); printf ("window: %ld\n", se->window); printf ("root: %ld\n", se->root); printf ("state: %s\n", stateNames[se->state]); printf ("kind: %s\n", kindNames[se->kind]); printf ("forced: %d\n", se->forced); printf ("time: %ld\n", se->time); if (se->state == ScreenSaverOn && se->kind == ScreenSaverExternal) { /* XSetErrorHandler (ignoreError); */ XDrawString (dpy, saver, gc, 100, 100, "Screen Saver Test", 17); XSync (dpy, False); /* XSetErrorHandler (NULL); */ } } else { printf ("unexpected event %d\n", pe.type); } } }