![如何在不使用制造商字符串的情况下获取触摸屏的xinput设备ID?](https://linux22.com/image/196640/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%E5%88%B6%E9%80%A0%E5%95%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%8E%B7%E5%8F%96%E8%A7%A6%E6%91%B8%E5%B1%8F%E7%9A%84xinput%E8%AE%BE%E5%A4%87ID%EF%BC%9F.png)
对于以下设备,当提供的 ID 参数为 7 时,Chromium 仅显示正确的触摸屏行为。请注意,xinput ID 在重新启动期间可能会发生变化,因此我不能一直使用 7。
我知道我可以将制造商字符串列入白名单,但我想要一些可靠的东西,始终有效,并且不依赖于制造商字符串保持不变。
设备1:
Touchscreen Hardware on device 1 (reported by xinput):
? Virtual core pointer id=2 [master pointer (3)]
? ? Virtual core XTEST pointer id=4 [slave pointer (2)]
? ? ADS7846 Touchscreen id=9 [slave pointer (2)]
? ? NHD Newhaven Display id=7 [slave pointer (2)]
? Virtual core keyboard id=3 [master keyboard (2)]
? Virtual core XTEST keyboard id=5 [slave keyboard (3)]
? 30370000.snvs:snvs-powerkey id=6 [slave keyboard (3)]
? Dell Dell USB Entry Keyboard id=8 [slave keyboard (3)]
/dev/input/touchscreen0 -> /dev/input/event1
udevadm info --query=property --name=/dev/input/event1
DEVLINKS=/dev/input/by-id/usb-NHD_Newhaven_Display-event-if00 /dev/input/by-path/platform-ci_hdrc.0-usb-0:1:1.0-event /dev/input/touchscreen0
DEVNAME=/dev/input/event1
DEVPATH=/devices/soc0/soc/30800000.aips-bus/30b10000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/0003:0461:0022.005C/input/input93/event1
ID_BUS=usb
ID_INPUT=1
ID_INPUT_TOUCHSCREEN=1
ID_MODEL=Newhaven_Display
ID_MODEL_ENC=Newhavenx20Displayx20
ID_MODEL_ID=0022
ID_PATH=platform-ci_hdrc.0-usb-0:1:1.0
ID_PATH_TAG=platform-ci_hdrc_0-usb-0_1_1_0
ID_REVISION=0100
ID_SERIAL=NHD_Newhaven_Display
ID_TYPE=hid
ID_USB_DRIVER=usbhid
ID_USB_INTERFACES=:030102:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=NHD
ID_VENDOR_ENC=NHD
ID_VENDOR_ID=0461
LIBINPUT_CALIBRATION_MATRIX=1.066870 -0.005907 -0.026620 0.007245 -1.136364 1.046200
LIBINPUT_DEVICE_GROUP=3/461/22:usb-ci_hdrc.0-1
MAJOR=13
MINOR=65
SUBSYSTEM=input
USEC_INITIALIZED=514876494495
设备2:
Touchscreen Hardware on device 2 (reported by xinput):
? Virtual core pointer id=2 [master pointer (3)]
? Virtual core XTEST pointer id=4 [slave pointer (2)]
? Silicon Integrated System Co. SiS HID Touch Controller Mouse id=8 [slave pointer (2)]
? Silicon Integrated System Co. SiS HID Touch Controller Touchscreen id=7 [slave pointer (2)]
? ADS7846 Touchscreen id=9 [slave pointer (2)]
? Virtual core keyboard id=3 [master keyboard (2)]
? Virtual core XTEST keyboard id=5 [slave keyboard (3)]
? 30370000.snvs:snvs-powerkey id=6 [slave keyboard (3)]
/dev/input/touchscreen0 -> /dev/input/event3 (event1 seems like the correct touchscreen though,
based on the udevadm output)
udevadm info --query=property --name=/dev/input/event1
DEVLINKS=/dev/input/by-path/platform-ci_hdrc.0-usb-0:1:1.0-event /dev/input/touchscreen0 /dev/input/by-id/usb-Silicon_Integrated_System_Co._SiS_HID_Touch_Controller-event-if00
DEVNAME=/dev/input/event1
DEVPATH=/devices/soc0/soc/30800000.aips-bus/30b10000.usb/ci_hdrc.0/usb1/1-1/1-1:1.0/0003:04E7:1080.0001/input/input1/event1
ID_BUS=usb
ID_INPUT=1
ID_INPUT_HEIGHT_MM=136
ID_INPUT_TOUCHSCREEN=1
ID_INPUT_WIDTH_MM=215
ID_MODEL=SiS_HID_Touch_Controller
ID_MODEL_ENC=SiSx20HIDx20Touchx20Controller
ID_MODEL_ID=1080
ID_PATH=platform-ci_hdrc.0-usb-0:1:1.0
ID_PATH_TAG=platform-ci_hdrc_0-usb-0_1_1_0
ID_REVISION=0100
ID_SERIAL=Silicon_Integrated_System_Co._SiS_HID_Touch_Controller
ID_TYPE=hid
ID_USB_DRIVER=usbhid
ID_USB_INTERFACES=:030000:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=Silicon_Integrated_System_Co.
ID_VENDOR_ENC=Siliconx20Integratedx20Systemx20Co.
ID_VENDOR_ID=04e7
LIBINPUT_CALIBRATION_MATRIX=1.066870 -0.005907 -0.026620 0.007245 -1.136364 1.046200
LIBINPUT_DEVICE_GROUP=3/4e7/1080:usb-ci_hdrc.0-1
MAJOR=13
MINOR=65
SUBSYSTEM=input
USEC_INITIALIZED=8612683
编辑:
这是 xinput list --long 的输出。 (我删除了不相关的设备):
⎜ ↳ ADS7846 Touchscreen id=7 [slave pointer (2)]
Reporting 4 classes:
Class originated from: 7. Type: XIButtonClass
Buttons supported: 5
Button labels: "Button Unknown" "Button Unknown" "Button Unknown" "Button Wheel Up" "Button Wheel Down"
Button state:
Class originated from: 7. Type: XIValuatorClass
Detail for Valuator 0:
Label: Abs X
Range: 0.000000 - 4095.000000
Resolution: 0 units/m
Mode: absolute
Current value: 512.000000
Class originated from: 7. Type: XIValuatorClass
Detail for Valuator 1:
Label: Abs Y
Range: 0.000000 - 4095.000000
Resolution: 0 units/m
Mode: absolute
Current value: 384.000000
Class originated from: 7. Type: XIValuatorClass
Detail for Valuator 2:
Label: Abs Pressure
Range: 0.000000 - 255.000000
Resolution: 0 units/m
Mode: absolute
Current value: 0.000000
⎜ ↳ NHD Newhaven Display id=8 [slave pointer (2)]
Reporting 3 classes:
Class originated from: 8. Type: XIButtonClass
Buttons supported: 5
Button labels: "Button Unknown" "Button Unknown" "Button Unknown" "Button Wheel Up" "Button Wheel Down"
Button state:
Class originated from: 8. Type: XIValuatorClass
Detail for Valuator 0:
Label: Abs X
Range: 0.000000 - 10000.000000
Resolution: 0 units/m
Mode: absolute
Current value: 4379.000000
Class originated from: 8. Type: XIValuatorClass
Detail for Valuator 1:
Label: Abs Y
Range: 0.000000 - 10000.000000
Resolution: 0 units/m
Mode: absolute
Current value: 7896.000000
答案1
我最终做的是对所有 /dev/input/event* 节点执行以下命令:
udevadm info --query=property --name=<event-node>
由于我正在搜索一个触摸屏设备并且通过 USB 连接,因此我在输出中搜索了输出包含以下内容的情况:
ID_INPUT_TOUCHSCREEN = 1
ID_BUS = usb
然后,我必须对所有 xinput ID 使用以下命令(您可以使用 xinput list --id-only 获取 ID 列表):
xinput list-props <ID> | grep <touchscreen-input-node>
这给了我提供 chromium 的 --touch-devices 参数所需的 ID。