X11 - 如何反转触摸屏矩阵上的轴?

X11 - 如何反转触摸屏矩阵上的轴?

我有一台平板电脑,我在其上闪烁了 Fedora Silverblue,但当设备处于横向模式时,触摸屏的 Y 轴反转,而 X 轴反转纵向模式。

我已经禁用 Wayland 在 xorg 上使用 xinput,但到目前为止还没有运气。


这是平板电脑上当前的矩阵:

Landscape (Clockwise 90°)     Portrait
[ 0 -1 0 ]                    [ 1 0 0 ]
[ 1  0 0 ]                    [ 0 1 0 ]
[ 0  0 1 ]                    [ 0 0 1 ]

当前矩阵处于纵向模式时,Y 轴是正常的,但 X 轴是反转的。有没有办法修复反转?

我尝试应用景观矩阵的逆矩阵(如下),但这只是将景观中的反向 Y 轴翻转为反向 X 轴。

xinput set-prop ID "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1

[  0 1 0 ]
[ -1 0 1 ]
[  0 0 1 ]

注意:这与这里的问题类似:

使用 xorg.conf 修复触摸屏 X 轴反转

除此之外,我试图弄清楚如何通过 xinput 恢复轴。

答案1

一些尝试和错误,但这是我想出的解决方案:

  1. 通过以下方式查找触摸屏设备xinput

    xinput
    

    记下将使用的设备 ID。

  2. 10查找当前屏幕旋转中当前使用的设备的矩阵(在本例中为):

    xinput list-props 10 | grep Matrix
    

    在此示例中,我的平板电脑的屏幕顺时针旋转 90°:

    Coordinate Transformation Matrix (179): 0.000000, -1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000
    

    翻译过来就是:

    x: [ 0 -1 1 ]
    y: [ 1  0 0 ]
    z: [ 0  0 1 ]
    
  3. 由于我们要求平板电脑顺时针旋转 90° 横向时 Y 轴的倒数,因此要求矩阵的倒数。 (任何在线矩阵计算器都可以)。

    上面矩阵的逆矩阵是:

    x: [  0 1 0 ]
    y: [ -1 0 1 ]
    z: [  0 0 1 ]
    

    由于我们只想反转 Y 轴,因此只需将矩阵中的 Y 值挑选为原始矩阵即可。

  4. 这引导我们进入最后一步:获取最终矩阵,“固定”触摸屏上的倒轴。

    x: [  0 -1 1 ] (taken from the original maxtrix)
    y: [ -1  0 1 ] (taken from the inverse matrix)
    z: [  0  0 1 ]
    

    以及“修复”触摸屏的命令:

    xinput set-prop 10 "Coordinate Transformation Matrix" 0 -1 1 -1 0 1 0 0 1
    

udev现在,最后一步是对其他屏幕方向重复上述步骤,并通过或其他方式使更改永久化。

相关内容