Относительные координаты сенсорного экрана - PullRequest
0 голосов
/ 14 сентября 2010

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

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

1 Ответ

1 голос
/ 06 февраля 2011

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

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

xsetwacom set "стилус" Поворот НЕТ

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

стилус xinput set-int-prop '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

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

...