Linux中/dev/uhid的udev规则启动不生效的原因及解决办法
解决/dev/uhid的udev规则启动时不生效问题
问题原因
/dev/uhid属于内核虚拟misc设备,默认在系统启动早期由内核直接创建——此时udev服务还未完成初始化,无法捕获设备的创建事件,因此不会自动应用对应的udev规则。只有当root权限的进程首次访问该设备时,内核才会触发udev的设备添加事件,udev才会识别设备并执行规则。
解决步骤
1. 创建精准匹配的udev规则
创建专门的uhid规则文件(避免和uinput规则混淆):
sudo touch /etc/udev/rules.d/90-uhid.rules sudo tee /etc/udev/rules.d/90-uhid.rules <<EOF SUBSYSTEM=="misc", KERNEL=="uhid", GROUP="uhid", MODE="0660" EOF
这里明确指定SUBSYSTEM=="misc",确保规则能精准匹配目标设备。
2. 配置用户组权限
如果系统中还没有uhid组,先创建并将目标用户加入该组:
sudo groupadd -r uhid sudo usermod -aG uhid $USER
3. 添加系统服务触发udev规则
由于启动时udev未捕获设备创建事件,我们需要在udev就绪后强制触发设备扫描:
创建服务文件/etc/systemd/system/uhid-udev-trigger.service:
sudo tee /etc/systemd/system/uhid-udev-trigger.service <<EOF [Unit] Description=Trigger udev rules for uhid device After=systemd-udevd.service [Service] Type=oneshot ExecStart=/usr/bin/udevadm trigger --subsystem-match=misc --property-match=KERNEL=uhid ExecStartPost=/usr/bin/udevadm settle [Install] WantedBy=multi-user.target EOF
然后启用并加载服务:
sudo systemctl daemon-reload sudo systemctl enable uhid-udev-trigger.service
4. 验证效果
重启系统后,直接查看/dev/uhid的权限:
ls -l /dev/uhid
正常情况下会输出类似如下内容,说明规则已生效:
crw-rw---- 1 root uhid 10, 239 Aug 12 22:58 /dev/uhid
内容的提问来源于stack exchange,提问作者r4gus
相关产品推荐
相关产品推荐

