「Udisks」の版間の差分
(→トラブルシューティング: NTFS ファイルの作成に失敗する (ファイル名に依存)を翻訳して追加) |
|||
(3人の利用者による、間の23版が非表示) | |||
2行目: | 2行目: | ||
[[en:Udisks]] |
[[en:Udisks]] |
||
[[it:Execute on USB insert]] |
[[it:Execute on USB insert]] |
||
+ | [[ru:Udisks]] |
||
+ | [[zh-hans:Udisks]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|udev}} |
{{Related|udev}} |
||
8行目: | 10行目: | ||
{{Related|ファイルマネージャの機能}} |
{{Related|ファイルマネージャの機能}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | [ |
+ | [https://www.freedesktop.org/wiki/Software/udisks/ udisks] には、ストレージデバイスに問い合わせたり制御を行うために使われる D-Bus インターフェイスを実装した ''udisksd'' というデーモンと、デーモンを利用したりクエリを送るのに使われる ''udisksctl'' というコマンドラインツールが含まれています。 |
== インストール == |
== インストール == |
||
+ | {{Pkg|udisks2}} パッケージを [[インストール]] します。 |
||
− | ''udisks'' には互換性のない2つのバージョン、{{Pkg|udisks}} と {{Pkg|udisks2}} が存在します。''udisks'' の開発は終了しており ''udisks2'' に移行しています [http://davidz25.blogspot.be/2012/03/simpler-faster-better.html]。 |
||
− | + | {{man|8|udisksd}} は [[D-Bus]] によってオンデマンドで起動されますので、明示的に有効化する必要はありません。コマンドラインから {{man|1|udisksctl}} で制御することができます。 |
|
+ | |||
+ | {{Note|''udisks'' の開発は終了し、 ''udisks2'' に移行しました [https://davidz25.blogspot.be/2012/03/simpler-faster-better.html]. レガシーバージョンである {{AUR|udisks}} は AUR で利用できます。 ''udisks'' をオンデマンドで起動するには、 {{ic|udisks-daemon}} を使い、制御コマンドは {{ic|udisks}} です。}} |
||
== 設定 == |
== 設定 == |
||
+ | === パーミッション === |
||
− | udisks を使ってユーザーが行うことができるアクションは [[Polkit|Policykit]] によって制限されます。[[セッション]]が有効でなかったり存在しない場合は、手動で policykit を設定して下さい。以下のファイルは {{ic|storage}} グループに一般的な udisks 権限を設定します [https://github.com/coldfix/udiskie#permissions]。 |
||
+ | ユーザーが udisk を使用して実行できるアクションは、[[polkit]] で制限されます。[[一般的なトラブルシューティング#セッションのパーミッション|ユーザーセッション]] が有効でない、または存在しない場合 (例えば [[systemd/ユーザー]] サービスから udisk を制御する場合)、polkit ルールを調整してください。 |
||
− | {{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] |
+ | {{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] を参照してください。 |
− | == マウント |
+ | === デフォルトのマウントオプション === |
+ | {{ic|/etc/udisks2/mount_options.conf}} でデフォルトのマウントオプションを定義できます。ファイルが存在しない場合は作成します。組み込みのデフォルトといくつかの例は、{{ic|/etc/udisks2/mount_options.conf.example}} で確認できます。[http://storaged.org/doc/udisks2-api/latest/mount_options.html] |
||
− | [[アプリケーション一覧#Udisks|udisks ラッパー]]を使うことでデバイスの自動マウントは簡単に行うことができます。[[アプリケーション一覧#マウントツール]]や[[ファイルマネージャの機能#マウント]]も参照。 |
||
+ | オプションは、特定のファイルシステムタイプをターゲットにすることができます。たとえば、zstd 圧縮を有効にして [[btrfs]] ファイルシステムをマウントします。 |
||
− | === Devmon === |
||
+ | [defaults] |
||
− | {{pkg|udevil}} には [http://igurublog.wordpress.com/downloads/script-devmon devmon] が含まれており、''udisks'' と ''udisks2'' の両方に対応しています。以下の順番でマウントヘルパーを利用します: |
||
+ | btrfs_defaults=compress=zstd |
||
+ | {{Note|これは、対応する組み込みのデフォルトをオーバーライドします。この方法で誤ってマウントオプションを削除しないようにしてください。}} |
||
− | # [http://ignorantguru.github.io/udevil/ udevil] (SUID) |
||
− | # pmount (SUID) |
||
− | # udisks |
||
− | # udisks2 |
||
+ | == 使用方法 == |
||
− | ''udisks'' や ''udisks2'' を使ってデバイスをマウントするには、''udevil'' から SUID パーティションを取り除いて下さい: |
||
+ | リムーバブルドライブを手動でマウントする場合、例えば {{ic|/dev/sdc}} のようにします。 |
||
− | # chmod -s /usr/bin/udevil |
||
+ | $ udisksctl mount -b /dev/sdc1 |
||
− | {{Note|root で {{ic|chmod -x /usr/bin/udevil}} を実行すると devmon はデバイスの監視に ''udisks'' を使うようになります。}} |
||
+ | アンマウントするには |
||
− | {{Tip|バックグラウンドで devmon を実行して自動的にデバイスをマウントするには、{{ic|devmon@.service}} を[[systemd#ユニットを使う|有効化]]して下さい。引数にユーザー名を指定します: {{ic|devmon@''user''.service}}。サービスは[[セッション]]の外で動作するので注意してください。Polkit のルールを適切に調整するか、ユーザーセッションから {{ic|devmon}} を実行してください ([[自動起動]]を参照)。}} |
||
+ | $ udisksctl unmount -b /dev/sdc1 |
||
− | === inotify === |
||
+ | 詳しくは {{ic|udisksctl help}} をご覧ください。 |
||
− | {{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 == |
||
+ | デバイスの自動マウントは、udisks のラッパーを使えば簡単に実現できます。[[アプリケーション一覧/ユーティリティ#マウントツール]]もご覧ください。 |
||
− | === デバイスの隠匿の無効化 (udisks2) === |
||
+ | {{Note|[[GNOME]] や [[KDE]] などの [[デスクトップ環境]] も、udisks ラッパーを提供しているかもしれません}} |
||
− | Udisks2 はデフォルトで特定のデバイスをユーザーから遮蔽します。この挙動が望ましくない、または問題になる場合は、{{ic|/usr/lib/udev/rules.d/80-udisks2.rules}} を {{ic|/etc/udev/rules.d/80-udisks2.rules}} にコピーしてから、ファイルを編集し以下のセクションを削除してください: |
||
+ | * {{App|bashmount|リムーバブルメディアを一般ユーザーとして ''udisks2'' でマウント・管理する bash スクリプトです。|https://github.com/jamielinux/bashmount|{{AUR|bashmount}}}} |
||
− | {{bc|# ------------------------------------------------------------------------ |
||
+ | * {{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}}}} |
||
− | # Devices which should not be display in the user interface |
||
− | [...] |
||
− | }} |
||
+ | :{{Note|''devmon'' は ''udevil'' や ''pmount'' が SUID 権限を持っていない場合、マウントに ''udisks'' か ''udisks2'' しか使いません(この順番で。)このパーミッションを削除するには、root で {{ic|chmod -s /usr/bin/''udevil''}} を実行してください。}} |
||
− | === /media にマウント (udisks2) === |
||
+ | ==== udevadm モニター ==== |
||
− | デフォルトで、udisks2 はリムーバルドライブを {{ic|/media/}} ではなく ACL によって制御される {{ic|/run/media/$USER/}} ディレクトリにマウントします。{{ic|/media}} にマウントしたい場合は、このルールを使って下さい: |
||
+ | |||
+ | {{ic|udevadm monitor}} を使ってブロックイベントを監視し、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。古いマウントポイントは ''udisksd'' によって自動的に削除されるので、削除の際に特別な操作は必要ありません。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | #!/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 |
||
+ | </nowiki>}} |
||
+ | |||
+ | === /media にマウント === |
||
+ | |||
+ | デフォルトで、udisks2 はリムーバブルドライブを {{ic|/media/}} ではなく ACL によって制御される {{ic|/run/media/$USER/}} ディレクトリにマウントします。{{ic|/media}} にマウントしたい場合は、このルールを使って下さい: |
||
{{hc|/etc/udev/rules.d/99-udisks2.rules|<nowiki> |
{{hc|/etc/udev/rules.d/99-udisks2.rules|<nowiki> |
||
116行目: | 95行目: | ||
# See udisks(8) |
# See udisks(8) |
||
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1" |
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1" |
||
− | </nowiki> |
+ | </nowiki>}} |
− | }} |
||
− | === |
+ | === ループデバイスのマウント === |
− | ISO イメージを簡単にマウントするには、 |
+ | ISO イメージを簡単にマウントするには、以下のコマンドを使用します。 |
$ udisksctl loop-setup -r -f ''image.iso'' |
$ udisksctl loop-setup -r -f ''image.iso'' |
||
− | + | ループデバイスが作成され、ISO イメージがマウントできる状態で表示されます。アンマウントされると、ループデバイスは [[udev]] によって終了させられます。 |
|
+ | |||
+ | {{Note|これは読み込み専用のイメージをマウントします。[[QEMU]] のような生のディスクイメージをマウントするには、{{ic|-r}} フラグを削除し、{{ic|udisksctl loop-delete -b ''/dev/loop0''}} で使用後にイメージを解放してください。ループデバイスの名前に {{ic|/dev/loop0}} を代入してください}} |
||
=== 特定のパーティションを隠匿する === |
=== 特定のパーティションを隠匿する === |
||
138行目: | 118行目: | ||
KERNEL=="sda1", ENV{UDISKS_IGNORE}="1" |
KERNEL=="sda1", ENV{UDISKS_IGNORE}="1" |
||
KERNEL=="sda2", ENV{UDISKS_IGNORE}="1" |
KERNEL=="sda2", ENV{UDISKS_IGNORE}="1" |
||
+ | |||
+ | ブロックデバイス名はリブート時に変更されることがあるため、UUID ({{ic|blkid /dev/sdX}} コマンドを実行して得られたもの) を使用してパーティションやデバイス全体を隠すことも可能です。 |
||
+ | |||
+ | {{hc|# blkid /dev/sdX|2= |
||
+ | /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 設定の適用 === |
||
+ | |||
+ | 起動時とドライブ接続時に、udisksd はファイル {{ic|/etc/udisks2/''IDENTIFIER''.conf}} に保存されている設定を適用します。ここで {{ic|''IDENTIFIER''}} はそのドライブの Drive:Id プロパティの値です。現在、ATA 設定がサポートされています。利用可能なオプションについては、{{man|8|udisks}} を参照してください。これらの設定は基本的に [[hdparm]] と同じ効果を持ちますが、 udisks デーモンが自動起動されている間は永続的になります。 |
||
+ | |||
+ | 例えば、ドライブのスタンバイ・タイムアウトを 240 (20 分) に設定するには、以下を追加します。 |
||
+ | |||
+ | {{hc|1=/etc/udisks2/''DriveId''.conf|2= |
||
+ | [ATA] |
||
+ | StandbyTimeout=240 |
||
+ | }} |
||
+ | |||
+ | ドライブの DriveId を取得するには、 {{ic|1=udevadm info --query=all --name=''sdx'' {{!}} grep ID_SERIAL {{!}} sed "s/_/-/g"}} を使用してください。 |
||
+ | |||
+ | また、{{Pkg|gnome-disk-utility}} などの GUI ユーティリティを使用して設定ファイルを管理することもできます。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | === 非表示のデバイス === |
||
− | === 物理的な取り出しボタンが動作しない (udisks2) === |
||
+ | Udisks2 はデフォルトで特定のデバイスをユーザーから遮蔽します。この挙動が望ましくない、または問題になる場合は、{{ic|/usr/lib/udev/rules.d/80-udisks2.rules}} を {{ic|/etc/udev/rules.d/80-udisks2.rules}} にコピーしてから、ファイルを編集し以下のセクションを削除してください: |
||
− | バージョン 2.1.3-1 まで手動のディスク取り出しは ''udisks2'' で機能しません [https://bugs.launchpad.net/ubuntu/+source/udisks2/+bug/1168742]。対応策としては、ソフトウェアを使うか、元の ''udisks'' を使ってイジェクトしてください。 |
||
+ | {{bc|# ------------------------------------------------------------------------ |
||
− | === デバイスがアンマウントされない (udisks) === |
||
+ | # ------------------------------------------------------------------------ |
||
+ | # ------------------------------------------------------------------------ |
||
+ | # Devices which should not be display in the user interface |
||
+ | [...] |
||
+ | }} |
||
+ | === スタンバイタイマーの破損 === |
||
− | 一定期間後 ''udisks'' はデバイスを再マウントしたりデバイスに''ポーリング''します。このことによって、ドライブをフォーマットしたり、[[仮想マシン]]でドライブを共有したり、{{ic|--detach}} でデタッチしてなかったドライブを取り除くときに、予期しない動作が発生することがあります。 |
||
+ | udisks デーモンは、ドライブから定期的に [[S.M.A.R.T.]] データをポーリングしています。ポーリング間隔よりも長いスタンバイタイムアウトを持つハードディスクは、スタンバイに失敗することがあります。すでにスピンダウンしているドライブは、通常、影響を受けません。現在、{{Pkg|udisks2}} のようにポーリングを無効化したり間隔を変更する方法はないようです。[https://bugs.launchpad.net/ubuntu/+source/udisks2/+bug/1281588], [https://bugs.freedesktop.org/show_bug.cgi?id=26508] を参照してください。 |
||
− | 特定のデバイスのポーリングを無効化するには、次を実行 (CD/DVD デバイスの場合): |
||
+ | ただし、udisks2 が適用しているスタンバイタイムアウトには影響がないようです。udisks でスタンバイタイムアウトを設定するには、[[Udisks#ATA 設定の適用 (udisks2)|ATA 設定の適用 (udisks2)]] を参照してください。 |
||
− | # udisks --inhibit-polling /dev/sr''0'' |
||
+ | 他の回避策として、タイムアウトをポーリング間隔 (10分) 以下に設定するか、 {{ic|hdparm -y /dev/''sdx''}} を使って手動でスピンダウンを強制的に実行することも考えられます。 |
||
− | 全てのデバイスで無効化するには: |
||
+ | === NTFS のマウントに失敗する === |
||
− | # udisks --inhibit-all-polling |
||
+ | |||
+ | 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 で実行した {{ic|journalctl}}/{{ic|dmesg}} のカーネルログに記載されています。 |
||
+ | ntfs: (device sdXY): parse_options(): Unrecognized mount option windows_names. |
||
+ | この問題は、udisks がカーネルの ntfs ドライバを使おうとしていることで、この (デフォルトの) マウントオプションを認識していないことです。 |
||
+ | これを動作させるには、オプションの依存関係 [[NTFS-3G]] がインストールされている必要があります。 |
||
+ | |||
+ | === NTFS ファイルの作成に失敗する (ファイル名に依存) === |
||
+ | |||
+ | udisks 2.8.2 では NTFS マウントオプションに {{ic|windows_names}} が追加され、{{ic|nul}} や {{ic|screenshot 23-08-21 19:22.jpg}} のような Win32 と互換性のないファイル名が作成できないようになりました。特に、[https://wiki.archlinux.org/title/Steam/Troubleshooting#Steam_Library_in_NTFS_partition Steam Proton が初期化されなくなる] 原因となります。この動作を元に戻すには |
||
+ | |||
+ | {{hc|/etc/udisks2/mount_options.conf|2= |
||
+ | [defaults] |
||
+ | ntfs:ntfs_defaults=uid=$UID,gid=$GID |
||
+ | }} |
||
+ | 通常、ファイル名が間違っていても、アクセスしない限り Windows で問題が発生することはありません。''chkdsk'' はこれらの名前をエラーとして扱い、名前を変更したファイルをファイルシステムのルートの下にある {{ic|found.nnn}} フォルダーに移動します。 |
||
− | 詳しくは {{ic|man udisks}} を参照。 |
||
== 参照 == |
== 参照 == |
||
− | * [ |
+ | * [https://wiki.gentoo.org/wiki/Udisks gentoo wiki: udisks] |
* [http://blog.fpmurphy.com/2011/08/introduction-to-udisks.html?output=pdf Introduction to udisks] |
* [http://blog.fpmurphy.com/2011/08/introduction-to-udisks.html?output=pdf Introduction to udisks] |
2023年8月24日 (木) 13:22時点における最新版
関連記事
udisks には、ストレージデバイスに問い合わせたり制御を行うために使われる D-Bus インターフェイスを実装した udisksd というデーモンと、デーモンを利用したりクエリを送るのに使われる udisksctl というコマンドラインツールが含まれています。
目次
インストール
udisksd(8) は D-Bus によってオンデマンドで起動されますので、明示的に有効化する必要はありません。コマンドラインから udisksctl(1) で制御することができます。
設定
パーミッション
ユーザーが udisk を使用して実行できるアクションは、polkit で制限されます。ユーザーセッション が有効でない、または存在しない場合 (例えば systemd/ユーザー サービスから udisk を制御する場合)、polkit ルールを調整してください。
storage
グループに対する一般的な udisks のパーミッションについては https://github.com/coldfix/udiskie/wiki/Permissions を、より限定的な例については [2] を参照してください。Dolphin を使用している場合は、[3] を参照してください。
デフォルトのマウントオプション
/etc/udisks2/mount_options.conf
でデフォルトのマウントオプションを定義できます。ファイルが存在しない場合は作成します。組み込みのデフォルトといくつかの例は、/etc/udisks2/mount_options.conf.example
で確認できます。[4]
オプションは、特定のファイルシステムタイプをターゲットにすることができます。たとえば、zstd 圧縮を有効にして btrfs ファイルシステムをマウントします。
[defaults] btrfs_defaults=compress=zstd
使用方法
リムーバブルドライブを手動でマウントする場合、例えば /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 はリムーバブルドライブを /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 設定の適用
起動時とドライブ接続時に、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 はデフォルトで特定のデバイスをユーザーから遮蔽します。この挙動が望ましくない、または問題になる場合は、/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 デーモンは、ドライブから定期的に S.M.A.R.T. データをポーリングしています。ポーリング間隔よりも長いスタンバイタイムアウトを持つハードディスクは、スタンバイに失敗することがあります。すでにスピンダウンしているドライブは、通常、影響を受けません。現在、udisks2 のようにポーリングを無効化したり間隔を変更する方法はないようです。[5], [6] を参照してください。
ただし、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 がインストールされている必要があります。
NTFS ファイルの作成に失敗する (ファイル名に依存)
udisks 2.8.2 では NTFS マウントオプションに windows_names
が追加され、nul
や screenshot 23-08-21 19:22.jpg
のような Win32 と互換性のないファイル名が作成できないようになりました。特に、Steam Proton が初期化されなくなる 原因となります。この動作を元に戻すには
/etc/udisks2/mount_options.conf
[defaults] ntfs:ntfs_defaults=uid=$UID,gid=$GID
通常、ファイル名が間違っていても、アクセスしない限り Windows で問題が発生することはありません。chkdsk はこれらの名前をエラーとして扱い、名前を変更したファイルをファイルシステムのルートの下にある found.nnn
フォルダーに移動します。