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


    /dev/input/目录

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

    1. $ ls /dev/input/
    2. by-id by-path event0 event1 event10 event11 event12 event13 event2 event3 event4 event5 event6 event7 event8 event9 mice mouse0 mouse1 mouse2
    3. $ ls -l /dev/input
    4. 总用量 0
    5. drwxr-xr-x 2 root root 100 11月 7 11:09 by-id
    6. drwxr-xr-x 2 root root 200 11月 7 11:09 by-path
    7. crw-rw---- 1 root input 13, 64 11月 2 15:53 event0
    8. crw-rw---- 1 root input 13, 65 11月 2 15:53 event1
    9. crw-rw---- 1 root input 13, 74 11月 2 15:53 event10
    10. crw-rw---- 1 root input 13, 75 11月 2 15:53 event11
    11. crw-rw---- 1 root input 13, 76 11月 2 15:53 event12
    12. crw-rw---- 1 root input 13, 77 11月 2 15:53 event13
    13. crw-rw---- 1 root input 13, 66 11月 2 15:53 event2
    14. crw-rw---- 1 root input 13, 67 11月 2 15:53 event3
    15. crw-rw---- 1 root input 13, 68 11月 2 15:53 event4
    16. crw-rw---- 1 root input 13, 69 11月 7 11:09 event5
    17. crw-rw---- 1 root input 13, 70 11月 2 15:53 event6
    18. crw-rw---- 1 root input 13, 71 11月 2 15:53 event7
    19. crw-rw---- 1 root input 13, 72 11月 2 15:53 event8
    20. crw-rw---- 1 root input 13, 73 11月 2 15:53 event9
    21. crw-rw---- 1 root input 13, 63 11月 2 15:53 mice
    22. crw-rw---- 1 root input 13, 32 11月 2 15:53 mouse0
    23. crw-rw---- 1 root input 13, 33 11月 2 15:53 mouse1
    24. crw-rw---- 1 root input 13, 34 11月 7 11:09 mouse2

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

    /proc/bus/input/devices

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

    1. $ cat /proc/bus/input/devices
    2. I: Bus=0019 Vendor=0000 Product=0005 Version=0000
    3. N: Name="Lid Switch"
    4. P: Phys=PNP0C0D/button/input0
    5. S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1a/PNP0C0D:00/input/input0
    6. U: Uniq=
    7. H: Handlers=event0
    8. B: PROP=0
    9. B: EV=21
    10. B: SW=1
    11. I: Bus=0019 Vendor=0000 Product=0001 Version=0000
    12. N: Name="Power Button"
    13. P: Phys=PNP0C0C/button/input0
    14. S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
    15. U: Uniq=
    16. H: Handlers=kbd event1
    17. B: PROP=0
    18. B: EV=3
    19. B: KEY=10000000000000 0
    20. I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
    21. N: Name="AT Translated Set 2 keyboard"
    22. P: Phys=isa0060/serio0/input0
    23. S: Sysfs=/devices/platform/i8042/serio0/input/input2
    24. U: Uniq=
    25. H: Handlers=sysrq kbd event2 leds
    26. B: PROP=0
    27. B: EV=120013
    28. B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
    29. B: MSC=10
    30. B: LED=7
    31. I: Bus=0019 Vendor=0000 Product=0000 Version=0000
    32. N: Name="Ideapad extra buttons"
    33. P: Phys=ideapad/input0
    34. S: Sysfs=/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/VPC2004:00/input/input7
    35. U: Uniq=
    36. H: Handlers=rfkill kbd event6
    37. B: PROP=0
    38. B: EV=13
    39. B: KEY=81000800100c03 4400000000300000 0 2
    40. B: MSC=10
    41. I: Bus=0018 Vendor=06cb Product=ce2d Version=0100
    42. N: Name="MSFT0001:01 06CB:CE2D Mouse"
    43. P: Phys=i2c-MSFT0001:01
    44. S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-MSFT0001:01/0018:06CB:CE2D.0001/input/input8
    45. U: Uniq=
    46. H: Handlers=mouse0 event3
    47. B: PROP=0
    48. B: EV=17
    49. B: KEY=30000 0 0 0 0
    50. B: REL=3
    51. B: MSC=10
    52. I: Bus=0018 Vendor=06cb Product=ce2d Version=0100
    53. N: Name="MSFT0001:01 06CB:CE2D Touchpad"
    54. P: Phys=i2c-MSFT0001:01
    55. S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-MSFT0001:01/0018:06CB:CE2D.0001/input/input9
    56. U: Uniq=
    57. H: Handlers=mouse1 event4
    58. B: PROP=5
    59. B: EV=1b
    60. B: KEY=e520 10000 0 0 0 0
    61. B: ABS=2e0800000000003
    62. B: MSC=20
    63. I: Bus=0003 Vendor=13d3 Product=56ff Version=1919
    64. N: Name="Integrated Camera: Integrated C"
    65. P: Phys=usb-0000:00:14.0-7/button
    66. S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/input/input11
    67. U: Uniq=
    68. H: Handlers=kbd event7
    69. B: PROP=0
    70. B: EV=3
    71. B: KEY=100000 0 0 0
    72. I: Bus=0019 Vendor=0000 Product=0006 Version=0000
    73. N: Name="Video Bus"
    74. P: Phys=LNXVIDEO/video/input0
    75. S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input12
    76. U: Uniq=
    77. H: Handlers=kbd event8
    78. B: PROP=0
    79. B: EV=3
    80. B: KEY=3e000b00000000 0 0 0
    81. I: Bus=0000 Vendor=0000 Product=0000 Version=0000
    82. N: Name="sof-hda-dsp Headset Mic"
    83. P: Phys=ALSA
    84. S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input13
    85. U: Uniq=
    86. H: Handlers=event9
    87. B: PROP=0
    88. B: EV=21
    89. B: SW=10
    90. I: Bus=0000 Vendor=0000 Product=0000 Version=0000
    91. N: Name="sof-hda-dsp Headphone"
    92. P: Phys=ALSA
    93. S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input14
    94. U: Uniq=
    95. H: Handlers=event10
    96. B: PROP=0
    97. B: EV=21
    98. B: SW=4
    99. I: Bus=0000 Vendor=0000 Product=0000 Version=0000
    100. N: Name="sof-hda-dsp HDMI/DP,pcm=3"
    101. P: Phys=ALSA
    102. S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input15
    103. U: Uniq=
    104. H: Handlers=event11
    105. B: PROP=0
    106. B: EV=21
    107. B: SW=140
    108. I: Bus=0000 Vendor=0000 Product=0000 Version=0000
    109. N: Name="sof-hda-dsp HDMI/DP,pcm=4"
    110. P: Phys=ALSA
    111. S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input16
    112. U: Uniq=
    113. H: Handlers=event12
    114. B: PROP=0
    115. B: EV=21
    116. B: SW=140
    117. I: Bus=0000 Vendor=0000 Product=0000 Version=0000
    118. N: Name="sof-hda-dsp HDMI/DP,pcm=5"
    119. P: Phys=ALSA
    120. S: Sysfs=/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input17
    121. U: Uniq=
    122. H: Handlers=event13
    123. B: PROP=0
    124. B: EV=21
    125. B: SW=140
    126. I: Bus=0003 Vendor=093a Product=2521 Version=0111
    127. N: Name="USB OPTICAL MOUSE"
    128. P: Phys=usb-0000:00:14.0-5/input0
    129. S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-5/3-5:1.0/0003:093A:2521.0005/input/input20
    130. U: Uniq=
    131. H: Handlers=mouse2 event5
    132. B: PROP=0
    133. B: EV=17
    134. B: KEY=1f0000 0 0 0 0
    135. B: REL=1943
    136. B: MSC=10

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

    1. I: Bus=0018 Vendor=06cb Product=ce2d Version=0100
    2. N: Name="MSFT0001:01 06CB:CE2D Touchpad"
    3. P: Phys=i2c-MSFT0001:01
    4. S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-MSFT0001:01/0018:06CB:CE2D.0001/input/input9
    5. U: Uniq=
    6. H: Handlers=mouse1 event4
    7. B: PROP=5
    8. B: EV=1b
    9. B: KEY=e520 10000 0 0 0 0
    10. B: ABS=2e0800000000003
    11. 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

    编译安装

    1. $ tar -xjvf evtest_1.33.orig.tar.bz2
    2. $ cd evtest-1.33/
    3. $ ./configure
    4. $ make
    5. $ sudo make install

    使用

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

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

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

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

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

    1. Select the device event number [0-13]: 4
    2. Input driver version is 1.0.1
    3. Input device ID: bus 0x18 vendor 0x6cb product 0xce2d version 0x100
    4. Input device name: "MSFT0001:01 06CB:CE2D Touchpad"
    5. Supported events:
    6. Event type 0 (EV_SYN)
    7. Event type 1 (EV_KEY)
    8. Event code 272 (BTN_LEFT)
    9. Event code 325 (BTN_TOOL_FINGER)
    10. Event code 328 (BTN_TOOL_QUINTTAP)
    11. Event code 330 (BTN_TOUCH)
    12. Event code 333 (BTN_TOOL_DOUBLETAP)
    13. Event code 334 (BTN_TOOL_TRIPLETAP)
    14. Event code 335 (BTN_TOOL_QUADTAP)
    15. Event type 3 (EV_ABS)
    16. Event code 0 (ABS_X)
    17. Value 994
    18. Min 0
    19. Max 1224
    20. Resolution 12
    21. Event code 1 (ABS_Y)
    22. Value 505
    23. Min 0
    24. Max 804
    25. Resolution 12
    26. Event code 47 (ABS_MT_SLOT)
    27. Value 0
    28. Min 0
    29. Max 4
    30. Event code 53 (ABS_MT_POSITION_X)
    31. Value 0
    32. Min 0
    33. Max 1224
    34. Resolution 12
    35. Event code 54 (ABS_MT_POSITION_Y)
    36. Value 0
    37. Min 0
    38. Max 804
    39. Resolution 12
    40. Event code 55 (ABS_MT_TOOL_TYPE)
    41. Value 0
    42. Min 0
    43. Max 2
    44. Event code 57 (ABS_MT_TRACKING_ID)
    45. Value 0
    46. Min 0
    47. Max 65535
    48. Event type 4 (EV_MSC)
    49. Event code 5 (MSC_TIMESTAMP)
    50. Properties:
    51. Property type 0 (INPUT_PROP_POINTER)
    52. Property type 2 (INPUT_PROP_BUTTONPAD)
    53. Testing ... (interrupt to exit)
    54. Event: time 1667899054.177672, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1515
    55. Event: time 1667899054.177672, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 376
    56. Event: time 1667899054.177672, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 382
    57. Event: time 1667899054.177672, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
    58. Event: time 1667899054.177672, type 1 (EV_KEY), code 325 (BTN_TOOL_FINGER), value 1

    直接读取/dev/input/eventx

    使用cat查看输入事件的内容,操作相应输入设备,事件会上报内容。以字符串方式解读会呈现乱码。如下所示:

    1. sudo cat /dev/input/event4
    2. 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�
    3. 58b"jc�
    4. 6�b"jc�
    5. 8b"jc�
    6. �b"jc�

  • 相关阅读:
    java基础知识
    算法通关村第十六关:黄金挑战:滑动窗口与堆结合
    git第一次推送gitlab项目
    java计算机毕业设计基于springboot人职匹配推荐系统
    【Flutter】Flutter学习-GetX 导航操作
    聊一聊微服务常见配置中心工作原理
    FTP无法在资源管理器中打开
    Inobitec DICOM Viewer Pro 2.8.0 Crack
    笔记本 使用 Opencore 安装 苹果系统过程
    AI辅助研发:引领科技创新的未来之路
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/127748541