Linux下查看输入设备、获取输入事件的详细方法

这篇具有很好参考价值的文章主要介绍了Linux下查看输入设备、获取输入事件的详细方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/dev/input/目录

/dev/input/目录下的事件都是在驱动中调用input_register_device(struct input_dev *dev)产生的。笔者的/dev/input/目录中的文件如下:

$ ls /dev/input/
by-id  by-path  event0  event1  event10  event11  event12  event13  event2  event3  event4  event5  event6  event7  event8  event9  mice  mouse0  mouse1  mouse2
$ ls -l /dev/input
总用量 0
drwxr-xr-x 2 root root     100 11月  7 11:09 by-id
drwxr-xr-x 2 root root     200 11月  7 11:09 by-path
crw-rw---- 1 root input 13, 64 11月  2 15:53 event0
crw-rw---- 1 root input 13, 65 11月  2 15:53 event1
crw-rw---- 1 root input 13, 74 11月  2 15:53 event10
crw-rw---- 1 root input 13, 75 11月  2 15:53 event11
crw-rw---- 1 root input 13, 76 11月  2 15:53 event12
crw-rw---- 1 root input 13, 77 11月  2 15:53 event13
crw-rw---- 1 root input 13, 66 11月  2 15:53 event2
crw-rw---- 1 root input 13, 67 11月  2 15:53 event3
crw-rw---- 1 root input 13, 68 11月  2 15:53 event4
crw-rw---- 1 root input 13, 69 11月  7 11:09 event5
crw-rw---- 1 root input 13, 70 11月  2 15:53 event6
crw-rw---- 1 root input 13, 71 11月  2 15:53 event7
crw-rw---- 1 root input 13, 72 11月  2 15:53 event8
crw-rw---- 1 root input 13, 73 11月  2 15:53 event9
crw-rw---- 1 root input 13, 63 11月  2 15:53 mice
crw-rw---- 1 root input 13, 32 11月  2 15:53 mouse0
crw-rw---- 1 root input 13, 33 11月  2 15:53 mouse1
crw-rw---- 1 root input 13, 34 11月  7 11:09 mouse2

每个event代表一个事件。那么如何知道每个事件分别与哪个设备对应?这需要借助于/proc/bus了。

/proc/bus/input/devices

/proc/bus/input/devices存放了与event对应的相关设备信息。笔者电脑中的内容如下:

$ cat /proc/bus/input/devices 
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1a/PNP0C0D:00/input/input0
U: Uniq=
H: Handlers=event0 
B: PROP=0
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
U: Uniq=
H: Handlers=kbd event1 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input2
U: Uniq=
H: Handlers=sysrq kbd event2 leds 
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="Ideapad extra buttons"
P: Phys=ideapad/input0
S: Sysfs=/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/VPC2004:00/input/input7
U: Uniq=
H: Handlers=rfkill kbd event6 
B: PROP=0
B: EV=13
B: KEY=81000800100c03 4400000000300000 0 2
B: MSC=10

I: Bus=0018 Vendor=06cb Product=ce2d Version=0100
N: Name="MSFT0001:01 06CB:CE2D Mouse"
P: Phys=i2c-MSFT0001:01
S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-MSFT0001:01/0018:06CB:CE2D.0001/input/input8
U: Uniq=
H: Handlers=mouse0 event3 
B: PROP=0
B: EV=17
B: KEY=30000 0 0 0 0
B: REL=3
B: MSC=10

I: Bus=0018 Vendor=06cb Product=ce2d Version=0100
N: Name="MSFT0001:01 06CB:CE2D Touchpad"
P: Phys=i2c-MSFT0001:01
S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-MSFT0001:01/0018:06CB:CE2D.0001/input/input9
U: Uniq=
H: Handlers=mouse1 event4 
B: PROP=5
B: EV=1b
B: KEY=e520 10000 0 0 0 0
B: ABS=2e0800000000003
B: MSC=20

I: Bus=0003 Vendor=13d3 Product=56ff Version=1919
N: Name="Integrated Camera: Integrated C"
P: Phys=usb-0000:00:14.0-7/button
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/input/input11
U: Uniq=
H: Handlers=kbd event7 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input12
U: Uniq=
H: Handlers=kbd event8 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sof-hda-dsp Headset Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input13
U: Uniq=
H: Handlers=event9 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sof-hda-dsp Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input14
U: Uniq=
H: Handlers=event10 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sof-hda-dsp HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input15
U: Uniq=
H: Handlers=event11 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sof-hda-dsp HDMI/DP,pcm=4"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input16
U: Uniq=
H: Handlers=event12 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sof-hda-dsp HDMI/DP,pcm=5"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input17
U: Uniq=
H: Handlers=event13 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0003 Vendor=093a Product=2521 Version=0111
N: Name="USB OPTICAL MOUSE"
P: Phys=usb-0000:00:14.0-5/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-5/3-5:1.0/0003:093A:2521.0005/input/input20
U: Uniq=
H: Handlers=mouse2 event5 
B: PROP=0
B: EV=17
B: KEY=1f0000 0 0 0 0
B: REL=1943
B: MSC=10

