/dev/input/events에서 마우스를 읽는 데 문제가 있습니다.

/dev/input/events에서 마우스를 읽는 데 문제가 있습니다.

저는 커널 3.6.10과 함께 Fedora 17 LXDE를 사용하고 있으며 /dev/input/mouseX원시 마우스 상대 이동에서 읽으 려고 합니다 /dev/input/eventX.

마우스 클릭(마우스 위로, 마우스 아래로) 및 이벤트를 표시하는 데이터를 얻었 지만 모든 상대 이동 데이터의 합계 값 rel_*은 동일합니다 . 즉, 마우스를 왼쪽으로 움직이면 가 됩니다 . 마우스를 오른쪽으로 움직이면 마우스를 위/아래로 움직일 때와 같은 값을 얻습니다 . 이 값은 항상 = +1이 아니며 때로는 +2입니다.rel_xrel_yrel_x = rel_y = +1rel_x = rel_y = +1

어떤 아이디어가 있나요?

#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;
}

일반적인 출력:

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 

답변1

X는 아마도 마우스에 대한 독점적인 접근 권한을 갖고 있을 것입니다. 여기에서 이벤트를 읽으면 이벤트가 소비되는데, 이것이 바로 여러분이 원하는 것이라고 생각됩니다. 원하는 데이터를 얻을 수 있는 X 관련 API가 있는지는 모르겠지만 가장 좋은 방법은 이와 같은 것을 확인하는 것입니다. OTOH, 이는 허용되어서는 안되는 보안 취약점인 것 같습니다(키보드에서 가로채지 않도록 비밀번호를 입력하는 가상 키보드를 생각해 보세요...).

무엇을 달성하고 싶나요? 귀하는 문제에 대한 해결책을 구현할 방법을 찾고 있는 것 같지만 문제를 이해하지 못하면 더 나은 대안을 제안할 수 없습니다.

답변2

마침내 그것을 추적했습니다. /usr/share/X11/xorg.conf.d의 50-vmmouse.conf에 문제가 있는 것 같습니다. 이 드라이버는 Fedora 17 LXDE에서는 로드되지만 Debian Squeeze LXDE에서는 로드되지 않습니다. 이 코드를 제거하면 코드가 예상대로 실행됩니다.

관련 정보