我正在编写一个 udev 规则来为 USB 摄像头创建符号链接,但它似乎不起作用。
以下行已添加到文件 /etc/udev/rules.d/99-econ.rules
但是我无法使符号链接工作。我尝试重新启动 udev 服务、重新启动计算机,以及拔下设备并将其重新插入计算机。
SUBSYSTEM=="video", ATTRS{idVendor}=="2560", ATTRS{idProduct}=="c110", ATTRS{serial}=="321CC601", SYMLINK+="usb_camera"
知道我做错了什么吗?
谢谢!
答案1
您的规则在语法上是正确的。但是您可能需要检查一些简单的事情。
0)去掉它ATTRS{serial}=="321CC601",
。你不需要它(编辑->) 除非您有多个其他方面相同的设备,否则您需要通过序列号来区分。
1)确保正确识别您的 USB 设备。
# plug your device in a convenient usb port
$ lsusb # <- check IDs for vendor and product
$ udevadm monitor --property
# Above (^^^^) will monitor your device events continuously,
# in particular every thing that is plugged/unplugged in a usb port.
# Unplug yr device and type CTRL-C in terminal to stop monitoring
2)检查您之前记下的 ID 是否udevadm monitor --property
与您拔下设备时的输出相对应。
3)确保"SUBSYSTEM=="..."
符合要求。
这可能是正确的,但对于带有存储区域的 USB 摄像头(我可能错误地认为这是你的情况),你主要看到的属性如下: ,,,,,,,...或者SUBSYSTEM=usb
将test on 替换为test onSUBSYSTEM=scsi_host
SUBSYSTEM=scsi
SUBSYSTEM=scsi_disk
SUBSYSTEM=scsi_device
SUBSYSTEM=scsi_generic
SUBSYSTEM
ID_TYPE=="..."
HTH。欢迎反馈。
答案2
如果您在video4linux
子系统上进行匹配,则需要使用该级别上可用的属性。
要查看属性的层次结构,请使用分配给网络摄像头的udevam
当前videoX
设备:
$ udevadm info -a /dev/video0
looking at device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/video4linux/video0':
KERNEL=="video0"
SUBSYSTEM=="video4linux"
DRIVER==""
ATTR{dev_debug}=="0"
ATTR{index}=="0"
ATTR{name}=="GENERAL WEBCAM: GENERAL WEBCAM"
ATTR{power/control}=="auto"
ATTR{power/runtime_active_time}=="0"
ATTR{power/runtime_status}=="unsupported"
ATTR{power/runtime_suspended_time}=="0"
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0':
KERNELS=="1-1.1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="uvcvideo"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="0e"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{bInterfaceSubClass}=="01"
ATTRS{bNumEndpoints}=="01"
ATTRS{iad_bFirstInterface}=="00"
ATTRS{iad_bFunctionClass}=="0e"
ATTRS{iad_bFunctionProtocol}=="00"
ATTRS{iad_bFunctionSubClass}=="03"
ATTRS{iad_bInterfaceCount}=="02"
ATTRS{interface}=="GENERAL WEBCAM"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1':
KERNELS=="1-1.1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{idProduct}=="2247"
ATTRS{idVendor}=="1b3f"
ATTRS{product}=="GENERAL WEBCAM"
ATTRS{serial}=="JH0909_20201026_v004"
...
在这种情况下,您可以看到ATTRS{idProduct}
和ATTRS{idVendor}
在带有 的块中定义SUBSYSTEMS=="usb"
,但不在带有 的块中定义SUBSYSTEM=="video4linux"
。在该块中,没有产品或供应商 ID,也没有序列号。但是,在我的例子中,我可以使用 来ATTR{name}
过滤此网络摄像头(因为我只连接了其中一个):
ACTION=="add", SUBSYSTEM=="video4linux", ATTR{name}=="GENERAL WEBCAM: GENERAL WEBCAM", SYMLINK+="webcamUsb"
欲了解更多信息,请务必阅读http://reactivated.net/writing_udev_rules.html。