Thread 'User activity detection on Linux'

Message boards : BOINC Manager : User activity detection on Linux
Message board moderation

To post messages, you must log in.

AuthorMessage
Anonyymi

Send message
Joined: 20 Dec 05
Posts: 5
Finland
Message 27860 - Posted: 10 Oct 2009, 12:11:44 UTC

REPLACE_PRE_CODE BUG

text:

I noticed that BOINC is not able to detect user input on Linux http://boinc.berkeley.edu/trac/ticket/463. I need mouse event detection and interpretation too and I have noticed that whether /dev/input/events work depends on which mouse/usbhid/evdev drivers are loaded. I guess some drivers just do not use the /dev/input/event interface. The /dev/input/events used to work on my laptop and Vojtech Pavlik's evtest worked. But afterwards I have changed the software configuration (upgraded distribution, probably X and Linux). Now I am using Ubuntu's Linux 2.6.27-11-generic and BOINC 6.2.12 i686-pc-linux-gnu. As expected, BOINC does not detect USB mouse activity.

Gnome's Tracker indexing and search tool uses X to detect mouse events and to stop indexing when user activity is detected. Perhaps BOINC could also use X until this shortcoming is fixed in Linux? I made (or actually copied it from somewhere and modified a bit) this little program which waits for mouse events and exits when 50 movements (MotionNotify) have been detected:

[code]
#include <stdio.h>
#include <unistd.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xutil.h>
#include <X11/Shell.h>


Display *d;

void snoop_all_windows(Window root, unsigned long type)
{

static int level = 0;
Window parent, *children, *child2;
unsigned int nchildren;
int stat, i,j,k;

level++;

stat = XQueryTree(d, root, &root, &parent, &children, &nchildren);
if (stat == FALSE)
{
fprintf(stderr, "Can't query window tree...\n");
return;
}

if (nchildren == 0)

return;

XSelectInput(d, root, type);

for(i=0; i < nchildren; i++)
{
XSelectInput(d, children[i], type);
snoop_all_windows(children[i], type);
}

XFree((char *)children);
}


int main(int argc, char **argv)
{
//daemon(0,0);
//sleep(10);

char *hostname;
char *string;
XEvent xev;
int count = 0;

if (argv[1] == NULL)
hostname = ":0";
else
hostname = argv[1];

d = XOpenDisplay(hostname);
if (d == NULL)
{
fprintf(stderr, "Blah, can't open display: %s\n", hostname);
exit(10);
}

snoop_all_windows(DefaultRootWindow(d), PointerMotionMask);

while(1)
{
int k;
k = 1;
while (k<50) {
XNextEvent(d, &xev);
k++;
}


switch (xev.type) {

case MotionNotify:
return;

}

}
}
[/code]

