我的编程空间,编程开发者的网络收藏夹
学习永远不晚

触摸屏校正

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

触摸屏校正

有些设备的触摸屏不准,需要校正后才能正常使用。校正实际上就是配置设备在 Xorg 中的属性,具体属性名与驱动相关,后文描述。

注意: 本文所有的操作都是在 deepin 上完成,包名不同的请自行查找。

下面开始介绍校正方法:

准备

安装需要用到的工具:

  • xinput-calibrator : 触摸屏校正工具
  • xinput : 屏幕映射工具,多屏时使用

校正

  1. 执行 xinput_calibrator --list 查看触摸设备列表
  2. 校正设备 xinput_calibrator -v --device <device name or id>

    device name or id 从上面的 list 中得到

此时会出现校正界面,按照提示点击,成功后程序会输出校正后的数据。

接着根据驱动的不同选择不同的设置方法,查看设备使用的驱动可通过 /var/log/Xorg.0.log 文件得到。

  • evdev

    使用 evedev 驱动时可直接使用 xinput_calibrator 输出的数据,无需其它设置。

    测试时使用 xinput 设置 Evdev Axis Calibration 属性。

  • libinput

    使用 libinput 驱动时需要将 xinput_calibrator 输出的数据进行计算才可使用,计算方法参见: Libinput breaks xinput_calibrator

    在此将计算方法写成了一个脚本,内容如下:

    #!/usr/bin/env python3
    # -*- coding: UTF-8 -*-
    
    import sys
    
    def usage():
        info = "Usage: " + sys.argv[0]
        info += " <screen_width> <screen_height>"
        info += " <click_0_x> <click_0_y>"
        info += " <click_3_x> <click_3_y>"
        print(info)
        print("\tScreen width/hight by the command 'xrandr|grep screen' got")
        print("\tClick x/y by the command 'xinput_calibrator -v' got")
        sys.exit(0)
    
    def convert(screen_x, screen_y, c0_x, c0_y, c3_x, c3_y):
        a = (screen_x * 6 / 8) / (c3_x - c0_x)
        c = ((screen_x / 8) - (a * c0_x)) / screen_x
        e = (screen_y * 6 / 8) / (c3_y - c0_y)
        f = ((screen_y / 8) - (e * c0_y)) / screen_y
    
        print("Try set 'libinput Calibration Matrix' to '%.1f, 0.0, %.1f, 0.0, %.1f, %.1f, 0.0, 0.0, 1.0'" % (a,c,e, f))
    
    if __name__ == "__main__":
        if len(sys.argv) != 7:
            usage()
    
        convert(int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]),
        int(sys.argv[4]),int(sys.argv[5]),int(sys.argv[6]))

    测试时使用 xinput 设置 libinput Calibration Matrix 属性。

    若上面计算的值设置后仍有问题,尝试 Calculate the Coordinate Transformation Matrix 这种计算方法。

    如若都不行切换到 evdev 驱动,即安装 xserver-xorg-input-evdev 然后添加 99-touchscreen-evdev.conf/etc/X11/xorg.conf.d 目录, 内容如下:

    Section "InputClass"
          Identifier    "calibration"
          Driver    "evdev"
          MatchProduct    "<touchscreen product>"
    EndSection

    其中的 touchscreen product 可以从 /var/log/Xorg.0.log 得到。


示例

如在 Huawei 上执行校正操作的输出如下:

deepin@deepin-PC:~$ xinput_calibrator -v
DEBUG: XInputExtension version is 2.3
DEBUG: Skipping virtual master devices and devices without axis valuators.
DEBUG: Skipping device 'Virtual core XTEST pointer' id=4, does not report Absolute events.
DEBUG: Skipping device 'SYNA1D31:00 06CB:CD48 Touchpad' id=12, does not report Absolute events.
DEBUG: Selected device: SYNA2393:00 06CB:19AC
DEBUG: Not usbtouchscreen calibrator: Not a usbtouchscreen device
DEBUG: Evdev Axis Calibration not set, setting to axis valuators to be sure.
        Setting calibration data: 0, 3000, 0, 2000
