我希望每次插入 USB 调制解调器时执行一个 shell 脚本。
我该如何做呢?
答案1
您可以使用一些 udev 规则来实现这一点,正如@Rinzwind 所建议的那样。
首先,将脚本保存到其他用户可以访问的地方。例如,您可以将其保存为/usr/local/bin/script.sh
。
现在,让其他人可以访问该脚本。
sudo chmod 555 /usr/local/bin/script.sh
现在,插入 USB 调制解调器,然后运行lsusb
。以下是示例输出:
$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 0fcf:1008 Dynastream Innovations, Inc. Mini stick Suunto
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
找到末尾带有调制解调器名称的行。现在,找到格式中靠近中间的部分ID XXXX:####
。XXXX
和####
部分将是供应商 ID和设备ID分别。
对于此示例的第三行,即… ID 0fcf:1008 Dynastream …
,供应商 ID 为0fcf
,设备 ID 为1008
。您的设备将具有这些 ID 的不同值。
现在,我们将使用这些 ID 为 udev 创建规则。
现在,使用 udev 为该设备创建一条规则。
使用以下方式创建规则文件
sudo nano /etc/udev/rules.d/90-local.rules
添加以下行:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{vendor}=="0xXXXX", ATTRS{device}=="0x####", RUN+="/usr/local/bin/script.sh"
替换XXXX
为供应商 ID并将####
其替换为产品编号从早些时候开始。
现在,强制 udev 重新加载其规则(或者您可以跳过此步骤并重新启动)
udevadm control --reload-rules
sudo service udev restart
您已经完成了!