8

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

问题

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

谷歌搜索建议查看“man xscreensaver”,但我在那里找不到任何有用的东西。

4

1 回答 1

10

屏幕保护程序扩展,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);
});

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;
}
于 2012-08-09T20:29:40.610 回答