DEBUG: Successfully applied axis calibration.
DEBUG: Read axes swap value of 0.
DEBUG: Read InvertX=0, InvertY=0.
Calibrating EVDEV driver for "SYNA2393:00 06CB:19AC" id=11
        current calibration values (from XInput): min_x=0, max_x=3000 and min_y=0, max_y=2000
DEBUG: Found that 'SYNA2393:00 06CB:19AC' is a sysfs name.
DEBUG: Adding click 0 (X=382, Y=246)
DEBUG: Adding click 1 (X=2647, Y=246)
DEBUG: Adding click 2 (X=376, Y=1761)
DEBUG: Adding click 3 (X=2640, Y=1764)

Doing dynamic recalibration:
        Setting calibration data: 2, 3021, -7, 2015
DEBUG: Successfully applied axis calibration.
        --> Making the calibration permanent <--
DEBUG: Found that 'SYNA2393:00 06CB:19AC' is a sysfs name.
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
        Identifier    "calibration"
        MatchProduct    "SYNA2393:00 06CB:19AC"
        Option    "Calibration"    "2 3021 -7 2015"
        Option    "SwapAxes"    "0"
EndSection

Xorg.0.log 中设备驱动相关的日志如下:

[  7221.421] (II) config/udev: Adding input device SYNA2393:00 06CB:19AC (/dev/input/event7)
[  7221.421] (**) SYNA2393:00 06CB:19AC: Applying InputClass "evdev touchscreen catchall"
[  7221.421] (**) SYNA2393:00 06CB:19AC: Applying InputClass "libinput touchscreen catchall"
[  7221.421] (**) SYNA2393:00 06CB:19AC: Applying InputClass "calibration"
[  7221.421] (II) LoadModule: "evdev"
[  7221.421] (II) Loading /usr/lib/xorg/modules/input/evdev_drv.so
[  7221.421] (II) Module evdev: vendor="X.Org Foundation"
[  7221.421]    compiled for 1.19.1, module version = 2.10.5
[  7221.421]    Module class: X.Org XInput Driver
[  7221.421]    ABI class: X.Org XInput driver, version 24.1
[  7221.421] (II) Using input driver 'evdev' for 'SYNA2393:00 06CB:19AC'

  • evdev

执行命令 xinput set-prop 11 Evdev Axis Calibration 2 3021 -7 2015 测试效果


  • libinput

使用上面的 click 0click 3 的值以及 xrandr 得到的 screen width/height 计算,得到的值如下:

$ python3 ./touchscreen_calibration_convert.py 344 193 382 246 376 1761
Try set 'libinput Calibration Matrix' to '-43.0, 0.0, 47.9, 0.0, 0.1, 0.0, 0.0, 0.0, 1.0'

执行命令 xinput set-prop 11 libinput Calibration Matrix -43.0 0.0 47.9 0.0 0.1 0.0 0.0 0.0 1.0 测试效果。

额外问题

某些设备按照上述步骤设置后仍然有一些问题,这里列出一些遇到过的,一旦出现下面这些情况,请先切换驱动到 evdev 然后进行设置。

上下相反

如点击 左上角 却反馈在 左下角 ,在 90-touchscreen-calibrator.conf 中加上 Option InvertY "true"

左右相反

如点击 左上角 却反馈在 右下角 ,在 90-touchscreen-calibrator.conf 中加上 Option InvertX "true"

边缘偏移

如点击最右边却反馈在旁边的区域,此时可调整 Option Calibration 的值,其值的含有为: "min-x max-x min-y max-y" 。在四个边缘都试下,然后调整对应的值。

XY 相反

如点击 左上角 却反馈在 右上角 ,在 90-touchscreen-calibrator.conf 中加上 Option SwapAxes "true"

持久化

上面的测试无误后,就开始集成到系统中,每次启动时都自动执行。

