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

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

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

Вот вывод evtest:

    ~# evtest /dev/input/event0
    Input driver version is 1.0.1
    Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
    Input device name: "EETI EXC7200 Touch Screen"
    Supported events:
      Event type 0 (EV_SYN)
      Event type 1 (EV_KEY)
        Event code 330 (BTN_TOUCH)
      Event type 3 (EV_ABS)
        Event code 0 (ABS_X)
          Value   1928
          Min        0
          Max     2047
        Event code 1 (ABS_Y)
          Value   1825
          Min        0
          Max     2047
        Event code 47 (ABS_MT_SLOT)
          Value      0
          Min        0
          Max        1
        Event code 53 (ABS_MT_POSITION_X)
          Value      0
          Min        0
          Max     2047
        Event code 54 (ABS_MT_POSITION_Y)
          Value      0
          Min        0
          Max     2047
        Event code 57 (ABS_MT_TRACKING_ID)
          Value      0
          Min        0
          Max    65535
    Properties:
    Testing ... (interrupt to exit)
    Event: time 6435.172526, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 39
    Event: time 6435.172535, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 75
    Event: time 6435.172537, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 775
    Event: time 6435.172542, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
    Event: time 6435.172546, type 3 (EV_ABS), code 0 (ABS_X), value 75
    Event: time 6435.172548, type 3 (EV_ABS), code 1 (ABS_Y), value 775
    Event: time 6435.172550, -------------- EV_SYN ------------
    Event: time 6435.236468, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 77
    Event: time 6435.236472, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 776
    Event: time 6435.236477, type 3 (EV_ABS), code 0 (ABS_X), value 77
    Event: time 6435.236479, type 3 (EV_ABS), code 1 (ABS_Y), value 776
    Event: time 6435.236481, -------------- EV_SYN ------------
    Event: time 6435.290502, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 79
    Event: time 6435.290510, type 3 (EV_ABS), code 0 (ABS_X), value 79
    Event: time 6435.290513, -------------- EV_SYN ------------
    Event: time 6435.354553, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 778
    Event: time 6435.354571, type 3 (EV_ABS), code 1 (ABS_Y), value 778
    Event: time 6435.354573, -------------- EV_SYN ------------
    Event: time 6435.376630, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 78
    Event: time 6435.376637, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 781
    Event: time 6435.376644, type 3 (EV_ABS), code 0 (ABS_X), value 78
    Event: time 6435.376646, type 3 (EV_ABS), code 1 (ABS_Y), value 781
    Event: time 6435.376648, -------------- EV_SYN ------------
    Event: time 6435.397552, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 76
    Event: time 6435.397556, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 783
    Event: time 6435.397561, type 3 (EV_ABS), code 0 (ABS_X), value 76
    Event: time 6435.397563, type 3 (EV_ABS), code 1 (ABS_Y), value 783
    Event: time 6435.397565, -------------- EV_SYN ------------
    Event: time 6435.408593, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 74
    Event: time 6435.408599, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 784
    Event: time 6435.408606, type 3 (EV_ABS), code 0 (ABS_X), value 74
    Event: time 6435.408608, type 3 (EV_ABS), code 1 (ABS_Y), value 784
    Event: time 6435.408610, -------------- EV_SYN ------------
    Event: time 6435.419598, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 70
    Event: time 6435.419603, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 785
    Event: time 6435.419609, type 3 (EV_ABS), code 0 (ABS_X), value 70
    Event: time 6435.419611, type 3 (EV_ABS), code 1 (ABS_Y), value 785
    Event: time 6435.419613, -------------- EV_SYN ------------
    Event: time 6435.429599, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 64
    Event: time 6435.429602, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 786
    Event: time 6435.429608, type 3 (EV_ABS), code 0 (ABS_X), value 64
    Event: time 6435.429610, type 3 (EV_ABS), code 1 (ABS_Y), value 786
    Event: time 6435.429612, -------------- EV_SYN ------------
    Event: time 6435.440599, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 54
    Event: time 6435.440604, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 787
    Event: time 6435.440610, type 3 (EV_ABS), code 0 (ABS_X), value 54
    Event: time 6435.440611, type 3 (EV_ABS), code 1 (ABS_Y), value 787
    Event: time 6435.440613, -------------- EV_SYN ------------
    Event: time 6435.451595, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 43
    Event: time 6435.451602, type 3 (EV_ABS), code 0 (ABS_X), value 43
    Event: time 6435.451605, -------------- EV_SYN ------------
    Event: time 6435.462619, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 32
    Event: time 6435.462623, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 786
    Event: time 6435.462629, type 3 (EV_ABS), code 0 (ABS_X), value 32
    Event: time 6435.462631, type 3 (EV_ABS), code 1 (ABS_Y), value 786
    Event: time 6435.462633, -------------- EV_SYN ------------
    Event: time 6435.472642, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 22
    Event: time 6435.472648, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 785
    Event: time 6435.472654, type 3 (EV_ABS), code 0 (ABS_X), value 22
    Event: time 6435.472656, type 3 (EV_ABS), code 1 (ABS_Y), value 785
    Event: time 6435.472658, -------------- EV_SYN ------------
    Event: time 6435.483646, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 14
    Event: time 6435.483651, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 783
    Event: time 6435.483657, type 3 (EV_ABS), code 0 (ABS_X), value 14
    Event: time 6435.483658, type 3 (EV_ABS), code 1 (ABS_Y), value 783
    Event: time 6435.483660, -------------- EV_SYN ------------
    Event: time 6435.494684, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 8
    Event: time 6435.494689, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 782
    Event: time 6435.494697, type 3 (EV_ABS), code 0 (ABS_X), value 8
    Event: time 6435.494699, type 3 (EV_ABS), code 1 (ABS_Y), value 782
    Event: time 6435.494701, -------------- EV_SYN ------------
    Event: time 6435.504820, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 4
    Event: time 6435.504829, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 781
    Event: time 6435.504837, type 3 (EV_ABS), code 0 (ABS_X), value 4
    Event: time 6435.504839, type 3 (EV_ABS), code 1 (ABS_Y), value 781
    Event: time 6435.504841, -------------- EV_SYN ------------
    Event: time 6435.515636, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 2
    Event: time 6435.515640, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 780
    Event: time 6435.515646, type 3 (EV_ABS), code 0 (ABS_X), value 2
    Event: time 6435.515648, type 3 (EV_ABS), code 1 (ABS_Y), value 780
    Event: time 6435.515650, -------------- EV_SYN ------------
    Event: time 6435.537672, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 0
    Event: time 6435.537683, type 3 (EV_ABS), code 0 (ABS_X), value 0
    Event: time 6435.537686, -------------- EV_SYN ------------
    Event: time 6435.600755, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 777
    Event: time 6435.600766, type 3 (EV_ABS), code 1 (ABS_Y), value 777
    Event: time 6435.600768, -------------- EV_SYN ------------
    Event: time 6435.601836, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
    Event: time 6435.601844, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
    Event: time 6435.601847, -------------- EV_SYN ------------

