![通过 udev 进行 USB 同步?](https://linux22.com/image/1130272/%E9%80%9A%E8%BF%87%20udev%20%E8%BF%9B%E8%A1%8C%20USB%20%E5%90%8C%E6%AD%A5%EF%BC%9F.png)
在尝试制作一个非常简单的备份程序几次后,我非常绝望。在关注并尝试了有关该主题的所有帖子 6 个小时后,我不知道任何解决方案。我只希望插入 USB 驱动器后立即启动一个 Java 脚本。
sudoedit /etc/udev/rules.d/90-local.rules
在我的本地规则中,我基本上只想运行我的 SUPERJAVA shell,我已经尝试了所有类型的 ATTRS / ATTR 组合。我的最后状态是:
BUS=="usb", KERNEL=="sd*", ATTRS{serial}=="4C530009320619116345", ACTION=="add", SYMLINK+="kram", RUN+="/home/d/Desktop/DirSyncPro-1.51-Linux/SUPERJAVA.sh"
该 shell 仅启动一个简单的同步程序,但如果我在终端中定期启动它,它就可以自行运行。
#!/bin/bash java -jar dirsyncpro.jar
但是,在日志文件中,如果我插入 USB,它不会努力运行该程序。
tail -f /var/log/syslog
只是为了回到步骤: 1. lsusb
,这给了我:entBus 002 Device 012: ID 0781:5572 SanDisk Corp.
2. ,这给udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/002/012)
了我:looking at device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2': KERNEL=="2-2" SUBSYSTEM=="usb"
...... ATTR{idVendor}=="0781"
...... ATTR{serial}=="4C530009320619116345"
...... ATTR{idProduct}=="5572"
...... ATTR{product}=="Cruzer Switch"
...... ATTRS{idVendor}=="1d6b"
......ATTRS{idProduct}=="0002"
ATTRS{product}=="EHCI Host Controller"
有谁知道我可以尝试什么吗?udev 不再与 Ubuntu 14.04 兼容了吗?
答案1
您的 udev 规则没有触发。
代替:
BUS=="usb"
和SUBSYSTEM=="usb"
。KERNEL=="sd*"
和KERNEL=="2-2"
。
三重检查:
- 您的序列号
ATTRS{serial}=="4C530009320619116345"
。 - 脚本的路径。
暂时抑制SYMLINK+="kram"
。当您对规则的效果感到满意时,可以稍后将其添加回来。
你的新udev
规则应该是:
SUBSYSTEM=="usb", KERNEL=="2-2", ATTRS{serial}=="4C530009320619116345", ACTION=="add", RUN+="/home/d/Desktop/DirSyncPro-1.51-Linux/SUPERJAVA.sh"
如果可行,请尝试不使用udev
标签KERNEL=="2-2"
,因为它可能是多余的,特别是如果您成功通过序列号识别了您的事件设备。
答案2
udev
不适用于长时间进程,请检查man udev
。查找 udev 绑定或仅查找 shell,观察 udev 事件。在用户级别进行同步。
udevadm monitor -u
可能会有帮助,python 有 pyudev,......