【问题标题】:How does X11 xscreensaver know how long I've been idle (xprintidle unhelpful)X11 xscreensaver 如何知道我空闲了多长时间(xprintidle 无用)
【发布时间】:2012-08-09 16:18:51
【问题描述】:

如果我使用xset dpms 600 3600 7200,它会在 10 点后让我的屏幕变黑 分钟不活动。

问题

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

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

【问题讨论】:

    标签: x11


    【解决方案1】:

    Screen saver 扩展,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;
    }
    

    【讨论】:

    • 你不应该从 main() 返回 -1。更好的返回值是 EXIT_SUCCESS 或 EXIT_FAILURE。
    猜你喜欢
    • 2013-09-05
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2014-03-08
    • 2016-10-06
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多