「Udisks」の版間の差分
細 (→マウントヘルパー) |
|||
1行目: | 1行目: | ||
[[Category:ハードウェア検出とトラブルシューティング]] |
[[Category:ハードウェア検出とトラブルシューティング]] |
||
[[en:Udisks]] |
[[en:Udisks]] |
||
+ | [[it:Execute on USB insert]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{ |
+ | {{Related|udev}} |
{{Related|マウント}} |
{{Related|マウント}} |
||
{{Related|Polkit}} |
{{Related|Polkit}} |
||
13行目: | 14行目: | ||
''udisks'' には互換性のない2つのバージョン、{{Pkg|udisks}} と {{Pkg|udisks2}} が存在します。''udisks'' の開発は終了しており ''udisks2'' に移行しています [http://davidz25.blogspot.be/2012/03/simpler-faster-better.html]。 |
''udisks'' には互換性のない2つのバージョン、{{Pkg|udisks}} と {{Pkg|udisks2}} が存在します。''udisks'' の開発は終了しており ''udisks2'' に移行しています [http://davidz25.blogspot.be/2012/03/simpler-faster-better.html]。 |
||
− | ''udisksd'' ({{Pkg|udisks2}}) と ''udisks-daemon'' ({{Pkg|udisks}}) は [[ |
+ | ''udisksd'' ({{Pkg|udisks2}}) と ''udisks-daemon'' ({{Pkg|udisks}}) は [[D-Bus]] によって必要の応じて起動するので、明示的に有効にする必要はありません ({{ic|man udisksd}} や {{ic|man udisks-daemon}} を参照)。制御は ''udisksctl'' と ''udisks'' を使うことでコマンドラインから行うことができます。詳しくは {{ic|man udisksctl}} と {{ic|man udisks}} を見て下さい。 |
== 設定 == |
== 設定 == |
||
34行目: | 35行目: | ||
"org.freedesktop.udisks2.encrypted-unlock": YES, |
"org.freedesktop.udisks2.encrypted-unlock": YES, |
||
"org.freedesktop.udisks2.eject-media": YES, |
"org.freedesktop.udisks2.eject-media": YES, |
||
− | "org.freedesktop.udisks2.power-off-drive": YES |
+ | "org.freedesktop.udisks2.power-off-drive": YES, |
+ | // required for udisks2 if using udiskie from another seat (e.g. systemd): |
||
+ | "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, |
||
+ | "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, |
||
+ | "org.freedesktop.udisks2.eject-media-other-seat": YES, |
||
+ | "org.freedesktop.udisks2.power-off-drive-other-seat": YES |
||
}; |
}; |
||
if (subject.isInGroup("storage")) { |
if (subject.isInGroup("storage")) { |
||
42行目: | 48行目: | ||
}} |
}} |
||
− | [https://gist.github.com/grawity/3886114#file-udisks2-allow-mount-internal-js] に他にも様々な例があります。 |
+ | [https://gist.github.com/grawity/3886114#file-udisks2-allow-mount-internal-js] に他にも様々な例があります。[[systemd]] サービスから udiskie を起動するには {{ic|org.freedesktop.udisks2.filesystem-*}} の設定が必要なので注意してください。 |
== マウントヘルパー == |
== マウントヘルパー == |
||
64行目: | 70行目: | ||
{{Tip|バックグラウンドで devmon を実行して自動的にデバイスをマウントするには、{{ic|devmon@.service}} を[[systemd#ユニットを使う|有効化]]して下さい。引数にユーザー名を指定します: {{ic|devmon@''user''.service}}。サービスは[[セッション]]の外で動作するので注意してください。Polkit のルールを適切に調整するか、ユーザーセッションから {{ic|devmon}} を実行してください ([[自動起動]]を参照)。}} |
{{Tip|バックグラウンドで devmon を実行して自動的にデバイスをマウントするには、{{ic|devmon@.service}} を[[systemd#ユニットを使う|有効化]]して下さい。引数にユーザー名を指定します: {{ic|devmon@''user''.service}}。サービスは[[セッション]]の外で動作するので注意してください。Polkit のルールを適切に調整するか、ユーザーセッションから {{ic|devmon}} を実行してください ([[自動起動]]を参照)。}} |
||
+ | |||
+ | === inotify === |
||
+ | |||
+ | {{Pkg|inotify-tools}} を使うことで {{ic|/dev}} を監視して、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。不要になったマウントポイントは ''udisksd'' によって自動的に削除されます。そのため、削除するのに特別な操作は必要ありません。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | #!/bin/bash |
||
+ | inotifywait --monitor --event create,delete --format '%e %w%f' /dev | while read event file; do |
||
+ | pattern='sd[b-z][1-9]$' |
||
+ | if [[ $file =~ $pattern ]]; then |
||
+ | case $event in |
||
+ | CREATE) |
||
+ | echo "Settling..." |
||
+ | sleep 1 |
||
+ | udisksctl mount --block-device $file --no-user-interaction |
||
+ | ;; |
||
+ | DELETE) |
||
+ | ;; |
||
+ | esac |
||
+ | fi |
||
+ | done |
||
+ | </nowiki>}} |
||
== Tips and tricks == |
== Tips and tricks == |
||
− | === |
+ | === デバイスの隠匿の無効化 (udisks2) === |
Udisks2 はデフォルトで特定のデバイスをユーザーから遮蔽します。この挙動が望ましくない、または問題になる場合は、{{ic|/usr/lib/udev/rules.d/80-udisks2.rules}} を {{ic|/etc/udev/rules.d/80-udisks2.rules}} にコピーしてから、ファイルを編集し以下のセクションを削除してください: |
Udisks2 はデフォルトで特定のデバイスをユーザーから遮蔽します。この挙動が望ましくない、または問題になる場合は、{{ic|/usr/lib/udev/rules.d/80-udisks2.rules}} を {{ic|/etc/udev/rules.d/80-udisks2.rules}} にコピーしてから、ファイルを編集し以下のセクションを削除してください: |
||
78行目: | 106行目: | ||
}} |
}} |
||
− | === |
+ | === /media にマウント (udisks2) === |
デフォルトで、udisks2 はリムーバルドライブを {{ic|/media/}} ではなく ACL によって制御される {{ic|/run/media/$USER/}} ディレクトリにマウントします。{{ic|/media}} にマウントしたい場合は、このルールを使って下さい: |
デフォルトで、udisks2 はリムーバルドライブを {{ic|/media/}} ではなく ACL によって制御される {{ic|/run/media/$USER/}} ディレクトリにマウントします。{{ic|/media}} にマウントしたい場合は、このルールを使って下さい: |
||
97行目: | 125行目: | ||
$ udisksctl loop-setup -r -f ''image.iso'' |
$ udisksctl loop-setup -r -f ''image.iso'' |
||
− | このコマンドはループデバイスを作成して ISO イメージをマウントできるようにします。アンマウントした時は、ループデバイスは [[ |
+ | このコマンドはループデバイスを作成して ISO イメージをマウントできるようにします。アンマウントした時は、ループデバイスは [[udev]] によって消されます。 |
+ | |||
+ | === 特定のパーティションを隠匿する === |
||
+ | |||
+ | デスクトップ上に特定のパーティションまたはドライブを表示しないようにするには、udev ルールを作成します (例: {{ic|/etc/udev/rules.d/10-local.rules}}): |
||
+ | |||
+ | KERNEL=="sda1", ENV{UDISKS_PRESENTATION_HIDE}="1" |
||
+ | KERNEL=="sda2", ENV{UDISKS_PRESENTATION_HIDE}="1" |
||
+ | |||
+ | 上記のルールを作成するとデスクトップに {{ic|sda1}} と {{ic|sda2}} が表示されなくなります。{{Pkg|udisks2}} を使っている場合、上記のルールは使えないので注意してください。{{ic|UDISKS_PRESENTATION_HIDE}} がサポートされていないためです。代わりに、以下のように {{ic|UDISKS_IGNORE}} を使って下さい: |
||
+ | |||
+ | KERNEL=="sda1", ENV{UDISKS_IGNORE}="1" |
||
+ | KERNEL=="sda2", ENV{UDISKS_IGNORE}="1" |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
− | === |
+ | === 物理的な取り出しボタンが動作しない (udisks2) === |
バージョン 2.1.3-1 まで手動のディスク取り出しは ''udisks2'' で機能しません [https://bugs.launchpad.net/ubuntu/+source/udisks2/+bug/1168742]。対応策としては、ソフトウェアを使うか、元の ''udisks'' を使ってイジェクトしてください。 |
バージョン 2.1.3-1 まで手動のディスク取り出しは ''udisks2'' で機能しません [https://bugs.launchpad.net/ubuntu/+source/udisks2/+bug/1168742]。対応策としては、ソフトウェアを使うか、元の ''udisks'' を使ってイジェクトしてください。 |
||
− | === |
+ | === デバイスがアンマウントされない (udisks) === |
一定期間後 ''udisks'' はデバイスを再マウントしたりデバイスに''ポーリング''します。このことによって、ドライブをフォーマットしたり、[[仮想マシン]]でドライブを共有したり、{{ic|--detach}} でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。 |
一定期間後 ''udisks'' はデバイスを再マウントしたりデバイスに''ポーリング''します。このことによって、ドライブをフォーマットしたり、[[仮想マシン]]でドライブを共有したり、{{ic|--detach}} でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。 |
||
− | 特定のデバイスのポーリングを無効化するには、次を実行: |
+ | 特定のデバイスのポーリングを無効化するには、次を実行 (CD/DVD デバイスの場合): |
− | # udisks --inhibit-polling /dev/ |
+ | # udisks --inhibit-polling /dev/sr''0'' |
全てのデバイスで無効化するには: |
全てのデバイスで無効化するには: |
2015年8月16日 (日) 14:31時点における版
関連記事
udisks には、ストレージデバイスに問い合わせたり制御を行うために使われる D-Bus インターフェイスを実装した udisksd というデーモンと、デーモンを利用したりクエリを送るのに使われる udisksctl というコマンドラインツールが含まれています。
目次
インストール
udisks には互換性のない2つのバージョン、udisks と udisks2 が存在します。udisks の開発は終了しており udisks2 に移行しています [1]。
udisksd (udisks2) と udisks-daemon (udisks) は D-Bus によって必要の応じて起動するので、明示的に有効にする必要はありません (man udisksd
や man udisks-daemon
を参照)。制御は udisksctl と udisks を使うことでコマンドラインから行うことができます。詳しくは man udisksctl
と man udisks
を見て下さい。
設定
udisks を使ってユーザーが行うことができるアクションは Policykit によって制限されます。セッションが有効でなかったり存在しない場合は、手動で policykit を設定して下さい。以下のファイルは storage
グループに一般的な udisks 権限を設定します [2]。
/etc/polkit-1/rules.d/50-udisks.rules
polkit.addRule(function(action, subject) { var YES = polkit.Result.YES; var permission = { // only required for udisks1: "org.freedesktop.udisks.filesystem-mount": YES, "org.freedesktop.udisks.filesystem-mount-system-internal": YES, "org.freedesktop.udisks.luks-unlock": YES, "org.freedesktop.udisks.drive-eject": YES, "org.freedesktop.udisks.drive-detach": YES, // only required for udisks2: "org.freedesktop.udisks2.filesystem-mount": YES, "org.freedesktop.udisks2.filesystem-mount-system": YES, "org.freedesktop.udisks2.encrypted-unlock": YES, "org.freedesktop.udisks2.eject-media": YES, "org.freedesktop.udisks2.power-off-drive": YES, // required for udisks2 if using udiskie from another seat (e.g. systemd): "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, "org.freedesktop.udisks2.eject-media-other-seat": YES, "org.freedesktop.udisks2.power-off-drive-other-seat": YES }; if (subject.isInGroup("storage")) { return permission[action.id]; } });
[3] に他にも様々な例があります。systemd サービスから udiskie を起動するには org.freedesktop.udisks2.filesystem-*
の設定が必要なので注意してください。
マウントヘルパー
udisks ラッパーを使うことでデバイスの自動マウントは簡単に行うことができます。アプリケーション一覧#マウントツールやファイルマネージャの機能#マウントも参照。
Devmon
udevil には devmon が含まれており、udisks と udisks2 の両方に対応しています。以下の順番でマウントヘルパーを利用します:
- udevil (SUID)
- pmount (SUID)
- udisks
- udisks2
udisks や udisks2 を使ってデバイスをマウントするには、udevil から SUID パーティションを取り除いて下さい:
# chmod -s /usr/bin/udevil
inotify
inotify-tools を使うことで /dev
を監視して、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。不要になったマウントポイントは udisksd によって自動的に削除されます。そのため、削除するのに特別な操作は必要ありません。
#!/bin/bash inotifywait --monitor --event create,delete --format '%e %w%f' /dev | while read event file; do pattern='sd[b-z][1-9]$' if [[ $file =~ $pattern ]]; then case $event in CREATE) echo "Settling..." sleep 1 udisksctl mount --block-device $file --no-user-interaction ;; DELETE) ;; esac fi done
Tips and tricks
デバイスの隠匿の無効化 (udisks2)
Udisks2 はデフォルトで特定のデバイスをユーザーから遮蔽します。この挙動が望ましくない、または問題になる場合は、/usr/lib/udev/rules.d/80-udisks2.rules
を /etc/udev/rules.d/80-udisks2.rules
にコピーしてから、ファイルを編集し以下のセクションを削除してください:
# ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # Devices which should not be display in the user interface [...]
/media にマウント (udisks2)
デフォルトで、udisks2 はリムーバルドライブを /media/
ではなく ACL によって制御される /run/media/$USER/
ディレクトリにマウントします。/media
にマウントしたい場合は、このルールを使って下さい:
/etc/udev/rules.d/99-udisks2.rules
# UDISKS_FILESYSTEM_SHARED # ==1: mount filesystem to a shared directory (/media/VolumeName) # ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName) # See udisks(8) ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
ISO イメージのマウント
ISO イメージを簡単にマウントするには、次のコマンドを使用:
$ udisksctl loop-setup -r -f image.iso
このコマンドはループデバイスを作成して ISO イメージをマウントできるようにします。アンマウントした時は、ループデバイスは udev によって消されます。
特定のパーティションを隠匿する
デスクトップ上に特定のパーティションまたはドライブを表示しないようにするには、udev ルールを作成します (例: /etc/udev/rules.d/10-local.rules
):
KERNEL=="sda1", ENV{UDISKS_PRESENTATION_HIDE}="1" KERNEL=="sda2", ENV{UDISKS_PRESENTATION_HIDE}="1"
上記のルールを作成するとデスクトップに sda1
と sda2
が表示されなくなります。udisks2 を使っている場合、上記のルールは使えないので注意してください。UDISKS_PRESENTATION_HIDE
がサポートされていないためです。代わりに、以下のように UDISKS_IGNORE
を使って下さい:
KERNEL=="sda1", ENV{UDISKS_IGNORE}="1" KERNEL=="sda2", ENV{UDISKS_IGNORE}="1"
トラブルシューティング
物理的な取り出しボタンが動作しない (udisks2)
バージョン 2.1.3-1 まで手動のディスク取り出しは udisks2 で機能しません [4]。対応策としては、ソフトウェアを使うか、元の udisks を使ってイジェクトしてください。
デバイスがアンマウントされない (udisks)
一定期間後 udisks はデバイスを再マウントしたりデバイスにポーリングします。このことによって、ドライブをフォーマットしたり、仮想マシンでドライブを共有したり、--detach
でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。
特定のデバイスのポーリングを無効化するには、次を実行 (CD/DVD デバイスの場合):
# udisks --inhibit-polling /dev/sr0
全てのデバイスで無効化するには:
# udisks --inhibit-all-polling
詳しくは man udisks
を参照。