4

私は現在、USB デバイスが接続されているときに C で書かれたプログラムを実行するプロジェクトに取り組んでいます。これは udev ルールで可能ですか?

現在、デバイスを接続したときに Hello World スクリプトを実行するようにしています。ただし、複数回実行されます。

現在のパス:/etc/udev/rules.d/98-local.rules

現在のルール:

SUBSYSTEMS=="usb"、ACTION=="追加"、RUN+="/usr/local/bin/USB.sh"

スクリプトのパス: /usr/local/bin/USB.sh

脚本:

 #!/bin/bash
echo 'Hello World!' >>"/home/<username>/Desktop/udev.out"
exit

実行可能ファイルを実行するために、次のようなことを試しました。

 #!/bin/bash
usr/games/blackjack
exit

ターミナルでは usr/games/blackjack と入力しても機能しますが、USB デバイスが挿入されていると機能しません。ただし、スクリプトが実行されていることはわかっています。これらを同じファイルにまとめており、hello world が作成されているからです。

また、次のように、ユーザー アカウントから実行可能ファイルを実行しようとしました。

SUBSYSTEMS=="usb", ACTION=='add", RUN+="/bin/su tyler -c '/usr/local/bin/USB.sh'"

ただし、これも機能しません。

デバイス権限の問題ですか、それとも実行可能ファイルを実行できないだけですか?

*注: http://reactivated.net/writing_udev_rules.htmlにある udev ルールの説明をよく読みました。

4

3 に答える 3

2

C でプログラムを作成する場合は、libudevを使用できます。デバイスの列挙と監視を可能にするシンプルな API があります。ここでは、素敵なチュートリアルを見つけることができます。

于 2011-08-31T14:40:32.983 に答える
1

もう 1 つの理由は、udev が独自の環境で実行されているように見えることです。tty からプログラムを実行するようなものです: 起動しますが、xserver はありません...

ただし、これは私自身の実験に基づく純粋な推測です。udevをよく知っている人がこれを確認できるといいですね。

編集:スクリプトに次を追加します。

set -x
xhost local:YOURUSERNAME
export DISPLAY=:0.0

でルールをリロードするかもしれませんudevadm control --reload-rules

(ソース: http://ubuntuforums.org/showthread.php?t=994233 )

于 2011-08-31T14:33:17.240 に答える
0

シェル スクリプトを実行できる場合は、実行可能ファイルを実行できます。Cで作成されたかどうかは関係ありません。

スラッシュが足りないようです。そのパスはほぼ確実にあるはずですが/usr/games/blackjack、そうではありませんuser/games/blackjack

端末に正しく入力してスクリプトに不適切に入力したのか、それとも単に環境が異なるだけなのかはわかりません。UDEV システムが意図的に端末環境を再現するように設計されていない限り、それらが同じになる理由はありません。

于 2011-01-24T22:06:17.603 に答える