Calibrar caneta e tocar via xinput

1

Introdução

Este é um acompanhamento da minha pergunta anterior aqui .

Quando conecto meu tablet a um projetor, devido a mudança de resolução, a caneta não está mais calibrada. Eu encontrei este post wiki do ArchLinux e ele faz exatamente o que eu preciso fazer, exceto que os números são um pouco off. Aqui está o que eu fiz:

De xrandr eu recebo:

Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 277mm x 156mm
   1366x768      60.02 +
   1280x720      60.00  
   1024x768      60.00* 
   1024x576      60.00  
   ...

O que tem + é a resolução máxima que o meu monitor suporta e o que tem * é a resolução atual. Então, eu concluo

total_width = 1024
touch_area_width = 1366
touch_area_x_offset = (1024 - 1366) /2 = -171

Isso é provavelmente o que estou fazendo de errado, porque no final não consigo exatamente o que preciso, mas quase lá.

Então eu olho para a saída da lista xinput

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Logitech M325                               id=9    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E6 Pen stylus                   id=10    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E6 Finger                       id=11    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                  id=13    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                       id=14    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E6 Pen eraser                   id=16    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Sleep Button                                id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=12    [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                      id=15    [slave  keyboard (3)]

As linhas 4,5 e 8 são as que eu preciso, então os nomes dos dispositivos para mim serão "Caneta Wacom ISDv4 E6 Pen", "Wacom ISDv4 E6 Finger" e "Wacom ISDv4 E6 Pen eraser".

xinput list-props "device name" | grep Matrix deve listar a atual Matriz de Transformação de Coordenadas. O padrão é a matriz de identidade listada por linhas:

Coordinate Transformation Matrix (138): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

A matriz de transformação é A matriz é

[ c0 0  c1 ]
[ 0  c2 c3 ]
[ 0  0  1  ]

O tutorial diz para calcular a matriz da seguinte forma: (os números à direita são os que eu calculei para o meu caso)

c0 = touch_area_width / total_width = 1366/1024 = 1.333984375
c2 = touch_area_height / total_height = 768/768 = 1
c1 = touch_area_x_offset / total_width = -171/768 = -0.22265625
c3 = touch_area_y_offset / total_height = 0/768 = 0

A razão c2 = 1 e c3 = 0 para mim é que na minha situação a altura é boa, então eu só preciso escalar e mudar a largura.

Tudo que preciso fazer agora é representar minha matriz como uma matriz de linhas, ou seja:

c0 0 c1 0 c2 c3 0 0 1

e isso para mim se torna:

1.333984375 0 -0.22265625 0 1 0 0 0 1

Então o seguinte comando deve fazer a tradução para mim:

xinput set-prop "DEVICE NAME" --type=float "Coordinate Transformation Matrix" 1.333984375 0 -0.22265625 0 1 0 0 0 1

Isso quase me leva onde eu quero estar, exceto que ainda está um pouco fora. Então, eu fiz um pouco de tentativa e erro para obter os seguintes números 1.345 0 -0.17 0 1 0 0 0 1

Então, aqui está a minha pergunta

Como encontrar os valores exatos para a matriz de transformação? Eu preciso trabalhar com resoluções diferentes e não posso repetir o processo de tentativa e erro para todos eles!

    
por Keivan 15.09.2015 / 22:38

0 respostas

Tags