我发现了很多关于这个主题的 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("") 函数设置为 NULL(它是),它将使用 DISPLAY 环境变量。如果我硬设置 XOpenDisplay(":18.0"),它运行良好,因为 18.0 是我的显示器。但是,当我尝试其他用户的显示时,例如 XOpenDisplay(":14.0") 我得到:
No protocol specified
Error: Invalid Display
我什至尝试以 root 身份运行此脚本无济于事。
如果这意味着什么,我正在使用 gnome 运行 RHEL6。