触摸屏相对坐标

时间:2010-09-14 16:07:20

标签: x11 xlib xorg xserver

我在触摸屏设备上用xrandr -o left | right | inverse | normal旋转了X环境。触摸后一切正常。当在屏幕上移动手指时,它采用手指的绝对坐标,并且如果旋转是反向的,则将光标向相反方向移动。所以,如果我向上滑动,它会向下滑动。那么有没有办法配置触摸屏输入来读取相对坐标而不是绝对坐标。触摸屏驱动程序是evdev。

此致 列翁

1 个答案:

答案 0 :(得分:1)

相对/绝对仍然不会做你想要的,只要方向不改变。没有通用的机制来告诉X服务器以不同的方向解释指针设备。您需要以某种方式让底层设备以不同方式报告。但是,有一种与底层设备通信的通用机制。

我的笔记本电脑内置了Wacom手写笔。要恢复正常方向,我可以执行以下操作:

xsetwacom设置“手写笔”旋转无

直接与底层驱动程序对话。我也可以做以下事情:

xinput set-int-prop stylus'Wacom Rotation''8'0

通过XInput“属性”与X驱动程序通信以执行相同的操作。

幸运的是,“evdev”允许这样的重新映射。

xinput list,除了手写笔外,还显示我的笔记本电脑的跟踪点和外接鼠标都是通过evdev运行的:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ stylus                                    id=6    [slave  pointer  (2)]
⎜   ↳ eraser                                    id=7    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=14   [slave  pointer  (2)]
⎜   ↳ HID 0430:0100                             id=11   [slave  pointer  (2)]
...

xinput list-props 'HID 0430:0100'

Device 'HID 0430:0100':
        Device Enabled (135):   1
        Device Accel Profile (251):     0
        Device Accel Constant Deceleration (252):       1.000000
        Device Accel Adaptive Deceleration (254):       1.000000
        Device Accel Velocity Scaling (255):    10.000000
        Evdev Reopen Attempts (299):    10
        Evdev Axis Inversion (301):     0, 0
        Evdev Axes Swap (303):  0
        Axis Labels (304):      "Rel X" (143), "Rel Y" (144)
        Button Labels (305):    "Button Left" (136), "Button Middle" (137), "Button Right" (138), "Button Wheel Up" (139), "Button Wheel Down" (140)
        Evdev Middle Button Emulation (306):    2
        Evdev Middle Button Timeout (307):      50
        Evdev Wheel Emulation (308):    0
        Evdev Wheel Emulation Axes (309):       0, 0, 4, 5
        Evdev Wheel Emulation Inertia (310):    10
        Evdev Wheel Emulation Timeout (311):    200
        Evdev Wheel Emulation Button (312):     4
        Evdev Drag Lock Buttons (313):  0

xinput set-int-prop 'HID 0430:0100' 'Evdev Axis Inversion' 8 1 1反转我的外接鼠标。

设置为正常:

xinput set-int-prop 'HID 0430:0100' 'Evdev Axis Inversion' 8 0 0
xinput set-int-prop 'HID 0430:0100' 'Evdev Axes Swap' 8 0

旋转90度:

xinput set-int-prop 'HID 0430:0100' 'Evdev Axis Inversion' 8 1 0
xinput set-int-prop 'HID 0430:0100' 'Evdev Axes Swap' 8 1

倒:

xinput set-int-prop 'HID 0430:0100' 'Evdev Axis Inversion' 8 1 1
xinput set-int-prop 'HID 0430:0100' 'Evdev Axes Swap' 8 0

以另一种方式旋转90度:

xinput set-int-prop 'HID 0430:0100' 'Evdev Axis Inversion' 8 0 1
xinput set-int-prop 'HID 0430:0100' 'Evdev Axes Swap' 8 1

当然,您需要一些方法来挑选出用于放置属性的设备。