Skip to content

Instantly share code, notes, and snippets.

@cleverca22
Created July 2, 2017 03:30
Show Gist options
  • Save cleverca22/4c165e69f08aec185d4b2366e3b62303 to your computer and use it in GitHub Desktop.
Save cleverca22/4c165e69f08aec185d4b2366e3b62303 to your computer and use it in GitHub Desktop.
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "x11idle";
installPhase = ''
mkdir -p $out/bin
gcc -lX11 -lXss ${./x11idle.c} -o $out/bin/x11idle
'';
buildInputs = with xlibs; [ libXScrnSaver xproto libX11 ];
unpackPhase = ":";
}
#include <X11/extensions/scrnsaver.h>
#include <stdio.h>
/* Based on code from
* http://coderrr.wordpress.com/2008/04/20/getting-idle-time-in-unix/
*
* compile with 'gcc -l Xss x11idle.c -o x11idle' and copy x11idle into your
* path
*/
int main() {
XScreenSaverInfo *info = XScreenSaverAllocInfo();
//open the display specified by the DISPLAY environment variable
Display *display = XOpenDisplay(0);
//display could be null if there is no X server running
if (info == NULL || display == NULL) {
return -1;
}
//X11 is running, try to retrieve info
if (XScreenSaverQueryInfo(display, DefaultRootWindow(display), info) == 0) {
return -1;
}
//info was retrieved successfully, print idle time
printf("%lu\n", info->idle);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment