Относительные координаты сенсорного экрана

Я повернул среду X с помощью xrandr -o влево|вправо|инверсно|нормально на устройстве с сенсорным экраном. Все работает нормально кроме тач. При перемещении пальца по экрану он принимает абсолютные координаты пальца и перемещает курсор в противоположном направлении, если вращение обратное. Так что, если я соскальзываю вверх, на самом деле он соскальзывает вниз. Итак, есть ли способ настроить ввод с сенсорного экрана для чтения относительных координат, а не абсолютных. Драйвер сенсорного экрана — evdev.

С уважением, Левон


person deimus    schedule 14.09.2010    source источник


Ответы (1)


Относительный/абсолютный по-прежнему не будет делать то, что вы хотите, если ориентация также не изменится. Не существует универсального механизма, позволяющего X-серверу интерпретировать указательные устройства в разных ориентациях. Вам нужно каким-то образом заставить базовое устройство сообщать по-другому. Однако существует общий механизм для связи с базовым устройством.

У меня есть стилус Wacom, встроенный в мой ноутбук. Чтобы восстановить нормальную ориентацию, я могу сделать следующее:

xsetwacom установить "стилус" Повернуть НЕТ

который напрямую общается с базовым драйвером. Я также могу сделать следующее:

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

который взаимодействует с драйвером X через «свойства» XInput, чтобы сделать то же самое.

К счастью, 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

Конечно, вам понадобится какой-то способ выбрать, на какое устройство поместить свойства.

person wnoise    schedule 06.02.2011