Linux UDEV-在USB闪存驱动器插件上运行程序

Linux UDEV-在USB闪存驱动器插件上运行程序,linux,udev,usb-flash-drive,Linux,Udev,Usb Flash Drive,我正试图让一个脚本在任何USB闪存驱动器(不仅仅是一个特定的)插入系统时运行,我已经花了大约两周的时间断断续续地想弄清楚它。有人能帮我吗?(如果有帮助的话,运行Ubuntu) 我需要能够至少传递驱动器序列号和devpath(/dev/sd**)。首先,您需要检测usb存储设备的规则 /etc/udev/rules.d/10-usbmount.rules: KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+=

我正试图让一个脚本在任何USB闪存驱动器(不仅仅是一个特定的)插入系统时运行,我已经花了大约两周的时间断断续续地想弄清楚它。有人能帮我吗?(如果有帮助的话,运行Ubuntu)


我需要能够至少传递驱动器序列号和devpath(/dev/sd**)。

首先,您需要检测usb存储设备的规则

/etc/udev/rules.d/10-usbmount.rules:

KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+="/usr/bin/usbdevinserted"
这将运行我们的自定义可执行shell脚本
/usr/bin/usbdevinserted

#!/bin/bash

set 2>&1 >> /tmp/usbdevinfo
此示例脚本转储您需要知道找到哪个设备的环境变量,例如:

DEVLINKS='/dev/disk/by-id/usb-Generic_USB_Flash_Disk-0:0 /dev/disk/by-path/pci-0000:00:13.2-usb-0:2:1.0-scsi-0:0:0:0'
DEVNAME=/dev/sdk
DEVPATH=/devices/pci0000:00/0000:00:13.2/usb2/2-2/2-2:1.0/host29/target29:0:0/29:0:0:0/block/sdk
DEVTYPE=disk
ID_BUS=usb
ID_FS_TYPE=
ID_INSTANCE=0:0
ID_MODEL=USB_Flash_Disk
ID_MODEL_ENC='USB\x20Flash\x20Disk\x20\x20'
ID_MODEL_ID=9380
ID_PART_TABLE_TYPE=dos
ID_PART_TABLE_UUID=61d1df0b
ID_PATH=pci-0000:00:13.2-usb-0:2:1.0-scsi-0:0:0:0
ID_PATH_TAG=pci-0000_00_13_2-usb-0_2_1_0-scsi-0_0_0_0
ID_REVISION=7.76
ID_SERIAL=Generic_USB_Flash_Disk-0:0
ID_TYPE=disk
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=Generic
ID_VENDOR_ENC='Generic\x20'
ID_VENDOR_ID=058f
MAJOR=8
MINOR=160
SUBSYSTEM=block

可能的重复不是重复,另一个问题涉及QT/libudev(即C编程)。这似乎更多的是bash脚本问题。bash脚本中的重定向应该是
2>&1
。目前它创建了一个名为“1”的文件,而我认为stdout(文件描述符1)的意思是。