Linux でマウス/キーボードのアクティビティを検出する方法が必要です。IM プログラムが行うことと同様のこと。たとえば 5 分間アクティビティが検出されない場合、IM ステータスが「私は今ここにいません」に設定されます。
これに対する任意の助けをいただければ幸いです。
ありがとう。
Linux でマウス/キーボードのアクティビティを検出する方法が必要です。IM プログラムが行うことと同様のこと。たとえば 5 分間アクティビティが検出されない場合、IM ステータスが「私は今ここにいません」に設定されます。
これに対する任意の助けをいただければ幸いです。
ありがとう。
xprintidle
または、アイドル時間をミリ秒単位で返すコマンドを使用するだけです。
これは、debian ベースのシステム用にパッケージ化されています。(元のサイト dtek.chalmers.se/~henoch ではソースを入手できなくなりましたが、packages.ubuntu.comで入手できます)
完全なcソリューション:(コード全体をターミナルにカットアンドペーストします)
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モジュールから来ています)
私のアプローチは、アドホックperlモジュールを使用することです。
# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e 'print GetIdleTime(), $/;'
より良い方法が利用できる場合は、ポーリングしないでください。
環境を指定していませんが、マウスについて言及しているので、最新の X11 を想定します。
xidleは MIT-SCREEN-SAVER 拡張機能を使用して、ユーザーがアイドル状態かどうかを判断します。xidle
直接使用するか、そのソース コードを読んで XScreenSaver(3) の使用方法を自分で学習できます。
man 3 XScreenSaver
XIDLE
-- X11R6 以降は拡張機能がないため、単にアイドル状態の報告/通知部分を使用してください。
who -u -H
コマンドラインで実行してみてください。誰がログインしているか、どのくらいアイドル状態だったかがわかります。少なくともユーザーが端末にログインしました。X ではまったく機能しないと思います。とにかく、この情報を使用して、アイドル状態かどうかを判断し、適切にアクションを実行できます。
X を使用している場合は、スクリーン セーバーなどとして実行するスクリプトを作成できます。