И (заодно) перевел вывод через xinput:

    ~# xinput test 6
    motion a[0]=75 a[1]=775
    button press   1 a[0]=75 a[1]=775
    motion a[0]=77 a[1]=776
    motion a[0]=79 a[1]=776
    motion a[0]=79 a[1]=778
    motion a[0]=78 a[1]=781
    motion a[0]=76 a[1]=783
    motion a[0]=74 a[1]=784
    motion a[0]=70 a[1]=785
    motion a[0]=64 a[1]=786
    motion a[0]=54 a[1]=787
    motion a[0]=43 a[1]=787
    motion a[0]=32 a[1]=786
    motion a[0]=22 a[1]=785
    motion a[0]=14 a[1]=783
    motion a[0]=1024 a[1]=1024
    motion a[0]=8 a[1]=782
    motion a[0]=1024 a[1]=1024
    motion a[0]=4 a[1]=781
    motion a[0]=1024 a[1]=1024
    motion a[0]=2 a[1]=780
    motion a[0]=1024 a[1]=1024
    motion a[0]=0 a[1]=780
    motion a[0]=1024 a[1]=1024
    motion a[0]=0 a[1]=777
    button release 1 a[0]=0 a[1]=777
    motion a[0]=1024 a[1]=1024

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

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


person Arnie Schraufenziger    schedule 22.09.2015    source источник


Ответы (1)


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

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

person Arnie Schraufenziger    schedule 25.09.2015