特定のUSBドライブを常に読み取り専用でマウントするように設定しようとしています。プラグインすると、単一のパーティションsdb1
を持つsdb
と表示されます。以下は関連するudevadm
行です(もちろん出力全体ではありません)。
$ udevadm info -a -n /dev/sdb1
looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/Host21/target21:0:0/21:0:0:0/block/sdb/sdb1':
KERNEL=="sdb1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976768002"
ATTR{stat}==" 473 30586 33938 3460 5 0 40 1624 0 2268 5084"
ATTR{partition}=="1"
OK、それで私は次のudev
ルールを書き、それを/etc/udev/rules.d/10-usbdisk.rules
として保存しました:
SUBSYSTEM=="block",
ATTR{size}=="976768002",
MODE="0555"
this によると、size
を使用するだけで十分ですが、他の置換も試しました。いずれの場合でも、ルールは読み取られたように見えます(ここでも、選択された出力行で、出力全体を確認できます here :
$ udevadm test $(udevadm info -q path -n /dev/sdb1) 2>&1
[...]
read rules file: /etc/udev/rules.d/10-usbdisk.rules
[...]
MODE 0555 /etc/udev/rules.d/10-usbdisk.rules:4
したがって、ルールが適用されるようにに見えるようになり、MODE="0555"
がに見えるは正しい構文です。しかし、実際にディスクを接続すると、その上でファイルを楽しく作成/削除できます。
OS:Debianテスト(LMDE)
それで、私は何が間違っているのですか?特定のUSBドライブを自動的に読み取り専用としてマウントする方法sing udev1?
1私はfstabでこれを行う方法を知っていますが、fstab設定はgvfsによって無視されます。私の目的は、これをGUIで読み取り専用として自動的にマウントすることです。おそらくこれは何らかの方法でudevまたはgvfsを介して行う必要があります。
要約すると、NautilusはGVFSを使用しており、fstabエントリーを読み取るときにudevにGVFSも使用するように指示する必要があるということです。これは次のようにして行うことができます。
/dev/block-device /mount/point auto x-gvfs-show,ro 0 0
x-gvfs-show
は、udevおよびGVFSヘルパーを使用してファイルシステムをマウントすることに関心のあるユーザーに通知するため、gvfsはすべての制御マウント、アンマウント、マウントポイントの移動などを行います。
ドライブがGUI(特にNautilus)を備えた最新のLinuxシステムにどのようにマウントされているかを理解しているかどうかを確認します。
Nautilusは [〜#〜] gvfs [〜#〜] をバックエンドとして使用して、FTP、SMB、ブロックデバイスなどをファイルシステムにマウントします。そのような提案のためにGNOMEが設計したツールはディスクと呼ばれ、GVFSの動作を変更するツールです。ここからがおもしろい。
Nautilusは、(fstabを使用するなど)GVFSを使用してマウントされなかったものをすべて無視し、udevを使用してこれに対する非常に基本的な制御を提供します(Nautilusは、GVFSを使用して、GVFSを使用して操作されなかったデバイスをアンマウントまたはマウントするように要求しません。 fstab、mount、その他のblobなど)。 fstab/udevに保存されている権限とオプションを使用すると、それに応じてこれらのファイルシステムを使用できますが、GVFSを使用して動作を変更することはできません。何かがSudo mount -o rw /dev/sda3
を使用してマウントされた場合、nautilusはudevにマウントポイントを変更する権限がないことを通知するため、責任をudevに渡し、udevがpolkitに権限を要求します。 GVFSを使用していた場合は、nautilus自体が権限やダイアログなどなしでデバイスをアンマウントします。
あなたはブロックデバイスを読み取り専用にすることができます
blockdev --setro /dev/sdb1
このコマンドをudevに実行させることができます(IIRC RUN=
)。
問題はSUBSYSTEM
だと思います。usb
ではなくblock
に変更してください。私はこの行をルールに追加し、私にとってはうまくいきます:
SUBSYSTEMS="usb", ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_MOUNT_OPTIONS}="ro"