32

Linux でマウス/キーボードのアクティビティを検出する方法が必要です。IM プログラムが行うことと同様のこと。たとえば 5 分間アクティビティが検出されない場合、IM ステータスが「私は今ここにいません」に設定されます。

これに対する任意の助けをいただければ幸いです。

ありがとう。

4

7 に答える 7

36

xprintidleまたは、アイドル時間をミリ秒単位で返すコマンドを使用するだけです。

これは、debian ベースのシステム用にパッケージ化されています。(元のサイト dtek.chalmers.se/~henoch ではソースを入手できなくなりましたが、packages.ubuntu.comで入手できます)

freshmeat.netの詳細

于 2011-09-06T17:51:50.407 に答える
21

完全なソリューション:(コード全体をターミナルにカットアンドペーストします)

cat>/tmp/idletime.c<<EOF
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/scrnsaver.h>

int GetIdleTime () {
        time_t idle_time;
        static XScreenSaverInfo *mit_info;
        Display *display;
        int screen;
        mit_info = XScreenSaverAllocInfo();
        if((display=XOpenDisplay(NULL)) == NULL) { return(-1); }
        screen = DefaultScreen(display);
        XScreenSaverQueryInfo(display, RootWindow(display,screen), mit_info);
        idle_time = (mit_info->idle) / 1000;
        XFree(mit_info);
        XCloseDisplay(display); 
        return idle_time;
}

int main() {
        printf("%d\n", GetIdleTime());
        return 0;
}
EOF

gcc -Wall /tmp/idletime.c -o /tmp/idletime -L/usr/X11R6/lib/ -lX11 -lXext -lXss 
DISPLAY=:0 /tmp/idletime

(主要部分はX11 :: IdleTime perlモジュールから来ています)

于 2011-01-15T22:07:52.360 に答える
3

私のアプローチは、アドホックperlモジュールを使用することです。

# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e 'print GetIdleTime(), $/;'
于 2011-01-12T17:23:53.173 に答える
3

より良い方法が利用できる場合は、ポーリングしないでください。

環境を指定していませんが、マウスについて言及しているので、最新の X11 を想定します。

xidleは MIT-SCREEN-SAVER 拡張機能を使用して、ユーザーがアイドル状態かどうかを判断します。xidle直接使用するか、そのソース コードを読んで XScreenSaver(3) の使用方法を自分で学習できます。

編集

man 3 XScreenSaverXIDLE-- X11R6 以降は拡張機能がないため、単にアイドル状態の報告/通知部分を使用してください。

于 2008-10-21T18:53:00.813 に答える
2

who -u -Hコマンドラインで実行してみてください。誰がログインしているか、どのくらいアイドル状態だったかがわかります。少なくともユーザーが端末にログインしました。X ではまったく機能しないと思います。とにかく、この情報を使用して、アイドル状態かどうかを判断し、適切にアクションを実行できます。

X を使用している場合は、スクリーン セーバーなどとして実行するスクリプトを作成できます。

于 2008-10-21T16:54:21.020 に答える