「Udisks」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎マウントヘルパー: 情報を更新)
(項目を英語版に追従して整理)
52行目: 52行目:
 
[https://gist.github.com/grawity/3886114#file-udisks2-allow-mount-internal-js] に他にも様々な例があります。[[systemd]] サービスから udiskie を起動するには {{ic|org.freedesktop.udisks2.filesystem-*}} の設定が必要なので注意してください。
 
[https://gist.github.com/grawity/3886114#file-udisks2-allow-mount-internal-js] に他にも様々な例があります。[[systemd]] サービスから udiskie を起動するには {{ic|org.freedesktop.udisks2.filesystem-*}} の設定が必要なので注意してください。
   
== マウントヘルパー ==
+
== ントとテクニック ==
  +
  +
=== マウントヘルパー ===
   
 
デバイスの自動マウントは、udisks のラッパーを使えば簡単に実現できます。[[アプリケーション一覧/ユーティリティ#マウントツール]]もご覧ください。
 
デバイスの自動マウントは、udisks のラッパーを使えば簡単に実現できます。[[アプリケーション一覧/ユーティリティ#マウントツール]]もご覧ください。
83行目: 85行目:
 
done
 
done
 
</nowiki>}}
 
</nowiki>}}
 
== ヒントとテクニック ==
 
   
 
=== デバイスの隠匿の無効化 (udisks2) ===
 
=== デバイスの隠匿の無効化 (udisks2) ===

2022年1月24日 (月) 14:35時点における版

関連記事

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

インストール

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

udisksd (udisks2) と udisks-daemon (udisksAUR) は D-Bus が必要に応じて起動するので、明示的に有効にする必要はありません (man udisksdman udisks-daemon を参照)。制御は udisksctludisks を使うことでコマンドラインから行うことができます。詳しくは man udisksctlman 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 のラッパーを使えば簡単に実現できます。アプリケーション一覧/ユーティリティ#マウントツールもご覧ください。

ノート: GNOMEKDE などの デスクトップ環境 も、udisks ラッパーを提供しているかもしれません
  • bashmount — リムーバブルメディアを一般ユーザーとして udisks2 でマウント・管理する bash スクリプトです。
https://github.com/jamielinux/bashmount || bashmountAUR
  • udiskieudisks2 オートカウンター。オプションで通知機能、トレイアイコン、パスワード保護された LUKS デバイス のサポートを提供。詳しくは udiskie wiki を見てください
https://github.com/coldfix/udiskie || udiskie
  • udisksvm — GUI udisks2 のラッパーで Python3 で書かれ、Qt5 フレームワークを使用しています。リムーバブルデバイスのマウント、アンマウント、CD/DVD のイジェクトをマウスクリックで行えます。詳しくは README ファイルを見てください。
https://github.com/berbae/udisksvm || udisksvmAUR
  • udevil — Includes devmon, が含まれており、udisksudisks2に互換性があります。
https://github.com/IgnorantGuru/udevil || udevil
ノート: devmonudevilpmount が SUID 権限を持っていない場合、マウントに udisksudisks2 しか使いません(この順番で。)このパーミッションを削除するには、root で chmod -s /usr/bin/udevil を実行してください。

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"

上記のルールを作成するとデスクトップに sda1sda2 が表示されなくなります。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 を参照。

参照