介绍
这是我之前问题的后续这里。
当我将平板电脑连接到投影仪时,由于分辨率的变化,笔不再校准。我发现这篇来自 ArchLinux 的 wiki 帖子它完全符合我需要做的,除了数字是一点离开。这是我所做的:
从 xrandr 我得到:
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
...
带+的是我的显示器支持的最大分辨率,带*的是当前分辨率。所以,我得出结论
total_width = 1024
touch_area_width = 1366
touch_area_x_offset = (1024 - 1366) /2 = -171
这可能是我做错的,因为最后我没有得到我真正需要的东西,但几乎就在那里。
然后我查看 xinput list 的输出
⎡ 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)]
第 4,5 和 8 行是我需要的,因此我的设备名称将是“Wacom ISDv4 E6 Pen stylus”、“Wacom ISDv4 E6 Finger”和“Wacom ISDv4 E6 Pen Esper”。
xinput list-props "device name" | grep Matrix
应列出当前的坐标变换矩阵。默认是按行列出的单位矩阵:
Coordinate Transformation Matrix (138): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
变换矩阵为 矩阵为
[ c0 0 c1 ]
[ 0 c2 c3 ]
[ 0 0 1 ]
该教程说计算矩阵如下:(右侧的数字是我针对我的情况计算的数字)
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
对我来说 c2=1 和 c3=0 的原因是,在我的情况下,高度很好,所以我只需要缩放和移动宽度。
我现在需要做的就是将我的矩阵表示为行数组,即:
c0 0 c1 0 c2 c3 0 0 1
对我来说就变成了:
1.333984375 0 -0.22265625 0 1 0 0 0 1
那么以下命令应该为我进行翻译:
xinput set-prop "DEVICE NAME" --type=float "Coordinate Transformation Matrix" 1.333984375 0 -0.22265625 0 1 0 0 0 1
这几乎让我到达了我想去的地方,只是还差一点。所以,我做了一些尝试和错误,得到了以下数字1.345 0 -0.17 0 1 0 0 0 1
所以,这是我的问题
如何找到变换矩阵的精确值?我需要使用不同的分辨率,并且我无法对所有分辨率重复试验和错误过程!