「Udisks」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://www.freedesktop.org/」を「https://www.freedesktop.org/」に置換) |
(→マウントヘルパー: 情報を更新) |
||
| 54行目: | 54行目: | ||
== マウントヘルパー == |
== マウントヘルパー == |
||
| − | + | デバイスの自動マウントは、udisks のラッパーを使えば簡単に実現できます。[[アプリケーション一覧/ユーティリティ#マウントツール]]もご覧ください。 |
|
| + | {{Note|[[GNOME]] や [[KDE]] などの [[デスクトップ環境]] も、udisks ラッパーを提供しているかもしれません}} |
||
| − | === Devmon === |
||
| + | * {{App|bashmount|リムーバブルメディアを一般ユーザーとして ''udisks2'' でマウント・管理する bash スクリプトです。|https://github.com/jamielinux/bashmount|{{AUR|bashmount}}}} |
||
| − | {{pkg|udevil}} には [http://igurublog.wordpress.com/downloads/script-devmon devmon] が含まれており、''udisks'' と ''udisks2'' の両方に対応しています。以下の順番でマウントヘルパーを利用します: |
||
| + | * {{App|udiskie| ''udisks2'' オートカウンター。オプションで通知機能、トレイアイコン、パスワード保護された [[dm-crypt/デバイスの暗号化|LUKS デバイス]] のサポートを提供。詳しくは [https://github.com/coldfix/udiskie/wiki/Usage udiskie wiki] を見てください|https://github.com/coldfix/udiskie|{{Pkg|udiskie}}}} |
||
| + | * {{App|udisksvm|GUI ''udisks2'' のラッパーで Python3 で書かれ、Qt5 フレームワークを使用しています。リムーバブルデバイスのマウント、アンマウント、CD/DVD のイジェクトをマウスクリックで行えます。詳しくは [https://github.com/berbae/udisksvm/blob/master/README README] ファイルを見てください。 |3=https://github.com/berbae/udisksvm|4={{AUR|udisksvm}}}} |
||
| + | * {{App|udevil|Includes [https://igurublog.wordpress.com/downloads/script-devmon devmon], が含まれており、''udisks''と''udisks2''に互換性があります。|https://github.com/IgnorantGuru/udevil|{{Pkg|udevil}}}} |
||
| + | :{{Note|''devmon'' は ''udevil'' や ''pmount'' が SUID 権限を持っていない場合、マウントに ''udisks'' か ''udisks2'' しか使いません(この順番で。)このパーミッションを削除するには、root で {{ic|chmod -s /usr/bin/''udevil''}} を実行してください。}} |
||
| − | # [http://ignorantguru.github.io/udevil/ udevil] (SUID) |
||
| − | # pmount (SUID) |
||
| − | # udisks |
||
| − | # udisks2 |
||
| + | ==== udevadm モニター ==== |
||
| − | ''udisks'' や ''udisks2'' を使ってデバイスをマウントするには、''udevil'' から SUID パーティションを取り除いて下さい: |
||
| + | {{ic|udevadm monitor}} を使ってブロックイベントを監視し、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。古いマウントポイントは ''udisksd'' によって自動的に削除されるので、削除の際に特別な操作は必要ありません。 |
||
| − | # chmod -s /usr/bin/udevil |
||
| + | {{bc|<nowiki> |
||
| − | {{Note|root で {{ic|chmod -x /usr/bin/udevil}} を実行すると devmon はデバイスの監視に ''udisks'' を使うようになります。}} |
||
| + | #!/bin/sh |
||
| + | pathtoname() { |
||
| − | {{Tip|バックグラウンドで devmon を実行して自動的にデバイスをマウントするには、{{ic|devmon@.service}} を[[systemd#ユニットを使う|有効化]]して下さい。引数にユーザー名を指定します: {{ic|devmon@''user''.service}}。サービスは[[セッション]]の外で動作するので注意してください。Polkit のルールを適切に調整するか、ユーザーセッションから {{ic|devmon}} を実行してください ([[自動起動]]を参照)。}} |
||
| + | udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}' |
||
| − | |||
| + | } |
||
| − | === inotify === |
||
| − | |||
| − | {{Pkg|inotify-tools}} を使うことで {{ic|/dev}} を監視して、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。不要になったマウントポイントは ''udisksd'' によって自動的に削除されます。そのため、削除するのに特別な操作は必要ありません。 |
||
| − | |||
| − | {{bc|<nowiki> |
||
| − | #!/bin/bash |
||
| − | pattern='sd[b-z][1-9]$' |
||
| − | coproc inotifywait --monitor --event create,delete --format '%e %w%f' /dev |
||
| − | while read -r - |
+ | stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do |
| − | if |
+ | if [ "$event" = add ]; then |
| + | devname=$(pathtoname "$devpath") |
||
| − | case $event in |
||
| + | udisksctl mount --block-device "$devname" --no-user-interaction |
||
| − | CREATE) |
||
| + | fi |
||
| − | echo "Settling..."; sleep 1 |
||
| − | udisksctl mount --block-device $file --no-user-interaction |
||
| − | ;; |
||
| − | DELETE) |
||
| − | ;; |
||
| − | esac |
||
| − | fi |
||
done |
done |
||
</nowiki>}} |
</nowiki>}} |
||
2022年1月24日 (月) 14:33時点における版
関連記事
udisks には、ストレージデバイスに問い合わせたり制御を行うために使われる D-Bus インターフェイスを実装した udisksd というデーモンと、デーモンを利用したりクエリを送るのに使われる udisksctl というコマンドラインツールが含まれています。
目次
インストール
udisks には互換性のない2つのバージョン、udisksAUR と udisks2 が存在します。udisks の開発は終了しており udisks2 に移行しています [1]。
udisksd (udisks2) と udisks-daemon (udisksAUR) は 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 のラッパーを使えば簡単に実現できます。アプリケーション一覧/ユーティリティ#マウントツールもご覧ください。
- bashmount — リムーバブルメディアを一般ユーザーとして udisks2 でマウント・管理する bash スクリプトです。
- udiskie — udisks2 オートカウンター。オプションで通知機能、トレイアイコン、パスワード保護された LUKS デバイス のサポートを提供。詳しくは udiskie wiki を見てください
- udisksvm — GUI udisks2 のラッパーで Python3 で書かれ、Qt5 フレームワークを使用しています。リムーバブルデバイスのマウント、アンマウント、CD/DVD のイジェクトをマウスクリックで行えます。詳しくは README ファイルを見てください。
- udevil — Includes devmon, が含まれており、udisksとudisks2に互換性があります。
udevadm モニター
udevadm monitor を使ってブロックイベントを監視し、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。古いマウントポイントは udisksd によって自動的に削除されるので、削除の際に特別な操作は必要ありません。
#!/bin/sh
pathtoname() {
udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}'
}
stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do
if [ "$event" = add ]; then
devname=$(pathtoname "$devpath")
udisksctl mount --block-device "$devname" --no-user-interaction
fi
done
ヒントとテクニック
デバイスの隠匿の無効化 (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 を参照。