Xorg

X11 - 如何在觸摸屏矩陣上反轉軸?

  • January 5, 2022

我有一台平板電腦,我在上面刷過 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. 通過以下方式查找觸摸屏設備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 ]
  1. 由於我們在平板電腦處於順時針 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或其他方式永久更改。

引用自:https://unix.stackexchange.com/questions/685039