xorg сенсорный экран: абсолютное положение игнорируется

Я пытаюсь использовать сенсорный экран EETI EXC7200 с X (1.14.7). Сенсорный экран распознается и события обрабатываются. TS отправляет абсолютные координаты и используется драйвер evdev (абсолютный режим). Однако, когда я перемещаюсь к краю экрана (а X или Y достигает 0), указатель привязывается к центру окна. После этого любое движение имеет смещение (в зависимости от разницы между реальной позицией и углом).

Чтобы проверить это, я рисую указатель на экране с координатами из XQueryPointer.

Вот вывод из evtest:

    ~ # evtest / dev / input / event0 Версия драйвера ввода: 1.0.1 Идентификатор устройства ввода: шина 0x18 Производитель 0x0 Продукт 0x0 версия 0x0 Имя устройства ввода: "EETI EXC7200 Touch Screen" Поддерживаемые события: Тип события 0 (EV_SYN) Тип события 1 (EV_KEY) Код события 330 (BTN_TOUCH) Тип события 3 (EV_ABS) Код события 0 (ABS_X) Значение 1928 Мин. 0 Макс. 2047 Код события 1 (ABS_Y) Значение 1825 Мин. 0 Макс. 2047 Код события 47 (ABS_MT_SLOT) Значение 0 Мин. 0 Макс. 1 Код события 53 (ABS_MT_POSITION_X) Значение 0 Мин. 0 Макс. 2047 Код события 54 (ABS_MT_POSITION_Y) Значение 0 Мин. 0 Макс. 2047 Код события 57 (ABS_MT_TRACKING_ID) Значение 0 Мин. 0 Макс. 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 Eve время: время 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, тип e 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 6
    движение а [0]=75 а [1]=775
    нажмите кнопку 1 a[0]=75 a[1]=775
    движение а [0]=77 а [1]=776
    движение а [0]=79 а [1]=776
    движение а [0]=79 а [1]=778
    движение а [0]=78 а [1]=781
    движение а [0]=76 а [1]=783
    движение а [0]=74 а [1]=784
    движение а [0]=70 а [1]=785
    движение а [0]=64 а [1]=786
    движение а [0]=54 а [1]=787
    движение а [0]=43 а [1]=787
    движение а [0]=32 а [1]=786
    движение а [0]=22 а [1]=785
    движение а [0]=14 а [1]=783
    движение а [0]=1024 а [1]=1024
    движение а [0]=8 а [1]=782
    движение а [0]=1024 а [1]=1024
    движение a[0]=4 a[1]=781
    движение а [0]=1024 а [1]=1024
    движение a[0]=2 a[1]=780
    движение а [0]=1024 а [1]=1024
    движение а [0]=0 а [1] = 780
    движение а [0]=1024 а [1]=1024
    движение a[0]=0 a[1]=777
    Отпускание кнопки 1 a[0]=0 a[1]=777
    движение а [0]=1024 а [1]=1024

xinput выводит дополнительные события движения, расположенные в центре. Но только когда я подхожу к краю сенсорного экрана.

Что я делаю неправильно? На что мне смотреть? Спасибо за любую помощь или подсказки.

1 ответ

Причина была в SDL 1.2.15, который использовался одновременно. По умолчанию он использует относительный режим для событий мыши / касания и, по-видимому, отправляет собственные события мыши X11 для исправлений, которые он вносит ("см. Движение a[0]=1024 a[1]=1024").

Установка переменной среды SDL_MOUSE_RELATIVE=0 исправила это поведение.

Другие вопросы по тегам