自动执行通过 xorg.conf.d 钩子执行,添加 90-touchscreen-calibrator.conf/etc/X11/xorg.conf.d/ 目录中。

evdev

示例内容如下:

Section "InputClass"
        Identifier    "calibration"
        MatchProduct    "SYNA2393:00 06CB:19AC"
        Option    "Calibration"    "2 3021 -7 2015"
        Option    "SwapAxes"    "0"
EndSection

libinput

示例内容如下:

Section "InputClass"
        Identifier    "calibration"
        MatchProduct    "SYNA2393:00 06CB:19AC"
        Option    "CalibrationMatrix"    "-43.0 0.0 47.9 0.0 0.1 0.0 0.0 0.0 1.0"
EndSection

设备映射

若存在多块屏幕,这时就需要指定触摸屏对应的设备,使用 xinput --map-output-to <device id> <output name>

device name 就是上文中得到的 idoutput name 可通过 xrandr 命令得到。

持久化

可添加 90-touchscreen-map/etc/X11/xinit/xinitrc.d 目录,内容就是上面的命令。

参考文档

  • man 4 evdev : 需要安装 xserver-xorg-input-evdev
  • man 4 libinput : 需要安装 xserver-xorg-input-libinput

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

触摸屏校正

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

触摸屏校正

有些设备的触摸屏不准,需要校正后才能正常使用。校正实际上就是配置设备在 Xorg 中的属性,具体属性名与驱动相关,后文描述。注意: 本文所有的操作都是在 deepin 上完成,包名不同的请自行查找。下面开始介绍校正方法:准备安装需要用到的工
2023-01-31

win8.1怎么关闭触摸屏? windows8.1触摸屏关闭教程

win8.1触摸屏关闭教程大家想知道吗fmAYtYgca?下文将会演示win8.1关闭电脑触摸屏步骤,编程客栈有些朋友不习惯win8.1系统的电脑触摸屏,该如何禁用呢?希望下文的方法能帮助到大家。 --php步骤如下编程• 右键开
2023-06-06

不习惯win8.1系统的电脑触摸屏如何关闭触摸屏

win8.1触摸屏关闭教程大家想知道吗?下文将会演示win8.1关闭电脑触摸屏步编程骤,有些朋友不习惯win8.1系统的电脑触摸屏,该如何禁用呢?希望下文的方法能帮助到大家。--步骤如下• 右键开始菜单php,进入设备管理器。&b
2023-06-06

win7笔记本触摸板如何设置滚屏使用触摸屏进行滚屏

我们在使用笔记本的时候触摸屏很方便,可是为什么大家的本本都会连接鼠标,这是因为大家不知道怎么使用触摸屏进行滚屏,而浏览网页的时候滚屏是常常用到的,下面小编就介绍下win7笔记本触摸板如何设置滚屏。1、首先选择点击任务栏右下角的Synapti
2023-06-07

win11如何开启触摸屏

这篇文章主要介绍了win11如何开启触摸屏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win11如何开启触摸屏文章都会有所收获,下面我们一起来看看吧。win11开启触摸屏教程:1、首先点击底部开始菜单,如图所
2023-07-02

linux 触摸屏驱动编写

早在诺基亚手机还比较流行的时候,那时候触摸屏用的还不多。但是随着触摸屏手机、即智能手机的流行,触摸屏基本成了手机的标配。所以,今天可以看看触摸屏驱动在linux上是如何进行的。 1、驱动目录drivers/input 2、看看这个目
2022-06-04

win7触摸屏怎么一键关闭

这篇文章主要介绍“win7触摸屏怎么一键关闭”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win7触摸屏怎么一键关闭”文章能帮助大家解决问题。win7触摸屏一键关闭方法/步骤:1.打开win7系统中
2023-06-27

win10怎么设置禁用触摸屏

这篇文章主要为大家展示了“win10怎么设置禁用触摸屏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“win10怎么设置禁用触摸屏”这篇文章吧。1.在开始菜单中搜索设备管理器并打开,在设备管理器下
2023-06-27

