「Udisks」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
1行目: 1行目:
 
[[Category:ハードウェア検出とトラブルシューティング]]
 
[[Category:ハードウェア検出とトラブルシューティング]]
 
[[en:Udisks]]
 
[[en:Udisks]]
  +
[[it:Execute on USB insert]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|udev|udev}}
+
{{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}}) は [[D-Bus|D-Bus]] によって必要の応じて起動するので、明示的に有効にする必要はありません ({{ic|man udisksd}} や {{ic|man udisks-daemon}} を参照)。
+
''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) ===
   
 
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行目:
 
}}
 
}}
   
=== udisks2: /media にマウント ===
+
=== /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 イメージをマウントできるようにします。アンマウントした時は、ループデバイスは [[udev|udev]] によって消されます。
+
このコマンドはループデバイスを作成して 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: 物理的な取り出しボタンが動作しない ===
+
=== 物理的な取り出しボタンが動作しない (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) ===
   
 
一定期間後 ''udisks'' はデバイスを再マウントしたりデバイスに''ポーリング''します。このことによって、ドライブをフォーマットしたり、[[仮想マシン]]でドライブを共有したり、{{ic|--detach}} でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。
 
一定期間後 ''udisks'' はデバイスを再マウントしたりデバイスに''ポーリング''します。このことによって、ドライブをフォーマットしたり、[[仮想マシン]]でドライブを共有したり、{{ic|--detach}} でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。
   
特定のデバイスのポーリングを無効化するには、次を実行:
+
特定のデバイスのポーリングを無効化するには、次を実行 (CD/DVD デバイスの場合):
   
# udisks --inhibit-polling /dev/sd''X''
+
# udisks --inhibit-polling /dev/sr''0''
   
 
全てのデバイスで無効化するには:
 
全てのデバイスで無効化するには:

2015年8月16日 (日) 14:31時点における版

関連記事

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

インストール

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

udisksd (udisks2) と udisks-daemon (udisks) は 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 ラッパーを使うことでデバイスの自動マウントは簡単に行うことができます。アプリケーション一覧#マウントツールファイルマネージャの機能#マウントも参照。

Devmon

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

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

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

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

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"

上記のルールを作成するとデスクトップに 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 を参照。

参照