Linux
插入 USB 設備時如何執行 shellscript
我想在我的 Linux 機器中插入一個設備時執行一個腳本。例如,
xinput
在滑鼠或某個驅動器上的備份腳本上執行。我看過很多關於這方面的文章,最近在這里和這裡。但我就是無法讓它工作。
這裡有一些簡單的例子,試圖至少得到某種回應。
/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
並且應該立即處於活動狀態。我不斷地重新插入我的鍵盤、滑鼠、平板電腦、記憶棒和 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 設置的環境,使用file
,您將發現文件類型。可以通過以下方式發現您設備的具體屬性
lsusb
lsusb
給
…
匯流排001設備016:ID 152d:2329 JMicron Technology Corp. / JMicron USA Technology Corp. JM20329 SATA Bridge
…