Ubuntu 16.04触摸屏故障求助:信息亭触屏Linux下无法工作
解决Linux下触摸屏无法生成Input事件的问题
看起来你的触摸屏已经被系统识别为HID设备(从/dev/hidraw1能输出事件就能看出来),但内核还没把它的HID数据转换成标准的鼠标/触摸Input事件。咱们一步步来排查解决:
1. 确认触摸屏的HID协议类型
首先得搞清楚你的触摸屏用的是哪种HID协议,有些触摸屏需要特定内核模块来解析:
- 安装
usbhid-dump工具(Debian/Ubuntu直接用sudo apt install usbhid-dump,Fedora用sudo dnf install usbhid-dump) - 执行命令:
sudo usbhid-dump -es,找到对应触摸屏的设备(可以先通过lsusb确认设备的Vendor ID和Product ID来定位) - 查看输出的报告描述符,如果里面有
Usage Page (Digitizer)(通常是0x0D),说明这是一个数字化触摸屏,需要hid-multitouch模块来处理。
2. 加载必要的内核模块
如果hid-multitouch模块没加载,手动加载它:
sudo modprobe hid-multitouch
要是想让模块开机自动加载,把模块名加到/etc/modules-load.d/touchscreen.conf里:
hid-multitouch
3. 配置udev规则让系统识别为触摸屏
有时候系统没自动把设备标记为触摸屏,咱们手动添加udev规则:
- 用
lsusb获取设备的Vendor ID和Product ID,比如输出类似Bus 001 Device 003: ID 1234:5678 XXXX Touchscreen,这里1234是Vendor ID,5678是Product ID - 创建规则文件:
sudo nano /etc/udev/rules.d/99-touchscreen.rules,写入内容:
把SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", RUN+="/sbin/modprobe hid-multitouch", ENV{ID_INPUT_TOUCHSCREEN}="1"1234和5678换成你设备的实际ID - 重新加载udev规则:
sudo udevadm control --reload-rules && sudo udevadm trigger
4. 找到正确的Input设备并测试
之前你查看的/dev/input/mouse0或event4可能不是触摸屏对应的设备,用evtest工具来确认:
- 安装
evtest(Debian/Ubuntu:sudo apt install evtest,Fedora:sudo dnf install evtest) - 执行
sudo evtest,会列出所有Input设备,选择名字里带有Touchscreen或Digitizer的设备 - 触摸屏幕,看看有没有
EV_ABS类型的事件输出,如果有,说明设备已经正常生成Input事件了
5. 配置Xorg/Wayland适配触摸屏
如果你用X11:
创建Xorg配置文件/etc/X11/xorg.conf.d/99-touchscreen.conf,内容如下:
Section "InputClass" Identifier "Touchscreen" MatchIsTouchscreen "on" Driver "libinput" # 如果需要校准,可以调整CalibrationMatrix参数,比如旋转或偏移 Option "CalibrationMatrix" "1 0 0 0 1 0 0 0 1" EndSection
重启Xorg或者注销重新登录,触摸屏应该就能正常工作了。
如果你用Wayland:
大部分现代桌面环境(比如GNOME、KDE)会自动识别触摸屏,但如果没反应:
- 检查桌面设置里的“触摸屏”选项是否开启
- 查看Wayland日志(比如
journalctl -b | grep libinput),有没有设备识别错误的信息
为什么/dev/hidraw1有输出但Input设备没有?
/dev/hidraw*是直接读取HID设备的原始数据包,不需要内核解析;而/dev/input/*是内核把HID数据转换成标准Input事件后提供的节点。你的问题就出在内核没有把触摸屏的HID数据转换成Input事件,上面的步骤就是帮你完成这个转换流程。
内容的提问来源于stack exchange,提问作者Andrey Svistunov




