ファイルを挿入すると、ファイルを自動的にフォーマットしてUSBフラッシュドライブにコピーするツールを作成しました。フォーマットするには、ドライブをアンマウントする必要があります。
通常、Nautilusは挿入時にドライブを自動的にマウントするため、これが発生するのを待ってから、ドライブをアンマウントしてからフォーマットする必要があります。唯一の問題は、ユーザーが自動マウントを無効にした場合、私のプログラムは永久に待機することです。
プログラムの開始時にdconfの自動マウント設定を変更し、終了時に元に戻すこともできますが、プログラムがクラッシュすると設定が復元されないため、これは適切な解決策ではありません。
プログラムの実行中にのみNautilusがUSBドライブを自動マウントしないようにするにはどうすればよいですか?
PROGRAM
を使用して、プログラムが実行されているかどうかを確認し、そのUDEVルールをアクティブ化できます。実行されていない場合は、pgrep
が正常に返されないため無効になります。
[〜#〜]プログラム[〜#〜]
プログラムを実行して、一致するものがあるかどうかを判断します。 プログラムが正常に戻った場合、キーはtrueです。デバイスのプロパティは、環境内で実行されたプログラムで使用できるようになります。プログラムの標準出力は、RESULTキーで使用できます。
これは、非常に短期間のフォアグラウンドタスクにのみ使用できます。詳細については、RUNを参照してください。
ソース:man udev
新しいルールファイルを追加する
/etc/udev/rules.d/90-prevent-auto-mount.rules
ACTION=="add", KERNEL="sd[a-z][0-9]*", DRIVERS=="usb-storage", PROGRAM="/usr/bin/pgrep yourprogramname", ENV{UDISKS_IGNORE}="1"
ルールのリロード
Sudo control --reload-rules
ところで、udisk2
は自動マウントを担当します
更新:「システムに永続的な変更を加えずに」という最も重要な仕様を無視しました。それでも解決できると思いますが、デスクトップセッションのライフサイクルやデスクトップイベントの処理に関する詳細な調査が必要です。それは私の専門知識ではありません。 ;)
明らかに、あなたは問題の機能をオフにする方法をすでに知っています。プログラムがクラッシュしても元に戻らないことが心配な場合は、2つの可能性しかありません。プログラムがクラッシュしないように注意するか、プログラムが実行されていないときにプログラムを監視して機能を元に戻すプログラムをプログラムします。
しかし、おそらく別の解決策があります。次のような行を/etc/fstab
に追加できます。
LABEL=somemagic /path ntfs noauto,user 0 0
次に、ドライブ上のファイルシステムにそのラベルが付いている場合、自動マウント機能の影響を受けずに、邪魔されずに(u)マウントできます。詳細については、man mount
およびman fstab
を参照してください。 LABELの代わりにUUIDを使用することもできますが、それはユースケースとファイルシステムによって異なります。