デバイスが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
を使用すると、env
udevで設定した環境を表示でき、を使用してfile
ファイルタイプを検索できます。
デバイスの特定の属性は、次のように確認できます。lsusb
lsusb
与えられた
...
バス 001 デバイス 016: ID 152d: 2329 JMicron Technologies, Inc. /JMicron Technologies Americas, Inc. JM20329 SATA ブリッジ
...