通过 udev 进行 USB 同步?

通过 udev 进行 USB 同步?

在尝试制作一个非常简单的备份程序几次后,我非常绝望。在关注并尝试了有关该主题的所有帖子 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,......

相关内容