可以看到,每一项的“H:”一行后边的内容中就是对应的event。以触摸板为例:

I: Bus=0018 Vendor=06cb Product=ce2d Version=0100
N: Name="MSFT0001:01 06CB:CE2D Touchpad"
P: Phys=i2c-MSFT0001:01
S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-MSFT0001:01/0018:06CB:CE2D.0001/input/input9
U: Uniq=
H: Handlers=mouse1 event4 
B: PROP=5
B: EV=1b
B: KEY=e520 10000 0 0 0 0
B: ABS=2e0800000000003
B: MSC=20

通过“N:”一行后边的内容可以看出是Touchpad设备,它对应的事件见于“H: Handlers=mouse1 event4”一行,是event4。

由此引出来一个常用的输入事件测试工具 —— evtest。

evtest

在开发input子系统驱动时,常常会使用evtest工具进行测试。evtest是打印evdev内核事件的工具,它直接从内核设备读取并打印设备描述的带有值和符号名的事件,可以用来调试鼠标、键盘、触摸板等输入设备
evtest通常用于在X.org中调试输入设备的问题,evtest提供了内核的处理信息。根据这些信息,可以判断是内核问题还是X.org问题。

输出数据中,“type”是input类型,可以是“EV KEY”、“EV SW”、“EV SND”、“EV LED”或数值;“value”可以是十进制也可以是十六进制,或者是查询的kev/开关/声音/LED的常量名。

下边看一下具体的安装使用方法。

安装

sudo apt install evtest -y

编译安装

$ tar   -xjvf   evtest_1.33.orig.tar.bz2
$ cd evtest-1.33/
$ ./configure
$ make
$ sudo make install

使用

sudo evtest /dev/input/eventx(x为事件编号)

 注:需要用root用户,或者sudo操作。

在笔者电脑中,运行示例如下:

$ sudo evtest

No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Lid Switch
/dev/input/event1:	Power Button
/dev/input/event2:	AT Translated Set 2 keyboard
/dev/input/event3:	MSFT0001:01 06CB:CE2D Mouse
/dev/input/event4:	MSFT0001:01 06CB:CE2D Touchpad
/dev/input/event5:	USB OPTICAL MOUSE
/dev/input/event6:	Ideapad extra buttons
/dev/input/event7:	Integrated Camera: Integrated C
/dev/input/event8:	Video Bus
/dev/input/event9:	sof-hda-dsp Headset Mic
/dev/input/event10:	sof-hda-dsp Headphone
/dev/input/event11:	sof-hda-dsp HDMI/DP,pcm=3
/dev/input/event12:	sof-hda-dsp HDMI/DP,pcm=4
/dev/input/event13:	sof-hda-dsp HDMI/DP,pcm=5
Select the device event number [0-13]: 

仍然以Touchpad为例,对应的event为4,输入4,并随便在触摸板上滑动,结果如下:

Select the device event number [0-13]: 4
Input driver version is 1.0.1
Input device ID: bus 0x18 vendor 0x6cb product 0xce2d version 0x100
Input device name: "MSFT0001:01 06CB:CE2D Touchpad"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 272 (BTN_LEFT)
    Event code 325 (BTN_TOOL_FINGER)
    Event code 328 (BTN_TOOL_QUINTTAP)
    Event code 330 (BTN_TOUCH)
    Event code 333 (BTN_TOOL_DOUBLETAP)
    Event code 334 (BTN_TOOL_TRIPLETAP)
    Event code 335 (BTN_TOOL_QUADTAP)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value    994
      Min        0
      Max     1224
      Resolution      12
    Event code 1 (ABS_Y)
      Value    505
      Min        0
      Max      804
      Resolution      12
    Event code 47 (ABS_MT_SLOT)
      Value      0
      Min        0
      Max        4
    Event code 53 (ABS_MT_POSITION_X)
      Value      0
      Min        0
      Max     1224
      Resolution      12
    Event code 54 (ABS_MT_POSITION_Y)
      Value      0
      Min        0
      Max      804
      Resolution      12
    Event code 55 (ABS_MT_TOOL_TYPE)
      Value      0
      Min        0
      Max        2
    Event code 57 (ABS_MT_TRACKING_ID)
      Value      0
      Min        0
      Max    65535
  Event type 4 (EV_MSC)
    Event code 5 (MSC_TIMESTAMP)
Properties:
  Property type 0 (INPUT_PROP_POINTER)
  Property type 2 (INPUT_PROP_BUTTONPAD)
Testing ... (interrupt to exit)
Event: time 1667899054.177672, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1515
Event: time 1667899054.177672, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 376
Event: time 1667899054.177672, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 382
Event: time 1667899054.177672, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1667899054.177672, type 1 (EV_KEY), code 325 (BTN_TOOL_FINGER), value 1

