Problem
You would like to obtain statistics about how often the mouse is used on a Linux machine.
Solution
Linux logs all activity of input devices (such as mouse and keyboard) into various device files under /dev/input/*.
Mouse activities, in particular, are logged in /dev/input/mice (this logs events for all mice attached). Hooking into this device file allows to be notified of all mouse events. The following C++ snippet reads the /dev/input/mice file and writes a simple log for the observed activity:
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <time.h> #include <linux/input.h> #define MOUSEFILE "/dev/input/mice" int main() { int fd; struct input_event ie; if((fd = open(MOUSEFILE, O_RDONLY)) == -1) { perror("Cannot access mouse device"); exit(EXIT_FAILURE); } while(read(fd, &ie, sizeof(struct input_event))) { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); printf ( "Actvy: %s", asctime (timeinfo) ); } return 0; }
Safe the source code into a file mouse.c and compile this application using the following command:
gcc mouse.c -o LogMouse
You can run the compiled program as follows to log mouse events from your system in a text file:
./LogMouse > mouse.txt
Note: You will probably need root privileges to run this application, so use sodu or su.
Resources
StackOverflow – How to read low level mouse click position in linux