Udisks (日本語) - ArchWiki

# Udisks (日本語)

関連記事

- udev
- マウント
- Polkit
- ファイルマネージャの機能

udisks には、ストレージデバイスに問い合わせたり制御を行うために使われる D-Bus インターフェイスを実装した udisksd というデーモンと、デーモンを利用したりクエリを送るのに使われる udisksctl というコマンドラインツールが含まれています。

## インストール

udisks には互換性のない2つのバージョン、udisks と udisks2 が存在します。udisks の開発は終了しており udisks2 に移行しています [1]。

udisksd (udisks2) と udisks-daemon (udisks) は D-Bus によって必要の応じて起動するので、明示的に有効にする必要はありません (`man udisksd` や `man udisks-daemon` を参照)。

## 設定

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
      };
      if (subject.isInGroup("storage")) {
        return permission[action.id];
      }
    });

[3] に他にも様々な例があります。

## マウントヘルパー

udisks ラッパーを使うことでデバイスの自動マウントは簡単に行うことができます。アプリケーション一覧#マウントツールやファイルマネージャの機能#マウントも参照。

### Devmon

udevil には devmon が含まれており、udisks と udisks2 の両方に対応しています。以下の順番でマウントヘルパーを利用します:

1. udevil (SUID)
2. pmount (SUID)
3. udisks
4. udisks2

udisks や udisks2 を使ってデバイスをマウントするには、udevil から SUID パーティションを取り除いて下さい:

    # chmod -s /usr/bin/udevil

Note: root で `chmod -x /usr/bin/udevil` を実行すると devmon はデバイスの監視に udisks を使うようになります。
Tip: バックグラウンドで devmon を実行して自動的にデバイスをマウントするには、`devmon@.service` を有効化して下さい。引数にユーザー名を指定します: `devmon@user.service`。サービスはセッションの外で動作するので注意してください。Polkit のルールを適切に調整するか、ユーザーセッションから `devmon` を実行してください (自動起動を参照)。

## 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
    [...]

### udisks2: /media にマウント

デフォルトで、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 によって消されます。

## トラブルシューティング

### udisks2: 物理的な取り出しボタンが動作しない

バージョン 2.1.3-1 まで手動のディスク取り出しは udisks2 で機能しません [4]。対応策としては、ソフトウェアを使うか、元の udisks を使ってイジェクトしてください。

### udisks: デバイスがアンマウントされない

一定期間後 udisks はデバイスを再マウントしたりデバイスにポーリングします。このことによって、ドライブをフォーマットしたり、仮想マシンでドライブを共有したり、`--detach` でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。

特定のデバイスのポーリングを無効化するには、次を実行:

    # udisks --inhibit-polling /dev/sdX

全てのデバイスで無効化するには:

    # udisks --inhibit-all-polling

詳しくは `man udisks` を参照。

## 参照

- gentoo wiki: udisks
- Introduction to udisks

Category:

- Hardware detection and troubleshooting (日本語)