事件响应工具evtest--用于调试诊断输入设备相关问题

全文导读:本文主要介绍了如何通过事件响应工具evtest用于调试诊断输入设备相关问题的解决方案。

功能概述

在日常运维过程中,经常会遇到键盘、鼠标、触摸板等输入设备无响应等异常情况,一般可以通过更换设备判断异常。但在遇到更换正常设备后,输入仍然异常的情况下,可以借助evtest工具查看内核的上报事件信息,协助定位问题所在。  

功能介绍

evtest工具是打印evdev内核事件的工具,它直接从内核设备读取并打印设备描述的带有值和符号名的事件,可以用来调试鼠标、键盘、触摸板等输入设备,方便定位问题以及提供判断依据。

安装使用

下面以诊断键盘响应事件为例,说明evtest工具的安装及使用方法,安装及使用过程需要使用root账户或者普通账户sudo提权操作

步骤一:安装工具

uos@uos-PC:~$ sudo apt install evtest

步骤二:确认输入设备对应event编号

uos@uos-PC:~$ sudo evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: HDA ATI HDMI HDMI/DP,pcm=3 /dev/input/event1: HDA Digital PCBeep /dev/input/event2: ft-hda Front Mic /dev/input/event3: ft-hda Rear Mic /dev/input/event4: ft-hda Line /dev/input/event5: ft-hda Line Out /dev/input/event6: ft-hda Front Headphone /dev/input/event7: SIGMACHIP USB Keyboard /dev/input/event8: SIGMACHIP USB Keyboard Consumer Control /dev/input/event9: SIGMACHIP USB Keyboard System Control /dev/input/event10: PixA琀 USB Optical Mouse Select the device event number [0-10]:
此步骤中需要明确键盘设备对应的event编号,以下图为例键盘输入设备对应:/dev/input/event0。(实际应用场景中请根据相关设备实际对应编号推进后续的诊断)

步骤三:选中待诊断设备

在evtest运行过程中会提示选择某个设备event编号进行诊断调试,这里输入对应的编号即可开启对键盘输入设备的调试诊断:
交互文本末尾显示信息如上

步骤四:交互测试键盘响应事件

此时在键盘手动按下“S”键并松开,对应的evtest工具文本交互界面就会自动反馈出事件上报信息:
从上面的截图可知:
▶上报的键盘按键(EV_KEY)类型为“KEY_S”,值(value)为1表示:键盘S键被按下;
▶上报的键盘按键(EV_KEY)类型为“KEY_S”,值(value)为0表示:键盘S键被释放;
这两个事件连接起来就表示,键盘敲击了一下S键(code为31)。
在输入设备的故障排查过程中,就可以通过这个调试结果,辅助判断输入设备是否响应,以及键盘敲击的次数,对应系统响应的次数。  

名词解释:

专属名词说明介绍
Event typestypes对应于一个相同逻辑输入结构的一组Codes。每个type都有一组可用的codes用于产生输入事情。
EV_SYN用于事件间的切割标志。事件或许按时间或空间进行切割,就像在多点触控协议中的举例。EVSYN 事件没有对values进行详细的解说, 它们的运用办法仅在发送evdev的事件中有解说。
SYN_REPORT当多个输入数据在同一时间产生改变时,SYN_REPORT用于把这些数据进行打包和包同步。例如,一次鼠标的移动能够上报REL_X和REL_Y两个数值,然后宣布一个SYN_REPORT。下一次鼠标移动将再次宣布REL_X和REL_Y两个数值,然后紧跟着另一个SYN_REPORT。
EV_KEY用来描述键盘,按键或者类似键盘设备的状态变化。EV_KEY事件采纳KEY或BTN的办法,例如:KEY_A代表键盘上的A键,当一个按键被按下时,一个带有按键编码和value为1的事件被宣布出来;当一个按键被放开时,一个value为0的事件被宣布出来;有些硬件当按键重复时会宣布value值为2的事件;一般,KEY用作键盘上的按键,而BTN则用于开关按钮事件。
EV_MSC当事件不能用其它事件类型描绘时,使用该EV_MSC类型进行输入和输出事件的上报。

©统信软件技术有限公司。访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本网站任何内容或服务进行转载,须备注:该文档出自【faq.uniontech.com】统信软件知识分享平台。否则统信软件将追究相关版权责任。

2023-06-15
0 0