2

我发现了很多关于这个主题的 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。

4

1 回答 1

4

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

于 2013-07-09T17:21:52.347 回答