tag easytag linux keyboard mouse android-activity

linux - easytag



detección de teclado, actividad del mouse en Linux (8)

Escribí el wait-while-idle.rb que hace el "teclado de detección, la actividad del mouse en Linux" pero al revés, espere hasta que el usuario regrese.

Sí, claro, son las encuestas, pero dudo que alguien requiera un rendimiento aquí.

Planeé atrapar a los bromistas que se escabullen en mi computadora con él y un poco de secuencias de comandos.

Necesito una forma de detectar la actividad del mouse / teclado en Linux. Algo similar a lo que cualquier programa de IM haría. Si no se detecta actividad, digamos 5 minutos, configurará su estado de IM como "No estoy aquí ahora".

Cualquier ayuda para esto es apreciada.

Gracias.


Este es un ejemplo de cómo verificar que un usuario esté inactivo durante 5 minutos usando xprintidle y script de shell:

#!/bin/sh idletime=$(xprintidle) threshold=300000 # 5 min = 5 * 60 * 1000 ms if [ "$idletime" -gt "$threshold" ]; then echo "idle" fi

xprintidle devuelve el tiempo en milisegundos.

Este script no realiza ningún sondeo ni nada similar. Solo ejecuta algún código si el usuario está inactivo y no hace nada de lo contrario.


Mi enfoque es usar un módulo perl ad-hoc:

# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e ''print GetIdleTime(), $/;''


No sondee cuando haya mejores métodos disponibles.

No especificas el entorno, pero como mencionas el mouse, voy a asumir el moderno X11.

xidle usa la extensión MIT-SCREEN-SAVER para determinar si el usuario está inactivo o no: puede usar xidle directamente o leer su código fuente para aprender a usar XScreenSaver (3) usted mismo.

Editar

man 3 XScreenSaver : solo use las porciones de informes / notificaciones inactivas, ya que no hay más extensiones XIDLE desde X11R6.


Para la sección inactiva de tu código querrás algún tipo de temporizador que solo cuente hacia abajo desde 5 minutos (o el marco de tiempo que quieras).

Cada vez que el usuario pulsa una tecla o mueve el mouse, restablece el temporizador.

Los detalles de cómo juntar los eventos de hacer clic / mover el mouse o presionar tecla dependerán del idioma que esté usando para escribir su programa.


Solución c completa: (corte y pegue todo el código en un terminal)

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

(la parte principal proviene del módulo X11 :: IdleTime perl)


intente ejecutar quién -u -H en la línea de comando. Te dirá quién ha iniciado sesión y cuánto tiempo han estado inactivos. Al menos los usuarios iniciaron sesión en una terminal; No creo que funcione en absoluto en X. De todos modos, con esta información puedes saber quién está inactivo o no y tomar las medidas adecuadas.

Si estás en X, puedes crear un script para ejecutarlo como protector de pantalla o algo así.


O simplemente use el comando xprintidle que devuelve el tiempo de inactividad en milisegundos.

Se ha empaquetado para sistemas basados ​​en Debian. (la fuente ya no está disponible en el sitio original dtek.chalmers.se/~henoch pero puede obtenerla en packages.ubuntu.com )

más información en freshmeat.net