校准触摸屏

来自 ArchWiki

此文章或章节是与 触摸屏 合并的候选对象。

注意: 请使用模板的第二个参数来提供更详细的指示。 (在 Talk:校准触摸屏 中讨论)

要使用多个显示器(其中一些是触摸屏),您需要告诉 Xorg 触摸表面和屏幕之间的映射。这可以使用 xinput 来设置触摸屏的坐标变换矩阵。

这是一个以老式方法执行此操作的指南,适用于 xrandr 不知道您的单独屏幕的情况,因为它们已合并为一个(例如,使用 TwinView 时)。其他人,请转到 触摸屏 以轻松的方式进行操作。

每次连接显示器或登录时,您都需要运行 xinput 命令。 当然,您可以将命令添加到您的会话自动启动中。 您还可以使用 Udev 来自动化此操作。

使用 nVidia's TwinView

了解你的系统

你的屏幕

使用 TwinView,X 会将您的所有屏幕视为一个大屏幕。您可以通过执行以下命令获取总高度和宽度

$ xrandr | grep \* # xrandr uses "*" to identify the screen being used

您应该看到如下行

3600x1230      50.0* 

这意味着,您的总宽度为 3600,总高度为 1230。

你的触摸设备

您的下一个任务是获取您设备的名称。执行

$ xinput list

并通过其名称找到它。找到包含 [slave pointer (2)] 的项目,这通常是您自己的设备名称。例如,如果该行看起来像这样

⎜   ↳ Acer T230H                              	id=24	[slave  pointer  (2)]

您的设备名称是

Acer T230H
提示: 如果您的设备包含手写笔和触摸屏以及更多触摸设备,请在确定设备时注意名称。

执行

$ xinput list-props "Device Name"

并确保存在名为

Coordinate Transformation Matrix

的属性。如果不是,您可能选择了错误的设备,请使用另一个。

触摸区域

您需要将触摸区域缩小到一个小于总屏幕的矩形。这意味着,您必须知道四个值

  • 触摸区域的高度
  • 触摸区域的宽度
  • 水平偏移(x 偏移)(总屏幕的左边缘和触摸区域的左边缘之间的像素量)
  • 垂直偏移(y 偏移)(总屏幕的顶部边缘和触摸区域的顶部边缘之间的像素量)

计算坐标变换矩阵

现在,尽可能准确地计算这些值

  • c0 = 触摸区域宽度 / 总宽度
  • c2 = 触摸区域高度 / 总高度
  • c1 = 触摸区域 x 偏移 / 总宽度
  • c3 = 触摸区域 y 偏移 / 总高度

矩阵是

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

它表示为逐行数组

c0 0 c1 0 c2 c3 0 0 1

应用矩阵

执行

$ xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" c0 0 c1 0 c2 c3 0 0 1

例如

$ xinput set-prop "Acer T230H" --type=float "Coordinate Transformation Matrix" 0.533333333 0 0 0 0.87804878 0.12195122 0 0 1

校准您的触摸屏设备。现在,它应该正常工作了。

通过 udev 规则自动执行

创建一个类似于 /etc/udev/rules.d/99-acer-touch.rules 的文件,内容如下所示

/etc/udev/rules.d/99-acer-touch.rules
ENV{ID_VENDOR_ID}=="2149",ENV{ID_MODEL_ID}=="2703",ENV{WL_OUTPUT}="DVI1",ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0  0 1 0"

替换您自己的触摸屏的供应商 ID、型号 ID、xrandr 输出名称以及您上面计算的校准矩阵。这是基于您正在为触摸屏使用 libinput 驱动程序的假设。

Wayland

使用 libinput,您可以在 Wayland 合成器上校准触摸屏。请参阅 libinput 文档

如果您安装了 weston,则可以使用 weston-calibrator 实用程序来获取变换矩阵。然后,您可以使用 udev 规则来应用它。

故障排除

如果在按照这些说明操作后,当您触摸屏幕时,在不同的位置发生多次单击,您将需要使用 ABS 构建 xorg-server 软件包,并在构建软件包之前应用 此补丁。(此补丁在当前的 xorg 源代码上失败,但该错误至少在一个系统上存在。)

使用 libinput

libinput 软件包提供了一些实用程序来调试输入事件

  • libinput debug-events 命令提供了由所有设备(包括触摸屏驱动程序)发出的事件列表。您可以使用 --verbose 选项获取更多信息。
  • libinput debug-gui 提供了图形调试环境。这对于直观地验证变换矩阵是否具有正确的值很有用。
  • libinput list-devices 列出了所有输入设备。这对于识别输入设备的名称和最终属性很有用。使用此命令,您还可以验证变换矩阵是否已正确应用。

有关更多信息,请参阅 libinput 页面的故障排除部分

参见