udev 実行コマンドが実行されない

udev 実行コマンドが実行されない

USB で携帯電話を接続するとコンピューターのロックを解除する udev ルールを作成しようとしています。そのルールが実行されていることがわからなかったので、もっと簡単なルールを試しました。これがそのルールです (匿名化されています) :

KERNEL=="sd?1", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", SYMLINK+="phone", RUN+="touch /home/user/udev.touch"

リンクは作成されているがファイルが作成されていないため、ルールが実行phone -> sdc1されていることはわかっています。ファイルで外部プログラムを実行するために有効にする必要があるセキュリティ設定はありますか?

答え1

RUNキーにはフルパスを使用する必要がありますman udev

絶対パスが指定されていない場合、プログラムは /lib/udev に存在すると想定されます。そうでない場合は、絶対パスを指定する必要があります。プログラム名と引数はスペースで区切られます。スペースを含む引数を指定するには、単一引用符を使用できます。

ただし、(bash) スクリプト自体は通常どおり動作するはずなので、パスを指定する必要はありません。

答え2

udev でも同じ問題が発生していました。デバイスの追加と削除時にスクリプトが機能するように、ほぼあらゆることを試しました。

私が作成したコードは次のとおりです:

ACTION=="add", KERNEL=="sda1", SUBSYSTEMS=="scsi", ATTRS{model}=="AVV207-0        ", SYMLINK+="Lacie", MODE="0666", RUN+="/bin/sh /usr/bin/udev/lacie-add.sh", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sda1", RUN+="/bin/sh /usr/bin/udev/lacie-del.sh", OPTIONS="last_rule"

パラメータを追加するとOPTIONS="last_rule"問題は解決しました。

答え3

私もこの問題を経験しましたが、12.04 の時点では、RUN コマンドが機能するには完全なbashパスと完全なスクリプトを指定する必要があることが確認できました。bash

関連情報