有沒有辦法在每次插入 USB 數據機時運行腳本?

有沒有辦法在每次插入 USB 數據機時運行腳本?

我希望每次插入 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

你就完成了!

資料來源:SU 上有關 udev 規則的類似問題,建立 udev 規則

相關內容