xssstate.c (1786B)
1 /* 2 * See LICENSE file for copyright and license details. 3 */ 4 5 #include <unistd.h> 6 #include <stdlib.h> 7 #include <stdio.h> 8 #include <stdarg.h> 9 #include <stdbool.h> 10 #include <libgen.h> 11 #include <X11/extensions/scrnsaver.h> 12 13 #include "arg.h" 14 15 char *argv0; 16 17 void 18 die(const char *errstr, ...) { 19 va_list ap; 20 21 va_start(ap, errstr); 22 vfprintf(stderr, errstr, ap); 23 va_end(ap); 24 exit(EXIT_FAILURE); 25 } 26 27 void 28 usage(void) 29 { 30 die("usage: %s [-istv]\n", basename(argv0)); 31 } 32 33 int 34 main(int argc, char *argv[]) { 35 XScreenSaverInfo *info; 36 Display *dpy; 37 int base, errbase; 38 Bool showstate, showtill, showidle; 39 40 showstate = false; 41 showtill = false; 42 showidle = false; 43 44 ARGBEGIN { 45 case 'i': 46 showidle = true; 47 break; 48 case 's': 49 showstate = true; 50 break; 51 case 't': 52 showtill = true; 53 break; 54 case 'v': 55 die("xssstate-"VERSION", © 2008-2016 xssstate engineers" 56 ", see LICENSE for details.\n"); 57 default: 58 usage(); 59 } ARGEND; 60 61 if (!showstate && !showtill && !showidle) 62 usage(); 63 64 if (!(dpy = XOpenDisplay(0))) 65 die("Cannot open display.\n"); 66 67 if (!XScreenSaverQueryExtension(dpy, &base, &errbase)) 68 die("Screensaver extension not activated.\n"); 69 70 info = XScreenSaverAllocInfo(); 71 XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info); 72 73 if (showstate) { 74 switch(info->state) { 75 case ScreenSaverOn: 76 printf("on\n"); 77 break; 78 case ScreenSaverOff: 79 printf("off\n"); 80 break; 81 case ScreenSaverDisabled: 82 printf("disabled\n"); 83 break; 84 } 85 } else if (showtill) { 86 switch(info->state) { 87 case ScreenSaverOn: 88 printf("0\n"); 89 break; 90 case ScreenSaverOff: 91 printf("%lu\n", info->til_or_since); 92 break; 93 case ScreenSaverDisabled: 94 printf("-1\n"); 95 break; 96 } 97 } else if (showidle) { 98 printf("%lu\n", info->idle); 99 } 100 101 102 XCloseDisplay(dpy); 103 104 return 0; 105 } 106