Linux

插入 USB 設備時如何執行 shellscript

  • September 26, 2020

我想在我的 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

引用自:https://unix.stackexchange.com/questions/65891