获取不同的X显示空闲时间 – C代码

我在这个主题上find了很多C片段。 我修改,并能够得到我的X显示空闲时间:

#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; unsigned int seconds; display = XOpenDisplay(""); if(display) { if (XScreenSaverQueryExtension(display, &event_base, &error_base)) { XScreenSaverQueryInfo(display, DefaultRootWindow(display), &info); seconds = (unsigned int)info.idle; printf("%lu\n",seconds); return(0); }else{ fprintf(stderr,"Error: XScreenSaver Extension not present\n"); return(1); } }else { fprintf(stderr,"Error: Invalid Display\n"); return(1); } } 

从XOrg的文档中,XOpenDisplay(“”)函数将使用DISPLAY envvariables,如果它设置为NULL(它是)。 如果我硬设置XOpenDisplay(“:18.0”),它运行良好,因为我的显示是18.0。 但是,当我尝试其他用户的显示,例如XOpenDisplay(“:14.0”),我得到:

 No protocol specified Error: Invalid Display 

我什至试图以root身份运行此脚本无济于事。

如果这意味着什么,我正在用gnome运行RHEL6。

即使作为根,你可能仍然需要告诉X允许访问,例如与xhost local: