我试图使用EETI EXC7200触摸屏X(1.14.7)。触摸屏被识别,事件被处理。TS发送绝对坐标,并使用evdev驱动程序(模式绝对)。然而,当我移动到屏幕边缘时(X或Y达到0),指针被扣到窗口的中心。之后,任何移动都有一个偏移量(取决于实际位置和角落之间的差异)。
为了测试这一点,我用XQueryPointer的坐标在屏幕上画一个指针。
下面是evtest的输出:
~# evtest/dev/input/event0输入驱动版本为1.0.1输入设备ID: bus 0x18 vendor 0x0 product 0x0 version 0x0输入设备名称:"EETI EXC7200触摸屏"支持事件:事件类型0 (EV_SYN)事件类型1 (EV_KEY)事件代码330 (BTN_TOUCH)事件类型3 (EV_ABS)事件代码0 (ABS_X)值1928最小值0Max 2047事件代码1 (ABS_Y)值1825最小值0Max 2047事件代码47 (ABS_MT_SLOT)值0最小值0马克斯1事件代码53 (ABS_MT_POSITION_X)值0最小值0Max 2047事件代码54 (ABS_MT_POSITION_Y)值0最小值0Max 2047事件代码57 (ABS_MT_TRACKING_ID)值0最小值0Max 65535属性:测试……(中断到退出)事件:时间6435.172526,类型3 (EV_ABS),代码57 (ABS_MT_TRACKING_ID),值39事件:时间6435.172535,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值75事件:时间6435.172537,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值775事件:时间6435.172542,类型1 (EV_KEY),代码330 (BTN_TOUCH),值1事件:时间6435.172546,类型3 (EV_ABS),代码0 (ABS_X),值75事件:时间6435.172548,类型3 (EV_ABS),代码1 (ABS_Y),值775事件:时间6435.172550 , -------------- EV_SYN ------------事件:时间6435.236468,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值77事件:时间6435.236472,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值776事件:时间6435.236477,类型3 (EV_ABS),代码0 (ABS_X),值77事件:时间6435.236479,类型3 (EV_ABS),代码1 (ABS_Y),值776事件:时间6435.236481 , -------------- EV_SYN ------------事件:时间6435.290502,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值79事件:时间6435.290510,类型3 (EV_ABS),代码0 (ABS_X),值79事件:时间6435.290513 , -------------- EV_SYN ------------事件:时间6435.354553,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值778事件:时间6435.354571,类型3 (EV_ABS),代码1 (ABS_Y),值778事件:时间6435.354573 , -------------- EV_SYN ------------事件:时间6435.376630,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值78事件:时间6435.376637,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值781事件:时间6435.376644,类型3 (EV_ABS),代码0 (ABS_X),值78事件:时间6435.376646,类型3 (EV_ABS),代码1 (ABS_Y),值781事件:时间6435.376648 , -------------- EV_SYN ------------事件:时间6435.397552,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值76事件:时间6435.397556,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值783事件:时间6435.397561,类型3 (EV_ABS),代码0 (ABS_X),值76事件:时间6435.397563,类型3 (EV_ABS),代码1 (ABS_Y),值783事件:时间6435.397565 , -------------- EV_SYN ------------事件:时间6435.408593,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值74事件:时间6435.408599,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值784事件:时间6435.408606,类型3 (EV_ABS),代码0 (ABS_X),值74事件:时间6435.408608,类型3 (EV_ABS),代码1 (ABS_Y),值784事件:时间6435.408610 , -------------- EV_SYN ------------事件:时间6435.419598,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值70事件:时间6435.419603,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值785事件:时间6435.419609,类型3 (EV_ABS),代码0 (ABS_X),值70事件:时间6435.419611,类型3 (EV_ABS),代码1 (ABS_Y),值785事件:时间6435.419613 , -------------- EV_SYN ------------事件:时间6435.429599,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值64事件:时间6435.429602,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值786事件:时间6435.429608,类型3 (EV_ABS),代码0 (ABS_X),值64事件:时间6435.429610,类型3 (EV_ABS),代码1 (ABS_Y),值786事件:时间6435.429612 , -------------- EV_SYN ------------事件:时间6435.440599,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值54事件:时间6435.440604,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值787事件:时间6435.440610,类型3 (EV_ABS),代码0 (ABS_X),值54事件:时间6435.440611,类型3 (EV_ABS),代码1 (ABS_Y),值787事件:时间6435.440613 , -------------- EV_SYN ------------事件:时间6435.451595,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值43事件:时间6435.451602,类型3 (EV_ABS),代码0 (ABS_X),值43事件:时间6435.451605 , -------------- EV_SYN ------------事件:时间6435.462619,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值32事件:时间6435.462623,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值786事件:时间6435.462629,类型3 (EV_ABS),代码0 (ABS_X),值32事件:时间6435.462631,类型3 (EV_ABS),代码1 (ABS_Y),值786事件:时间6435.462633 , -------------- EV_SYN ------------事件:时间6435.472642,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值22事件:时间6435.472648,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值785事件:时间6435.472654,类型3 (EV_ABS),代码0 (ABS_X),值22事件:时间6435.472656,类型3 (EV_ABS),代码1 (ABS_Y),值785事件:时间6435.472658 , -------------- EV_SYN ------------事件:时间6435.483646,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值14事件:时间6435.483651,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值783事件:时间6435.483657,类型3 (EV_ABS),代码0 (ABS_X),值14事件:时间6435.483658,类型3 (EV_ABS),代码1 (ABS_Y),值783事件:时间6435.483660 , -------------- EV_SYN ------------事件:时间6435.494684,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值8事件:时间6435.494689,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值782事件:时间6435.494697,类型3 (EV_ABS),代码0 (ABS_X),值8事件:时间6435.494699,类型3 (EV_ABS),代码1 (ABS_Y),值782事件:时间6435.494701 , -------------- EV_SYN ------------事件:时间6435.504820,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值4事件:时间6435.504829,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值781事件:时间6435.504837,类型3 (EV_ABS),代码0 (ABS_X),值4事件:时间6435.504839,类型3 (EV_ABS),代码1 (ABS_Y),值781事件:时间6435.504841 , -------------- EV_SYN ------------事件:时间6435.515636,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值2事件:时间6435.515640,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值780事件:时间6435.515646,类型3 (EV_ABS),代码0 (ABS_X),值2事件:时间6435.515648,类型3 (EV_ABS),代码1 (ABS_Y),值780事件:时间6435.515650 , -------------- EV_SYN ------------事件:时间6435.537672,类型3 (EV_ABS),代码53 (ABS_MT_POSITION_X),值0事件:时间6435.537683,类型3 (EV_ABS),代码0 (ABS_X),值0事件:时间6435.537686 , -------------- EV_SYN ------------事件:时间6435.600755,类型3 (EV_ABS),代码54 (ABS_MT_POSITION_Y),值777事件:时间6435.600766,类型3 (EV_ABS),代码1 (ABS_Y),值777事件:时间6435.600768 , -------------- EV_SYN ------------事件:时间6435.601836,类型3 (EV_ABS),代码57 (ABS_MT_TRACKING_ID),值-1事件:时间6435.601844,类型1 (EV_KEY),代码330 (BTN_TOUCH),值0事件:时间6435.601847 , -------------- EV_SYN ------------,(同时)翻译输出通过xinput:
~# xinput test运动a[0]=75 a[1]=775按下a[0]=75 a[1]=775运动a[0]=77 a[1]=776运动a[0]=79 a[1]=776运动a[0]=79 a[1]=778运动a[0]=78 a[1]=781运动a[0]=76 a[1]=783运动a[0]=74 a[1]=784运动a[0]=70 a[1]=785运动a[0]=64 a[1]=786运动a[0]=54 a[1]=787运动a[0]=43 a[1]=787运动a[0]=32 a[1]=786运动a[0]=22 a[1]=785运动a[0]=14 a[1]=783运动a[0]=1024 a[1]=1024运动a[0]=8 a[1]=782运动a[0]=1024 a[1]=1024运动a[0]=4 a[1]=781运动a[0]=1024 a[1]=1024运动a[0]=2 a[1]=780运动a[0]=1024 a[1]=1024运动a[0]=0 a[1]=780运动a[0]=1024 a[1]=1024运动a[0]=0 a[1]=777按键释放a[0]= a[1]=777运动a[0]=1024 a[1]=1024xinput输出位于中心位置的额外运动事件。但只有当我靠近触摸屏边缘时才会。
我做错了什么?我应该看什么?谢谢你的帮助和提示。
原因是同时使用的SDL 1.2.15。默认情况下,它使用鼠标/触摸事件的相对模式,并明显地发送自己的X11鼠标事件来纠正它("见motion a[0]=1024 a[1]=1024")。
设置环境变量SDL_MOUSE_RELATIVE=0修复此行为。