It seems that the gnome dbus method reports the time since gnome decided the screen was idle.
That varies with the gnome screensaver time setting.
This reports a 2 second idle time. But it turns on the screensaver.
Code:
qdbus org.gnome.ScreenSaver / org.gnome.ScreenSaver.SetActive False;sleep 2;qdbus org.gnome.ScreenSaver / org.gnome.ScreenSaver.GetSessionIdleTime
You could use the X screensaver extension directly to read X server idle time.
See http://linux.die.net/man/3/xscreensaverqueryinfo
You may need to install the right development packages to build this.
I needed "sudo apt-get install libxss-dev" on my system.
Code:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/extensions/scrnsaver.h>
/* Report amount of X server idle time. */
/* Build with- */
/* cc xidle.c -o xidle -lX11 -lXext -lXss */
int main(int argc, char *argv[])
{
Display *display;
int event_base, error_base;
XScreenSaverInfo info;
float seconds;
display = XOpenDisplay("");
if (XScreenSaverQueryExtension(display, &event_base, &error_base)) {
XScreenSaverQueryInfo(display, DefaultRootWindow(display), &info);
seconds = (float)info.idle/1000.0f;
printf("%f\n",seconds);
return(0);
}
else {
fprintf(stderr,"Error: XScreenSaver Extension not present\n");
return(1);
}
}
Bookmarks