如何在使用 UDEV 连接或者移除 USB 设备时运行脚本

本文概述了创建 UDEV 规则的步骤,这些规则在连接或者移除 USB 设备时运行特定脚本。
我们可以使用 udevadm 工具查看连接或者移除设备时的信息和属性。
使用“subsystem-match=SUBSYSTEM”我们可以确定连接/删除的设备类型。

  1. 例如,在这种情况下,使用 USB SUBSYSTEM,我们可以运行以下命令:
# udevadm monitor --kernel --property --subsystem-match=usb
monitor will print the received events for:
KERNEL - the kernel uevent
  1. 现在,连接或者移除 USB 设备,以触发 UDEV 事件。

  2. 下面是输出示例,带有“<---”行的信息是设置规则时需要考虑的重要信息。

# udevadm monitor --kernel --property --subsystem-match=usb
monitor will print the received events for:
KERNEL - the kernel uevent
KERNEL[6147.486744] add /devices/pci0000:00/0000:00:0c.0/usb1/1-2 (usb)
ACTION=add             <--------------------------------------------------------- ACTION of the device
BUSNUM=001
DEVNAME=/dev/bus/usb/001/010
DEVNUM=010
DEVPATH=/devices/pci0000:00/0000:00:0c.0/usb1/1-2
DEVTYPE=usb_device      
MAJOR=189
MINOR=9
PRODUCT=90c/1000/1100  <--------------------------------------------------------- ENV{PRODUCT}
SEQNUM=2192
SUBSYSTEM=usb          <--------------------------------------------------------- " SUBSYSTEM=="type_of_device"
TYPE=0/0/0
KERNEL[6147.489141] add /devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0 (usb)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0
DEVTYPE=usb_interface
INTERFACE=8/6/80
MODALIAS=usb:v090Cp1000d1100dc00dsc00dp00ic08isc06ip50in00
PRODUCT=90c/1000/1100
SEQNUM=2193
SUBSYSTEM=usb
TYPE=0/0/0
KERNEL[6206.530205] remove /devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0 (usb)
ACTION=remove           <--------------------------------------------------------- ACTION of the device 
DEVPATH=/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0
DEVTYPE=usb_interface
INTERFACE=8/6/80
MODALIAS=usb:v090Cp1000d1100dc00dsc00dp00ic08isc06ip50in00
PRODUCT=90c/1000/1100   <--------------------------------------------------------- ENV{PRODUCT}
SEQNUM=2216
SUBSYSTEM=usb           <--------------------------------------------------------- " SUBSYSTEM=="type_of_device"
TYPE=0/0/0
KERNEL[6206.530551] remove /devices/pci0000:00/0000:00:0c.0/usb1/1-2 (usb)
ACTION=remove
BUSNUM=001
DEVNAME=/dev/bus/usb/001/010
DEVNUM=010
DEVPATH=/devices/pci0000:00/0000:00:0c.0/usb1/1-2
DEVTYPE=usb_device
MAJOR=189
MINOR=9
PRODUCT=90c/1000/1100
SEQNUM=2217
SUBSYSTEM=usb
TYPE=0/0/0
  1. 使用上面的例子,我们可以在 /etc/udev/rules.d/ 中创建运行脚本的规则。
    例如,我们可以创建一个新文件“5-usbstick-font.rules”,其语法类似于:
# cat /etc/udev/rules.d/5-usbstick-font.rules
ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="90c/1000/1100", RUN=="/bin/su godiego --command='/home/godiego/run-start.sh'"
ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="90c/1000/1100", RUN+="/bin/su godiego --command='/home/godiego/run-stop.sh'"
  1. 通过运行以下命令重新加载 UDEV 规则。
# udevadm control --reload

现在,如果我们再次连接或者移除 USB 设备,将执行自定义脚本(如 run-start.sh 或者 run-stop.sh)。

日期:2020-09-17 00:13:49 来源:oir作者:oir