「Udisks」の版間の差分
(→特定のパーティションを隠匿する: 情報を更新) |
(→設定: 情報を更新) |
||
20行目: | 20行目: | ||
== 設定 == |
== 設定 == |
||
− | + | ユーザーが udisk を使用して実行できるアクションは、[[polkit]] で制限されます。[[一般的なトラブルシューティング#セッションのパーミッション|ユーザーセッション]] が有効でない、または存在しない場合(例えば [[systemd/ユーザー]] サービスから udisk を制御する場合)、polkit ルールを適宜調整してください。 |
|
+ | {{ic|storage}} グループに対する一般的な udisks のパーミッションについては https://github.com/coldfix/udiskie/wiki/Permissions を、より限定的な例については [https://gist.github.com/grawity/3886114#file-udisks2-allow-mount-internal-js] を参照してください。[[Dolphin]]を使用している場合は、[https://gist.github.com/Scrumplex/8f528c1f63b5f4bfabe14b0804adaba7] を参照してください。 |
||
− | {{hc|/etc/polkit-1/rules.d/50-udisks.rules| |
||
− | 2=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]; |
||
− | } |
||
− | }); |
||
− | }} |
||
− | |||
− | [https://gist.github.com/grawity/3886114#file-udisks2-allow-mount-internal-js] に他にも様々な例があります。[[systemd]] サービスから udiskie を起動するには {{ic|org.freedesktop.udisks2.filesystem-*}} の設定が必要なので注意してください。 |
||
== 使用方法 == |
== 使用方法 == |
2022年1月24日 (月) 15:18時点における版
関連記事
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
を見て下さい。
設定
ユーザーが udisk を使用して実行できるアクションは、polkit で制限されます。ユーザーセッション が有効でない、または存在しない場合(例えば systemd/ユーザー サービスから udisk を制御する場合)、polkit ルールを適宜調整してください。
storage
グループに対する一般的な udisks のパーミッションについては https://github.com/coldfix/udiskie/wiki/Permissions を、より限定的な例については [2] を参照してください。Dolphinを使用している場合は、[3] を参照してください。
使用方法
リムーバブルドライブを手動でマウントする場合、例えば /dev/sdc
のようにします。
$ udisksctl mount -b /dev/sdc1
アンマウントするには
$ udisksctl unmount -b /dev/sdc1
詳しくは udisksctl help
をご覧ください。
ヒントとテクニック
マウントヘルパー
デバイスの自動マウントは、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
/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 イメージを簡単にマウントするには、以下のコマンドを使用します。
$ 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"
ブロックデバイス名はリブート時に変更されることがあるため、UUID (blkid /dev/sdX
コマンドを実行して得られたもの) を使用してパーティションやデバイス全体を隠すことも可能です。
# blkid /dev/sdX
/dev/sdX: LABEL="Filesystem Label" UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX" UUID_SUB="YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY" TYPE="btrfs"
そうすると、次のような行が使えるようになります。
SUBSYSTEM=="block", ENV{ID_FS_UUID}=="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX", ENV{UDISKS_IGNORE}="1"
上の行はマルチデバイスの btrfs ファイルシステムを隠すのにも便利です。単一の btrtfs ファイルシステムからの全てのデバイスはデバイス間で同じ UUID を共有しますが、個々のデバイスごとに異なる SUB_UUID を持つことになります。
ATA 設定の適用 (udisks2)
起動時とドライブ接続時に、udisksd はファイル /etc/udisks2/IDENTIFIER.conf
に保存されている設定を適用します。ここで IDENTIFIER
はそのドライブの Drive:Id プロパティの値です。現在、ATA 設定がサポートされています。利用可能なオプションについては、udisks(8) を参照してください。これらの設定は基本的に hdparm と同じ効果を持ちますが、 udisks デーモンが自動起動されている間は永続的になります。
例えば、ドライブのスタンバイ・タイムアウトを 240 (20 分) に設定するには、以下を追加します。
/etc/udisks2/DriveId.conf
[ATA] StandbyTimeout=240
ドライブの DriveId を取得するには、 udevadm info --query=all --name=sdx | grep ID_SERIAL | sed "s/_/-/g"
を使用してください。
また、gnome-disk-utility などの GUI ユーティリティを使用して設定ファイルを管理することもできます。
トラブルシューティング
デバイスの隠匿の無効化 (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 [...]
デバイスがアンマウントされない (udisks)
一定期間後 udisks はデバイスを再マウントしたりデバイスにポーリングします。このことによって、ドライブをフォーマットしたり、仮想マシンでドライブを共有したり、--detach
でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。
特定のデバイスのポーリングを無効化するには、次を実行 (CD/DVD デバイスの場合):
# udisks --inhibit-polling /dev/sr0
全てのデバイスで無効化するには:
# udisks --inhibit-all-polling
詳しくは man udisks
を参照。
スタンバイタイマーの破損(udisks2)
udisks デーモンは、ドライブから定期的に S.M.A.R.T. データをポーリングしています。ポーリング間隔よりも長いスタンバイタイムアウトを持つハードディスクは、スタンバイに失敗することがあります。すでにスピンダウンしているドライブは、通常、影響を受けません。現在、udisks2 のようにポーリングを無効化したり間隔を変更する方法はないようです。[4], [5] を参照してください。
ただし、udisks2 が適用しているスタンバイタイムアウトには影響がないようです。udisks でスタンバイタイムアウトを設定するには、ATA 設定の適用 (udisks2) を参照してください。
他の回避策として、タイムアウトをポーリング間隔 (10分) 以下に設定するか、 hdparm -y /dev/sdx
を使って手動でスピンダウンを強制的に実行することも考えられます。
NTFS のマウントに失敗する
ntfs パーティションのマウントに失敗し、エラーが発生した場合。
Error mounting /dev/sdXY at [...]: wrong fs type, bad option, bad superblock on /dev/sdXY, missing codepage or helper program, or other error.
と、root で実行した journalctl
/dmesg
のカーネルログに記載されています。
ntfs: (device sdXY): parse_options(): Unrecognized mount option windows_names.
この問題は、udisks がカーネルの ntfs ドライバを使おうとしていることで、この (デフォルトの) マウントオプションを認識していないことです。 これを動作させるには、オプションの依存関係 NTFS-3G がインストールされている必要があります。