Problema ao ler o mouse de / dev / input / events

2

Estou usando o Fedora 17 LXDE com o kernel 3.6.10 e estou tentando ler os movimentos relativos do mouse bruto de /dev/input/mouseX e / ou /dev/input/eventX .

Eu recebo dados mostrando os cliques do mouse (mouse para cima, mouse para baixo) e rel_* eventos, mas todos os dados de movimento relativos têm valores rel_x e rel_y idênticos. ou seja, se eu mover o mouse para a esquerda, receberei rel_x = rel_y = +1 . Se eu mover o mouse para a direita, recebo rel_x = rel_y = +1 . Os mesmos valores ao mover o mouse para cima / baixo. Os valores nem sempre são = +1, às vezes são +2.

Alguma idéia?

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <istream>
#include <unistd.h>
#include <linux/input.h>

#define MOUSEFILE "/dev/input/event2"

int main()
{
int fd;
struct input_event ie;

if((fd = open(MOUSEFILE, O_RDONLY)) == -1) {
    perror("opening device");
    exit(EXIT_FAILURE);
}

while(read(fd, &ie, sizeof(struct input_event))) {
    unsigned char *ptr = (unsigned char*)&ie;
    for(int i=0; i<sizeof(ie); i++)
        printf("%02X ", *ptr++);
    printf("\n");
}

return 0;
}

Saída típica:

29 EB F7 50 00 00 00 00 27 6A 0C 00 00 00 00 00 02 00 01 00 01 00 00 00 
29 EB F7 50 00 00 00 00 33 6A 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 
29 EB F7 50 00 00 00 00 F5 90 0C 00 00 00 00 00 02 00 00 00 01 00 00 00 
29 EB F7 50 00 00 00 00 F6 90 0C 00 00 00 00 00 02 00 01 00 01 00 00 00 
29 EB F7 50 00 00 00 00 00 91 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 
29 EB F7 50 00 00 00 00 BF B7 0C 00 00 00 00 00 02 00 00 00 02 00 00 00 
29 EB F7 50 00 00 00 00 C0 B7 0C 00 00 00 00 00 02 00 01 00 02 00 00 00 
29 EB F7 50 00 00 00 00 CA B7 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 
29 EB F7 50 00 00 00 00 1C D7 0C 00 00 00 00 00 02 00 00 00 01 00 00 00 
29 EB F7 50 00 00 00 00 1D D7 0C 00 00 00 00 00 02 00 01 00 01 00 00 00 
29 EB F7 50 00 00 00 00 24 D7 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 
29 EB F7 50 00 00 00 00 F0 3F 0D 00 00 00 00 00 02 00 00 00 01 00 00 00 
29 EB F7 50 00 00 00 00 F1 3F 0D 00 00 00 00 00 02 00 01 00 01 00 00 00 
29 EB F7 50 00 00 00 00 FA 3F 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 
29 EB F7 50 00 00 00 00 51 6A 0D 00 00 00 00 00 02 00 00 00 03 00 00 00 
29 EB F7 50 00 00 00 00 52 6A 0D 00 00 00 00 00 02 00 01 00 03 00 00 00 
29 EB F7 50 00 00 00 00 5A 6A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 

and some output when clicking a button
72 EE F7 50 00 00 00 00 10 DF 00 00 00 00 00 00 01 00 10 01 01 00 00 00 
72 EE F7 50 00 00 00 00 13 DF 00 00 00 00 00 00 02 00 00 00 01 00 00 00 
72 EE F7 50 00 00 00 00 13 DF 00 00 00 00 00 00 02 00 01 00 01 00 00 00 
72 EE F7 50 00 00 00 00 2B DF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
72 EE F7 50 00 00 00 00 C0 AE 02 00 00 00 00 00 01 00 10 01 00 00 00 00 
72 EE F7 50 00 00 00 00 C5 AE 02 00 00 00 00 00 02 00 00 00 01 00 00 00 
72 EE F7 50 00 00 00 00 C6 AE 02 00 00 00 00 00 02 00 01 00 01 00 00 00 
72 EE F7 50 00 00 00 00 E0 AE 02 00 00 00 00 00 00 00 00 00 00 00 00 00 
    
por user30463 17.01.2013 / 17:48

2 respostas

0

Finalmente rastreou. Parece ser um problema com o 50-vmmouse.conf em /usr/share/X11/xorg.conf.d. Este driver é carregado no Fedora 17 LXDE, mas não no Debian Squeeze LXDE. Exclua isso e o código é executado conforme o esperado.

    
por 31.01.2013 / 16:12
0

X presumivelmente está pegando algum tipo de acesso exclusivo ao mouse. A leitura dele consumirá os eventos e duvido que seja o que você quer. Não sei se existe alguma API específica de X para obter os dados que você deseja, mas minha melhor opção seria verificar algo assim. OTOH, parece uma possível vulnerabilidade de segurança que não seria permitida (pense em um teclado virtual para inserir senhas para que elas não possam ser interceptadas no teclado ...).

O que você está tentando realizar? Parece que você está procurando uma maneira de implementar uma solução para um problema, mas sem conhecer o problema, não podemos sugerir alternativas melhores.

    
por 24.01.2013 / 17:30

Tags