Weston-Wayland中校准矩阵位置查询及Yocto嵌入式Linux系统触摸屏永久校准方案咨询
解决Yocto构建Weston系统触摸屏校准重启失效的问题
我之前在基于Yocto构建的Weston(Wayland)嵌入式Linux系统里,也碰到过和你一模一样的触摸屏校准后重启失效的问题,折腾了好一阵才找到几个可行的解决办法,分享给你:
方法1:手动将校准矩阵写入Weston配置文件
这是最直接的方式,核心是把校准后的矩阵值持久化到Weston的配置文件里:
- 第一步:获取校准矩阵
运行weston-touch-calibrator完成校准后,不要直接关闭窗口,回到启动该工具的终端,你会看到类似如下的输出(如果终端没显示,可以将输出重定向到文件:weston-touch-calibrator > calibration.txt):
把这串矩阵值记下来。Calibration matrix: 0.9876 0.0123 -0.0045 0.0067 1.0234 -0.0123 0 0 1 - 第二步:修改Weston配置文件
先找到Weston的配置文件位置,Yocto构建的系统里通常在/etc/weston/weston.ini或/etc/xdg/weston/weston.ini,可以用find / -name weston.ini查找。
打开文件后,添加或修改[input]章节,把校准矩阵加进去:[input] # 替换成你拿到的校准矩阵值 calibration_matrix = 0.9876 0.0123 -0.0045 0.0067 1.0234 -0.0123 0 0 1 - 第三步:生效配置
如果系统是只读文件系统,需要先重新挂载为可写:mount -o remount,rw /,修改保存后再改回只读:mount -o remount,ro /。
重启Weston服务(systemctl restart weston)或者直接重启系统,校准值就会永久生效了。
方法2:用udev规则自动加载校准矩阵
这种方式适合依赖udev管理设备的系统,设备启动时自动应用校准:
- 第一步:获取触摸设备名称
运行libinput list-devices,找到你的触摸屏设备,记下它的Name字段,比如"Generic Touchscreen"。 - 第二步:创建udev规则文件
在/etc/udev/rules.d/目录下创建一个规则文件,比如99-touch-calibration.rules,内容如下:
注意替换设备名称和校准矩阵值。SUBSYSTEM=="input", ATTRS{name}=="Generic Touchscreen", ENV{LIBINPUT_CALIBRATION_MATRIX}="0.9876 0.0123 -0.0045 0.0067 1.0234 -0.0123 0 0 1" - 第三步:生效规则
重新加载udev规则:udevadm control --reload-rules && udevadm trigger,之后重启系统,校准值就会自动应用。
方法3:Yocto构建时集成校准配置(适合批量生产)
如果是批量部署设备,可以直接在Yocto构建时把校准配置集成到镜像里,避免每台设备手动操作:
- 在你的自定义Yocto层(比如
meta-custom)里,创建recipes-graphics/weston/weston-custom/目录,放入修改好的weston.ini文件(包含校准矩阵)。 - 编写
weston-custom.bbappend文件,内容如下:
这样构建出来的镜像就会自带校准好的Weston配置,烧写后直接生效。FILESEXTRAPATHS_prepend := "${THISDIR}/weston-custom:" SRC_URI += "file://weston.ini" do_install_append() { install -m 0644 ${WORKDIR}/weston.ini ${D}${sysconfdir}/weston/ }
额外注意事项
- 如果找不到weston-touch-calibrator的输出,可以用
libinput debug-events --touch辅助查看触摸数据,但还是优先看校准工具的终端输出更准确。 - 部分Yocto版本可能需要确保Weston编译时启用了触摸校准支持,检查你的Weston recipe是否包含了
PACKAGECONFIG += "touch-calibrator"。
内容的提问来源于stack exchange,提问作者ahmet cihan Akınca
相关产品推荐
相关产品推荐