/proc/interrupts cannot be used to detect USB mouse activity because it sums all USB interrupts. Here is my /proc/interrupts sampled at 1 second interval while not moving the mouse or typing:
[pre]
CPU0 CPU1
0: 13250755 7627303 IO-APIC-edge timer
1: 73286 6555 IO-APIC-edge i8042
8: 72 65 IO-APIC-edge rtc0
9: 19177 1334 IO-APIC-fasteoi acpi
12: 16868 4253 IO-APIC-edge i8042
14: 92427 12625 IO-APIC-edge ata_piix
15: 0 0 IO-APIC-edge ata_piix
16: 32063753 1108943 IO-APIC-fasteoi uhci_hcd:usb1, HDA Intel, fglrx[0]@PCI:1:0:0
17: 0 0 IO-APIC-fasteoi uhci_hcd:usb2
18: 0 0 IO-APIC-fasteoi ehci_hcd:usb3, uhci_hcd:usb6
20: 127813539 7708352 IO-APIC-fasteoi uhci_hcd:usb4, ehci_hcd:usb7
21: 24865509 278023 IO-APIC-fasteoi uhci_hcd:usb5
219: 7669594 117154 PCI-MSI-edge ahci
NMI: 0 0 Non-maskable interrupts
LOC: 293717402 249457069 Local timer interrupts
RES: 3507848 5451895 Rescheduling interrupts
CAL: 13948 16305 function call interrupts
TLB: 60245 133669 TLB shootdowns
SPU: 0 0 Spurious interrupts
ERR: 2
MIS: 0
CPU0 CPU1
0: 13250755 7627303 IO-APIC-edge timer
1: 73290 6555 IO-APIC-edge i8042
8: 72 65 IO-APIC-edge rtc0
9: 19177 1334 IO-APIC-fasteoi acpi
12: 16868 4253 IO-APIC-edge i8042
14: 92427 12625 IO-APIC-edge ata_piix
15: 0 0 IO-APIC-edge ata_piix
16: 32063861 1108943 IO-APIC-fasteoi uhci_hcd:usb1, HDA Intel, fglrx[0]@PCI:1:0:0
17: 0 0 IO-APIC-fasteoi uhci_hcd:usb2
18: 0 0 IO-APIC-fasteoi ehci_hcd:usb3, uhci_hcd:usb6
20: 127813564 7708352 IO-APIC-fasteoi uhci_hcd:usb4, ehci_hcd:usb7
21: 24865866 278023 IO-APIC-fasteoi uhci_hcd:usb5
219: 7669625 117154 PCI-MSI-edge ahci
NMI: 0 0 Non-maskable interrupts
LOC: 293717980 249457392 Local timer interrupts
RES: 3507850 5451898 Rescheduling interrupts
CAL: 13948 16305 function call interrupts
TLB: 60245 133669 TLB shootdowns
SPU: 0 0 Spurious interrupts
ERR: 2
MIS: 0
[/pre]


Perhaps this message about putting an activity counter into Linux is also of interest.

The Windows version of BOINC uses the GetLastInputInfo API which is not system-wide but apparently BOINC tries to make it system-wide with some kind of shared file/memory and DLL. Perhaps this could be ported to X?
ID: 27860 · Report as offensive
ProfileJord
Volunteer tester
Help desk expert
Avatar

Send message
Joined: 29 Aug 05
Posts: 15648
Netherlands
Message 27862 - Posted: 10 Oct 2009, 13:48:52 UTC - in response to Message 27860.  

Now I am using Ubuntu's Linux 2.6.27-11-generic and BOINC 6.2.12 i686-pc-linux-gnu.

Can you please test if it still doesn't work with Boinc 6.10.13? It's easy to say it doesn't work on a version that's over a year old, but that doesn't mean it may not have been fixed in the mean time (and the ticket be forgotten to close).
ID: 27862 · Report as offensive
Anonyymi

Send message
Joined: 20 Dec 05
Posts: 5
Finland
Message 27867 - Posted: 10 Oct 2009, 21:35:02 UTC - in response to Message 27862.  

Can you please test if it still doesn't work with Boinc 6.10.13? It's easy to say it doesn't work on a version that's over a year old, but that doesn't mean it may not have been fixed in the mean time (and the ticket be forgotten to close).

I assumed that it wouldn't work because the trunk still has the algorithm that relies on /proc/interrupt. The function is here: http://boinc.berkeley.edu/trac/browser/trunk/boinc/client/hostinfo_unix.cpp#L1330. But to be absolutely sure I tested version 6.10.13 i686-pc-linux-gnu and it behaves like the old version 6.2.12: detects keyboard but not USB mouse.
ID: 27867 · Report as offensive
ProfileJord
Volunteer tester
Help desk expert
Avatar

Send message
Joined: 29 Aug 05
Posts: 15648
Netherlands
Message 27869 - Posted: 10 Oct 2009, 21:39:15 UTC - in response to Message 27867.  

Ok, with thanks on that. I have forwarded this thread to the developers.
ID: 27869 · Report as offensive
ProfileJord
Volunteer tester
Help desk expert
Avatar

Send message
Joined: 29 Aug 05
Posts: 15648
Netherlands
Message 27941 - Posted: 12 Oct 2009, 20:43:03 UTC - in response to Message 27869.  

The developers are adding code to the Linux client now to detect mouse movements. It is a work in progress, but there is a good chance this code will be available in the next BOINC 6.10 release candidate.
ID: 27941 · Report as offensive

Message boards : BOINC Manager : User activity detection on Linux

Copyright © 2025 University of California.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.