我继承了一个使用 Evdev 作为触摸屏驱动程序的进程,它至少是 7 年前的。在 Panasonic Toughbook 上运行。这是用于触摸屏校准。问题是现在我们正在运行 Ubuntu 22.04,它使用 libinput 而不是 evdev 来处理设备。
以往的触摸屏机制如下:
- 系统运行一个bash1文件
- bash 文件运行一个名为“setup”的程序,“setup”程序作为 evdev 设备接口运行,其输出与配置 evdev 设备驱动程序相关。3.“setup”的输出被解析并放入新文件 bash2 中
- 每次用户登录时都会运行 bash2 来维持校准。
bash1 需要修改。它解析“setup”的输出,其中包含以下内容。
匹配产品“富士通组件 USB 触摸屏” 选项“MinX”“2197” 选项“MaxX”“62185” 选项“MinY”“6421” 选项“MaxY”“2197”
它执行 Sed 命令解析此输出并创建 Bash 2 文件。现在这不起作用,因为 libinput 校准矩阵不同。我可以使用 Sed 命令对 libinput 的校准进行硬编码吗?尝试想出最好的方法。任何建议都值得赞赏。libinput 校准如下。
创建的 Bash2 不起作用。 xinput set-prop "Fujitsu Component USB Touch Panel" --format=32 "MinX" "2677" xinput set-prop "Fujitsu Component USB Touch Panel" --format=32 "MaxX" "61641" xinput set-prop "Fujitsu Component USB Touch Panel" --format=32 "MinY" "6706" xinput set-prop "Fujitsu Component USB Touch Panel" --format=32 "MaxY" "63300"
当然可以!要使用 Wayland 上的 libinput 校准触摸屏,请按照以下步骤操作:
了解您的系统:通过运行以下命令确定屏幕的总宽度和高度:$ xrandr | grep“*”
注意宽度和高度的值。识别您的触摸设备:运行:$ xinput list
通过名称找到您的触摸设备(通常列为 [从属指针 (2)])。执行:$ xinput list-props “设备名称”
确保有一个名为“坐标变换矩阵”的属性。 定义触摸区域:确定触摸区域的尺寸(高度、宽度、x 偏移和 y 偏移)。 计算校准矩阵:计算以下值: c0 = touch_area_width / total_width c2 = touch_area_height / total_height c1 = touch_area_x_offset / total_width c3 = touch_area_y_offset / total_height 矩阵表示为: [ c0 0 c1 ] [ 0 c2 c3 ] [ 0 0 1 ]
应用矩阵:执行:$ xinput set-prop “设备名称” --type=float “坐标变换矩阵” c0 0 c1 0 c2 c3 0 0 1
将“设备名称”替换为您的实际设备名称,并使用计算出的矩阵值。请记住根据您的特定触摸屏和显示器设置调整值。如果您遇到任何问题,请参阅 libinput 文档以了解更多详细信息。