sudo権限なしでスクリプトでUSBドライブの読み取り/書き込み操作を処理する

sudo権限なしでスクリプトでUSBドライブの読み取り/書き込み操作を処理する

私は時々USBドライブデバイスに書き込む必要があるアプリケーションを開発しています。アプリケーションは root ではなく権限で実行され、ドライブに書き込む最善の方法は、ドライブを接続するとすぐにリフレッシュオプションを使用してマウントすることです。理論的にはマウント解除を行う必要はありません。次のudevルールを使用するには:

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

インストールスクリプトは、次の方法でコマンドを呼び出そうとします。

mount -o --flush $1 /media/my-user/my-usb-unit

しかし、私は理解していますこのインストールエラー:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

興味深いことに、udevルールを介してインストールしようとしたときにのみこのエラーが発生します。mymountscript.shその時点で、デバイスが正しく取り付けられていると自分自身を呼び出す場合です。

この問題に対する解決策に加えて、このタスクを実行するときにどのようなリスクがあるかを知りたいです。 (ファイルを作成した後にドライブをマウント解除しないので理解しています。)別の方法で行く場合は、デバイス自体をインストール/削除するには、アプリケーションスクリプト(ユーザーの代わりに実行されます)が必要です。これを行うには、デバイスを挿入するときにデバイス名をどこかに保存し、アプリにデバイスのインストール権限を付与する必要があります。

オペレーティングシステムはXubuntu 16.04です。

答え1

私の解決策は次のように管理することです。

  1. USBプラグインを操作するためのudevルール。

  2. 同時に、スクリプト自体がドライブをマウント/マウント解除します。

  3. USB 除去操作の udev ルールです。

USBが接続されている

デバイス名のみをファイルに保存するスクリプトを実行します。このルールに別のスクリプトを追加できます。

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

ここではmyownscript.sh設置装置を使用する。、標準ユーザーはリムーバブルドライブをマウント/マウント解除できます。次回の使用前に各スクリプトからユニットをアンロードした後は、別のスクリプトを呼び出すことができます。

USBが削除されました

ここでは、単純なスクリプトは生成されたファイルを削除するため、my-usb-inserted.shスクリプトにフラッシュメモリセルが挿入されていないことがわかります。

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

このソリューションは、複数のUSBドライブを処理する必要があるという事実を考慮しません。

また見なさい:

関連情報