
我希望每次插入 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
你就完成了!