You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何控制udev对输入设备的标签分配?自定义规则修改虚拟设备标签

解决uinput虚拟设备被识别为Tablet而非Mouse的问题

当然可以!udev的规则系统完全允许你覆盖它默认的设备分类逻辑,不管设备支持哪些输入事件类型。下面是具体的实现步骤和细节:

1. 先定位你的虚拟设备的唯一标识

首先你需要找到能精准匹配你的uinput虚拟设备的属性,避免规则影响到其他真实硬件。

  • 先启动你用uinput创建的虚拟设备
  • 找到对应的input节点,比如/dev/input/eventX(可以通过ls /dev/input/或者evtest工具查看)
  • 运行以下命令查看设备的udev属性:
    udevadm info -a /dev/input/eventX
    
    重点关注这些属性:
    • ATTRS{name}:你在uinput代码里设置的设备名称(比如你可以设为"MyCustomVirtualMouse")
    • ATTRS{id/vendor}和ATTRS{id/product}:uinput设备的厂商/产品ID(代码里可以自定义,比如设为0x1234和0x5678)

选择一个或多个组合来确保只匹配你的虚拟设备,比如用设备名+厂商ID的组合,这样最稳妥。

2. 编写自定义udev规则

在/etc/udev/rules.d/目录下创建一个优先级较高的规则文件(文件名以99-开头,确保它在默认规则之后执行),比如99-virtual-mouse-override.rules。

根据你找到的设备属性,写入类似这样的规则:

# 匹配自定义名称的uinput虚拟设备,强制标记为mouse
SUBSYSTEM=="input", ATTRS{name}=="MyCustomVirtualMouse", ENV{ID_INPUT_MOUSE}="1", ENV{ID_INPUT_TABLET}=""

# 如果用厂商/产品ID匹配,规则可以写成:
# SUBSYSTEM=="input", ATTRS{id/vendor}=="1234", ATTRS{id/product}=="5678", ENV{ID_INPUT_MOUSE}="1", ENV{ID_INPUT_TABLET}=""

规则解释:

  • SUBSYSTEM=="input":限定只匹配input子系统的设备
  • 后面的ATTRS{...}是你的设备匹配条件
  • ENV{ID_INPUT_MOUSE}="1":强制告诉udev这个设备是mouse
  • ENV{ID_INPUT_TABLET}="":清空默认的tablet标记,避免冲突

3. 应用规则并验证

  • 先重新加载udev规则:
    udevadm control --reload-rules
    
  • 触发udev重新识别你的设备:
    udevadm trigger /dev/input/eventX
    
  • 最后验证规则是否生效:
    udevadm info /dev/input/eventX | grep -E "ID_INPUT_MOUSE|ID_INPUT_TABLET"
    
    如果输出显示ID_INPUT_MOUSE=1且ID_INPUT_TABLET不存在或为空,就说明规则生效了。

额外提示

  • 在创建uinput设备时,尽量设置一个唯一的设备名称或自定义的厂商/产品ID,这样规则不会误匹配其他设备
  • 如果你的设备同时支持EV_REL和EV_ABS,这个规则依然有效,因为我们直接覆盖了udev的分类标记,而不是修改设备的事件支持

内容的提问来源于stack exchange,提问作者Luca Carlon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:22:58