【问题标题】:Touch screen relative coordinates触摸屏相对坐标
【发布时间】:2010-09-14 16:07:19
【问题描述】:

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

问候, 莱文

【问题讨论】:

    标签: x11 xlib xorg xserver


    【解决方案1】:

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

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

    xsetwacom set "stylus" Rotate NONE

    直接与底层驱动程序对话。我还可以执行以下操作:

    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
    

    当然,您将需要一些方法来选择将属性放在哪个设备上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多