X11 xscreensaver如何知道我已经闲置了多久(xprintidle无用)

bar*_*ter 8 x11

如果我这样做xset dpms 600 3600 7200,它会在10分钟不活动后使我的屏幕空白.

问题

  • X11如何知道我闲置了多长时间,以及如何以编程方式访问此空闲时间?
  • 我无法xprintidle安装,也许是因为X11不再有XIDLE扩展?

谷歌搜索建议看"男人xscreensaver",但我找不到任何有用的东西.

And*_*rov 9

屏幕保护程序扩展,QueryInfo请求.如果您正在使用xlib - 它在XScreenSaverQueryInfo中(与Xss 链接)

JavaScript中的示例,使用node-x11

var x11 = require('x11');
x11.createClient(function(err, display) {
    var X = display.client;
    X.require('screen-saver', function(err, SS) {
        SS.QueryInfo(display.screen[0].root, function(err, info) {
            console.log('Idle time', info.idle);
        });
    });
    X.on('error', console.error);
});
Run Code Online (Sandbox Code Playgroud)

c中的例子:

#include <X11/extensions/scrnsaver.h>
#include <stdio.h>

int main() {
    Display *display = XOpenDisplay(0);
    if (display != 0) {
      XScreenSaverInfo *info = XScreenSaverAllocInfo();
      XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
      if (info)
      {
        printf("%lu\n", info->idle);
        XFree(info);
        return 0;
      }
      return -1;
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

  • 你不应该从 main() 返回 -1。更好的返回值是 EXIT_SUCCESS 或 EXIT_FAILURE。 (2认同)