USBデバイスが接続されているときにシェルスクリプトを実行する方法

USBデバイスが接続されているときにシェルスクリプトを実行する方法

デバイスが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ドライブを再接続し続けますが、何も接続しません。ログファイルに触れませんでした。

今何かが動作していることを少なくとも知ることができる最も簡単な方法は何ですか?効果がないよりも効果のあるもので作業する方が簡単です。

ベストアンサー1

特定のデバイスでスクリプトを実行するには、ベンダーと製品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
    

を使用すると、envudevで設定した環境を表示でき、を使用してfileファイルタイプを検索できます。

デバイスの特定の属性は、次のように確認できます。lsusb

lsusb

与えられた

...
バス 001 デバイス 016: ID 152d: 2329 JMicron Technologies, Inc. /JMicron Technologies Americas, Inc. JM20329 SATA ブリッジ
...

おすすめ記事