当USB设备连接时,是否可以自动激活脚本?


12

我有一个USB设备(POV摄像机),该设备收集大量数据并定期填充其存储空间。目标是编写一个脚本,该脚本可以:

  1. 监听通过USB连接的设备
  2. 挂载为存储设备
  3. 从设备下载数据
  4. 安全卸载设备以进行删除(下载完成后)

稍后我可以在脚本中添加使GPIO上某些引脚上的LED闪烁以指示状态的选项...

我在ubuntu和其他Linux站点上搜索了“如何从USB设备自动下载数据”,但是没有结果。谁能提供一个起点?我很喜欢从文档和示例中编写代码。

Answers:


13

使用udev规则。

查找您的设备信息。

udevadm -a -p /dev/path/device/

KERNELS=="1-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
...
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="SANDisk"
ATTRS{product}=="USB DISK"
ATTRS{serial}=="SD71011000019113"

然后为您的设备创建udev规则文件。创建规则文件时,请使用从udevinfo命令获得的信息。

/etc/udev/rules.d/99-mydevice.rules的内容

SUBSYSTEMS=="usb", ATTRS{serial}=="SD71011000019113", RUN+="/home/gurcan/sync.sh"

创建将在连接USB设备时运行的脚本

#!/bin/bash
#
rsync -avz /media/disk/photos/ /data/photos/

重新加载udev规则

udevcontrol reload_rules

测试一下。拔下/插上


1
我尝试运行udevinfo,但从-bash: udevinfo: command not foundssh shell 得到响应。我检查了一下man,有一个man条目udev,但没有udevinfo。我可能会尝试用udev...来解决这个问题,尽管您的回答很有帮助,所以谢谢!我也会环顾四周udevinfo,也许我还没有安装存储库之类的东西。
user3.1415927 2014年

1
@ user3.1415927因为在debian中将udevinfo替换为udevadm,所以我更新了答案。
gurcanozturk

2

如果您不喜欢udev,可以看看devmon

它允许以下选项:

--exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE --exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL --exec-on-video "COMMAND" Execute COMMAND after video DVD mount --exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion --exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount --exec-on-drive "COMMAND" Execute COMMAND after drive mount --exec-on-unmount "COMMAND" Execute COMMAND after unmount --exec-on-remove "COMMAND" Execute COMMAND after drive removal Where the following in COMMAND will be replaced with: %d mount point directory (eg /media/cd) %f device name (eg /dev/sdd1) %l label of mounted volume Multiple --exec-on-XXX options may be used to execute multiple commands. Other exec-on-XXX commands are ignored if exec-on-device or -label executed.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.