直接读取/dev/input/eventx

使用cat查看输入事件的内容,操作相应输入设备,事件会上报内容。以字符串方式解读会呈现乱码。如下所示:文章来源地址https://www.toymoban.com/news/detail-615744.html

sudo cat /dev/input/event4

b"jcW.	9�b"jcW.	5$b"jcW.	6�b"jcW.	Jb"jcW.	Eb"jcW.	$b"jcW.	�b"jcW.	b"jcW.	b"jc�6	X"jc�6	b"jc�S Rb"jc�S	b"jc�n	��b"jc�n	b"jco�	�b"jco�	b"jcަ	5'b"jcަ	6�b"jcަ	'b"jcަ	�b"jcަ	h�b"jcަ	b"jcU�	5+b"jcU�	6�b"jcU�	+b"jcU�	�b"jcU�	��b"jcU�	b"jci�	5/b"jci�	6�b"jci�	/b"jci�	�b"jci�	�b"jci�	b"jc��	54b"jc��	6�b"jc��	4b"jc��	�b"jc��	pb"jc��	b"jc�
58b"jc�
6�b"jc�
8b"jc�
�b"jc�

到了这里,关于Linux下查看输入设备、获取输入事件的详细方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux上查看外接USB设备类型

    最近遇到一个问题,需要在shell脚本中识别当前显示器的USB触屏线是否插入,并读取显示器名称,以确定是否是想要的。 解决思路: lsusb命令可以列出所有的外接USB设备: 其中 “Atmel Corp. Atmel maXTouch Digitizer” 即为插入的显示器,如果换成其他的显示器,这里则显示不同的名

    2024年02月12日
    浏览(46)
  • Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)

    目录 一 输入设备编程介绍 1.1 什么是输入设备呢?  1.2 什么是输入设备的应用编程?   1.3 input子系统 1.4  数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件:  1.5.2 相对位移事件  1.5.3 绝对位移事件  二 读取 struct input_event数据   本章学习Linux输入设备的应用编程

    2024年02月05日
    浏览(53)
  • [Linux] C获取键盘输入值

    键盘检测指令:cat /dev/input/event1 | hexdump 鼠标检测指令:cat /dev/input/event2 | hexdump 当键盘/鼠标有输入时,会有对应的一堆16进制输出。它其实对应着input_event结构体【24字节】。 方法2: 采用SDL2 [simplle directmedia layer]  , 此方法用于GUI项目,事件只针对SDL创建的窗口内有效

    2024年02月12日
    浏览(28)
  • Linux命令-blkid命令(查看块设备的文件系统类型、LABEL、UUID等信息)

    在Linux下可以使用 blkid命令 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。 列出当前系统中所有已挂载文件系统的类型: 显示指定设备

    2024年02月19日
    浏览(51)
  • JavaScript 获取 input 输入框内容的方法

    在 JavaScript 中获取 input 输入框内容的方法有以下几种: 使用 document.getElementById 方法获取输入框元素,再通过 value 属性获取输入框内容。示例代码如下 var input = document.getElementById(\\\"myInput\\\"); var inputValue = input.value;   使用 document.querySelector 方法获取输入框元素,再通过 value 属性

    2024年02月05日
    浏览(55)
  • Element UI输入框focus()方法自动获取焦点失败处理方法

    ​ 本来想通过自定义事件触发输入框,并获取焦点,但是使用官方提示的focus()方法一直失效 后来百度了半天,终于找到一个比较好的处理方法。 ​ 先放对比代码: 刚开始的代码 后来修改后的代码 完美解决 总结: 百度查了半天,终于找到了原因 问题原因:渲染组件需要

    2024年02月02日
    浏览(49)
  • adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

    adb对于安卓移动端来说,是个非常重要的调试工具。 本篇介绍常用的adb指令 (adb的安装包我已上传到了网盘。可以直接搜索公众号【软件测试必备技能】或 滑到文章底部,点击公众号卡片扫描二维码,前往关注领取。) ADB的安装与设置可以参考博客之前的文章: adb详细教

    2024年02月05日
    浏览(77)
  • linux dmidecode命令(dmidecode指令)DMI (Desktop Management Interface) 数据、桌面管理接口数据、查看系统信息、查看硬件信息、设备序列号

    dmidecode 是一个在 Linux 系统下获取硬件信息的工具。它允许用户查看计算机硬件的详细信息,包括制造商、产品名称、序列号等。这个命令能够解析和显示计算机的 DMI (Desktop Management Interface) 数据。 在大多数 Linux 发行版中, dmidecode 都是预装的。如果没有预装,可以使用系统

    2024年04月11日
    浏览(46)
  • NC65 树表型参照 搜索全部 按钮点击事件后获取sql的方法

    NC65 树表型参照 搜索全部 按钮点击事件后获取sql的方法。 具体可查看 树表型参照UI类:nc.ui.bd.ref.UFRefGridTreeUI

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包