Prescript:我已经搜索过类似的问题,但找不到有用的答案。
背景:我使用的是 Fedora 64 位。我想在连接 USB 时执行特定的脚本 /bin/usbattached.sh。我正在使用金士顿 Datatraveller USB 棒,其供应商 ID 为 0951,产品 ID 为 1660(从 dmesg 和其他方法中找到)。我在我的机器上找到了两个 udev rules.d 目录,分别是 /etc/udev/rules.d 和 /lib/udev/rules.d 因为我不确定要使用哪个目录,所以我在这两个目录中创建了我的规则文件上面提到的目录。下面是我的规则
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1660", RUN+="/bin/usbattached.sh"
Run Code Online (Sandbox Code Playgroud)
我已经删除了 ACTION,将 RUN+= 更改为 RUN=,将其写入新文件以及预先存在的规则文件中,所有这些都没有运气。
我用
udevadm control --reload-rules
Run Code Online (Sandbox Code Playgroud)
和
systemctl restart udev.service
Run Code Online (Sandbox Code Playgroud)
重新启动udev。
当我在我的设备上运行 udevadm test 时,它显示它确实读取了我的规则文件,但脚本不起作用。任何调试它的方法都将受到高度赞赏。
手动运行时,脚本 /bin/usbattached.sh 将通知发送到屏幕的右上角,在屏幕上回显一条消息并将当前日期/时间附加到 ~/op 文件中。不幸的是,连接 USB 时,上述操作均未执行。
编辑:将“sleep 10”添加到我的 usbattached.sh 脚本后,我注意到大约在 18 秒后安装了 USB。该时间也随着值从 10 的变化而几乎呈线性变化。看起来脚本正在运行,但我没有任何通知,也没有在输出文件中附加新行