1

私は、(他のものの中でも) 外部デバイスをマウントし、コピーを行ってからアンマウントする Java アプリケーションを作成しています。

//I am mounting several devices in created dirs named sdb, sdc... according to the partitions
String[] command = {"gksu", "mount", "/dev/sd" + letter + "1", "mounter/sd" + letter};
Runtime.getRuntime().exec(command);

これは、端末と私のプログラムの両方で正常に機能します。

より速くアンマウントするために、使用することを考えましたumount -agksu umount -a、端末では機能せず、その結果、Java プログラムでは機能しません。sudo umount -a端末では機能しますが、アプリケーションでは機能しません。その間、デバイスを 1 つずつアンマウントして動作させましたが、何とか動作させることができればよりクリーンになりますumount -a

gksu が umount で、または sudo が Runtime.exec() で機能しない理由を理解していれば、あなたの説明を聞きます。

ありがとう

4

1 に答える 1

1

問題は、gksu のように sudo がパスワードを要求しないことだと思います。しかし、パスワードの付け方がわかりません。

これは非常に可能性が高いです。ここにはいくつかの異なる状況が考えられますが、それぞれに独自の解決策があると思います。

  1. プログラムを実行しているユーザー (デスクトップ アプリの場合) は、必要なコマンドを実行する権限を既に持っています。- ユーザーにパスワードの入力を求め、-s フラグを使用して stdin を介して sudo に渡します。詳細については、sudo の man ページを参照してください。これは簡単で、アプリケーションを実行しているユーザーよりも多くのアクセス権がアプリケーションに与えられないようにします。

  2. ユーザーが持っているものとは異なる権限でアプリケーションを実行する必要がある場合、またはこれがサーバー上で実行されている場合、アプリケーションは独自のシステム ユーザーとして実行する必要があります。次に、visudoを使用して、そのシステム ユーザーにパスワードを必要とせずに必要なコマンドのみを実行できるようにすることができます。sudoers ファイルの編集には十分注意してください。後で元に戻すのが簡単になるように、別のファイルとして追加し、実際の sudoers でリンクすることをお勧めします。

于 2014-04-29T16:29:45.570 に答える