You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下适配libinput的触摸屏校准脚本修改问题

Ubuntu 22.04下适配libinput的触摸屏校准脚本修改问题

嘿,我来帮你搞定这个触摸屏校准适配的问题!首先得明确:Ubuntu 22.04已经全面用libinput替代了老的evdev驱动,两者的校准逻辑和配置方式差异不小,咱们得针对性修改原来的bash1脚本和校准流程。

先回顾下你原来的evdev校准流程:

  • 运行bash1脚本
  • bash1调用setup程序输出evdev格式的校准参数(MinX/MaxX这些)
  • 解析输出生成bash2脚本
  • 用户每次登录运行bash2维持校准

现在要把这套逻辑转换成libinput兼容的方式,具体步骤如下:

1. 先确认libinput相关工具已安装

首先确保系统有必要的工具,打开终端跑这条命令:

sudo apt install libinput-tools xinput-calibrator

2. 理解libinput的校准逻辑

libinput不像evdev那样直接用Min/Max这类硬参数,它靠坐标变换矩阵来实现校准,配置一般保存在Xorg的系统配置文件里(持久生效),或者通过xinput命令临时设置(重启后失效)。咱们要把setup输出的evdev参数转换成这个矩阵,或者直接生成持久化的配置文件。

3. 修改bash1脚本的核心逻辑

原来的bash1是解析setup输出生成bash2,现在要改成解析参数后生成libinput兼容的配置,具体分三步:

第一步:解析setup的输出参数

从setup的输出里提取关键值:

Matchproduct "Fujitsu Component USB Touch Panel"
Option "MinX" "2197"
Option "MaxX" "62185"
Option "MinY" "6421"
Option "MaxY" "2197"

你可以在bash1里用grep+awk来提取这些值,比如:

# 提取设备名称
DEVICE_NAME=$(setup | grep "Matchproduct" | awk -F'"' '{print $2}')
# 提取MinX/MaxX等参数
MIN_X=$(setup | grep "MinX" | awk -F'"' '{print $2}')
MAX_X=$(setup | grep "MaxX" | awk -F'"' '{print $2}')
MIN_Y=$(setup | grep "MinY" | awk -F'"' '{print $2}')
MAX_Y=$(setup | grep "MaxY" | awk -F'"' '{print $2}')

第二步:计算libinput的坐标变换矩阵

根据提取的参数计算变换矩阵(注意你提供的MaxY比MinY小,说明Y轴是反转的,计算时要处理符号):

# 计算X轴范围和比例
RANGE_X=$((MAX_X - MIN_X))
SCALE_X=$(echo "scale=8; 1 / $RANGE_X" | bc)
OFFSET_X=$(echo "scale=8; -$MIN_X / $RANGE_X" | bc)

# 计算Y轴范围和比例(处理反转)
RANGE_Y=$((MAX_Y - MIN_Y))
SCALE_Y=$(echo "scale=8; 1 / $RANGE_Y" | bc)
OFFSET_Y=$(echo "scale=8; -$MIN_Y / $RANGE_Y" | bc)

最终的变换矩阵格式是:$SCALE_X 0 $OFFSET_X 0 $SCALE_Y $OFFSET_Y 0 0 1,代入你给的数值后大概是:0.00001667 0 -0.03662 0 -0.0002367 1.5201 0 0 1

第三步:生成持久化配置(替代bash2)

不用再生成bash2让用户每次登录运行了,直接生成Xorg系统配置文件,重启后永久生效:

在bash1里添加这段代码(需要sudo权限,所以运行bash1时要加sudo):

# 生成libinput校准配置文件
cat << EOF | sudo tee /usr/share/X11/xorg.conf.d/99-fujitsu-touch-calibration.conf
Section "InputClass"
    Identifier "Fujitsu Touch Panel Calibration"
    MatchProduct "$DEVICE_NAME"
    Driver "libinput"
    Option "CalibrationMatrix" "$SCALE_X 0 $OFFSET_X 0 $SCALE_Y $OFFSET_Y 0 0 1"
EndSection
EOF

4. 验证配置是否生效

生成配置后重启系统,然后用xinput list-props "$DEVICE_NAME"查看Coordinate Transformation Matrix参数,确认是否和我们计算的一致,或者直接测试触摸屏的触摸位置是否准确。

如果不想重启,也可以临时用xinput命令设置矩阵,立即生效:

xinput set-prop "$DEVICE_NAME" "Coordinate Transformation Matrix" $SCALE_X 0 $OFFSET_X 0 $SCALE_Y $OFFSET_Y 0 0 1

备注:内容来源于stack exchange,提问作者Rich S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:53:11