UDEV - 在 USB 闪存驱动器插入上运行程序 [关闭]

Posted

技术标签:

【中文标题】UDEV - 在 USB 闪存驱动器插入上运行程序 [关闭]【英文标题】:UDEV - Run program on USB flash drive insert [closed] 【发布时间】:2013-12-03 18:49:42 【问题描述】:

每当将任何 USB 闪存驱动器(不仅仅是一个特定的)插入系统时,我都会尝试让脚本运行,并且我已经断断续续地拔头发大约 2 周来试图弄清楚它出去。有谁能够帮我? (如果有帮助,运行 Ubuntu)。

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

【问题讨论】:

How do I detect usb drive insertion in Linux? 的可能重复项 不是重复的,另外一个问题涉及到QT/libudev(即C编程)。这似乎更像是 bash 脚本问题。 【参考方案1】:

首先你需要你的规则来检测 USB 存储设备

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

KERNEL=="sd*[!0-9]|sr*", ENVID_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

【讨论】:

bash 脚本中的重定向应该是2>&1。目前它创建了一个名为“1”的文件,而我认为是 stdout(文件描述符 1)。

以上是关于UDEV - 在 USB 闪存驱动器插入上运行程序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 USB 上自动启动应用程序(通过自动运行?)

重新启动 Windows 8 并从 USB 闪存驱动器启动的代码

udev:启动时连接的设备

bootcamp安装windows一直正在下载软件

电脑如何区分键盘USB和鼠标USB?

制作 Ubuntu Core 的安装介质