win10触摸屏键盘如何开启

要开启Win10触摸屏键盘,请按照以下步骤操作:1. 打开“设置”菜单。可以通过点击任务栏右下角的通知图标,在弹出的快速操作菜单中点击“所有设置”来进入“设置”菜单。2. 在“设置”菜单中,点击“设备”。3. 在“设备”界面中,选择“键盘”
2023-09-20

Android触摸屏事件怎么设置

在Android中,可以通过以下步骤来设置触摸屏事件:创建一个继承自View的自定义视图类,例如TouchView。public class TouchView extends View {// 构造方法public TouchView(C
2023-10-23

在屏幕中启用和禁用触摸屏Windows

要在Windows中启用或禁用触摸屏,可以按照以下步骤操作:1. 打开“设备管理器”。可以通过按下Windows键+X,然后选择“设备管理器”,或者在Windows搜索栏中输入“设备管理器”来打开它。2. 在“设备管理器”窗口中,展开“人机
2023-09-12

jQuery如何监听触摸屏幕事件?

jQuery监听触摸屏幕事件简介jQuery提供了丰富的事件API,可轻松监听和处理触摸屏事件。事件类型touchstart:手指按下屏幕touchmove:手指在屏幕移动touchend:手指抬起屏幕touchcancel:事件被取消使用方法$(selector).on("touchstart",function(event){//处理事件});处理事件事件对象包含事件详情,包括:event.type:事件类型event.target:触发事件的元素event.touches:当前触摸点event.ch
jQuery如何监听触摸屏幕事件?
2024-04-02

Pygame与Ubuntu触摸屏交互体验优化

Pygame 是一个用于编写视频游戏的 Python 库,它提供了图像、声音、事件处理等功能。在 Ubuntu 系统上使用 Pygame 与触摸屏交互时,可能会遇到一些体验上的问题。以下是一些建议,帮助你优化 Pygame 在 Ubuntu
Pygame与Ubuntu触摸屏交互体验优化
2024-10-13

win10屏幕色彩如何校正

这篇文章主要介绍“win10屏幕色彩如何校正”,在日常操作中,相信很多人在win10屏幕色彩如何校正问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win10屏幕色彩如何校正”的疑惑有所帮助!接下来,请跟着小编
2023-07-01

如何校正电脑屏幕颜色

这篇文章主要介绍“如何校正电脑屏幕颜色”,在日常操作中,相信很多人在如何校正电脑屏幕颜色问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何校正电脑屏幕颜色”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!校正
2023-07-01

让Win8桌面更利于触摸屏操作的简单设置

但是,当我想尝试在传统桌面下用触控来代替一些简单鼠标操作的时候,问题来了:桌面程序上的菜单选项也好,文件管理器的导航面板也好,这些对象都偏小,一个手指点上去很容易偏离目标导致选中隔壁的。也许光用文字不够直观,那么下面这张图会给大家一个参考。
2022-06-04

vue如何实现一个带有触摸屏支持的3D球

这篇文章主要讲解了“vue如何实现一个带有触摸屏支持的3D球”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现一个带有触摸屏支持的3D球”吧!准备工作首先,我们需要使用Vue CL
2023-07-05

校正Win10系统屏幕颜色的方法

我们有时会因为一些特殊的原因开始改变屏幕的颜色,让用户看起来很不舒服,那么Win10应该如何纠正屏幕的颜色呢?让我们来看看Win10系统屏幕颜色的校正方法。1.打开鼠标右键桌面空白处显示设置窗口。2.点击显示栏右侧的高级显示设置按钮。3.点
2023-07-16

Windows 8系统下禁用ThinkPad触摸屏的详细方法介绍

X230t电脑安装的Win8系统,希望禁用触摸屏。 可以使用SimpleTap禁用触摸屏。打开SimpleTap: 选择屏幕锁:点击关闭触摸屏,然后重启电脑后即可。附上SimpleTap软件下载地址,Thinkpad全线产品均可安装,针对W
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录