我想在Linux机器中插入设备时执行脚本.例如,在鼠标上运行xinput或在某个驱动器上运行备份.
我已经看过很多关于这方面的文章,最近的一篇文章是here和here.但是我无法让它发挥作用.
以下是一些试图获得至少某种响应的简单示例.
/etc/udev/rules.d/test.rules
#KERNEL=="sd*", ATTRS{vendor}=="*", ATTRS{model}=="*", ATTRS{serial}=="*", RUN+="/usr/local/bin/test.sh"
#KERNEL=="sd*", ACTION=="add", "SUBSYstem=="usb", ATTRS{model}=="My Book 1140 ", ATTRS{serial}=="0841752394756103457194857249", RUN+="/usr/local/bin/test.sh"
#ACTION=="add", "SUBSYstem=="usb", RUN+="/usr/local/bin/test.sh"
#KERNEL=="sd*", ACTION=={add}, RUN+="/usr/local/bin/test.sh"
KERNEL=="sd*", RUN+="/usr/local/bin/test.sh"
KERNEL=="*", RUN+="/usr/local/bin/test.sh"
/usr/local/bin/test.sh
#!/usr/bin/env bash
echo touched >> /var/log/test.log
if [ "${ACTION}" = "add" ] && [ -f "${DEVICE}" ]
then
echo ${DEVICE} >> /var/log/test.log
fi
inotify会监视rules文件夹,并且应立即激活.我一直在重新插入我的键盘,鼠标,平板电脑,记忆棒和USB驱动器,但什么都没有.没有触及日志文件.
现在,至少知道一些东西最简单的方法是什么?从一些有效的东西而不是那些没有的东西开始工作会更容易.
解决方法:
如果要在特定设备上运行脚本,可以使用供应商和产品ID
>在/etc/udev/rules.d/test.rules中:
ATTRS{idvendor}=="152d", ATTRS{idProduct}=="2329", RUN+="/tmp/test.sh"
>在test.sh中:
#! /bin/sh
env >>/tmp/test.log
file "/sys${DEVPATH}" >>/tmp/test.log
if [ "${ACTION}" = add -a -d "/sys${DEVPATH}" ]; then
echo "add ${DEVPATH}" >>/tmp/test.log
fi
使用env,您可以看到从udev和文件设置的环境,您将发现文件类型.
可以使用lsusb发现设备的具体属性
lsusb
给
…
Bus 001 Device 016: ID 152d:2329 JMicron Technology Corp. / JMicron USA Technology Corp. JM20329 SATA Bridge
…
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。