我有两个使用Xorg的xinerama功能的LCD . 每个LCD屏幕都有一个触摸屏,它们连接到各自的USB线 .
查看'/ var / log / messages'文件,我看到以下内容:
kernel: input: Analog Resistive as /class/input/input0
kernel: input: USB HID v1.01 Mouse [Analog Resistive] on usb-0000:00:1d.3-1
kernel: input: Analog Resistive as /class/input/input1
kernel: input: USB HID v1.01 Mouse [Analog Resistive] on usb-0000:00:1d.3-2
出于某种原因,在某个时间点,USB总线似乎重置(或奇怪的东西),我的两个触摸屏反转(按左侧LCD,鼠标右移,如果我按下右侧LCD,鼠标移动到剩下) .
为了尝试调试问题,我尝试编写一个udev规则来记录我的设备何时重置/断开连接(或其他) . 但似乎udev会在连接时在设备上报告完整的详细信息(产品,制造商,idProduct,idVendor等),但在删除时只提供一些总线号码 . 为什么是这样?
当我得到一个ACTION ==“删除”,KERNEL ==“输入*”规则时,我无法知道它是哪个设备!有没有人知道这方面的方法?
3 回答
我在Linux中遇到了同样的问题 . 删除时发送的信息很少,不能用于唯一标识要删除的设备 . 我以前使用的是
PHYDEVPATH
(对于给定的机器和USB端口,它在插件和拔出时是唯一的),但非常不幸的是,这已经是deprecated in later versions of udev .我正在编写一个具有相似功能的应用程序,我解决了实现守护进程的问题,其唯一任务是存储连接的_1792726 . 所以当我检测到某些
remove
时,甚至从udev_monitor
我检查了deamon的设备列表中缺少的某些设备 . 缺少的是设备断开连接 . 这样我就可以获得断开设备的数据 .我建议首先检查设备"remove"事件上的udev事件,例如运行例如
udevadm monitor --kernel --property --subsystem-match=usb
并依次断开设备并比较输出 . 在单个鼠标断开连接上我得到两个事件:您可以编写调用脚本的规则,该脚本在检查某些特定环境变量后应该执行某些操作 . 规则可能很简单
在你的情况下,我建议在usbdevgone.sh中检查$ DEVPATH,因为它们应该因你的两个相同设备而不同 . 您也可以将
devpath
(这是/ sys / filesystem中的路径)作为参数传递给您的脚本(请参阅man udev
以获取可用的substitutions
列表):Do not forget 使用
udevadm control --reload-rules
通知udevd您的新规则或已更改的规则