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. Este tópico ficou muito confuso, estou respondendo, mas ainda resta um último, mas preciso trabalhar (veja abaixo).
Para acompanhar a discussão sobre este último bit, consulte este post .
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!