gnome-mount はまだ発展途上ぽい

gnome-mount は罠だらけだった

"iPod のマウント - だらりな。" では結局 udev + mount でやったのだけど、これってデスクトップ・ユーザ的には不必要な努力を強いられてるって感じがして、やっぱり gnome-mount のほうでマウント・オプションを指定するのが良いんじゃないかと思いやってみた……ら、これが罠だらけだったのだった。
まず、関係がありそうなパッケージのヴァージョンを再度書いておくと、gnome-volume-manager 2.17.0-2, gnome-mount 0.6-1+b2, hal 0.5.9.1-2 というところ。
iPod のプロパティ画面のイメージももう一度。

罠その 1: マウント・ポイントは /media 以下のみ可。

"Mount Point" のところに "/mnt/ipod" とか入れると下のイメージのようなエラーが出る。

man gnome-mount してよく読んでみると、マウント・ポイントは /media 以下のみ可能で、しかも /media/ipod にマウントしたい場合は "ipod" とのみ指定する必要があるようなのだった。
ただ、Google してみると "Bug #107668 “Setting an invalid mount point can make a removeabl...” : Bugs : gnome-mount package : Ubuntu" なんてのが出てきて、valid な指定であるかどうかを入力時にチェックしたりするようになるぽいので、近い将来に消えそうな罠ではある。あと、"Mount point:" ではなく "Mount point in /media:" と表示されるようになるぽい。

罠その 2: エラーが出るとマウントに失敗して、ディヴァイスのプロパティにアクセスできなくなる。

エラーが出た場合の fallback がないので、ふつうにマウント失敗になり、つまりディヴァイスのプロパティにアクセスできなくなって、誤った設定を修正しようにも gconf-editor などからやるほかなくなる。しかも、マウントに失敗しても iPod のほうは "接続を解除しないでください" といってる状態になるので、これを解消するには eject /dev/sdb とかしなければならない。
これも罠その 1 と同じく "Bug #107668 “Setting an invalid mount point can make a removeabl...” : Bugs : gnome-mount package : Ubuntu" に報告があるんだけど、こちらはとりあえず wish list ということで、すぐに直る感じではない。

罠その 3: マウント・オプションはコンマ区切りでなくスペース区切りで入力しなければならない。

これは個人的にはひっかからなかったのだけど、コンマ区切りで入力すると罠その 2 が待ちかまえている。

罠その 4: 指定可能なマウント・オプションがすごくわかりにくい。

指定したいマウント・オプションをとりあえず全部入れてみると、下のイメージのようなエラーが出た。

"iPod のマウント - だらりな。" で /etc/fstab に書いたマウント・オプション "async,noauto,nodev,noexec,rw,nosuid,user,dmask=022,fmask=133,codepage=932,iocharset=utf8" のうち、gnome-mount が受けつけてくれるのは noexec、dmask=022、fmask=133、codepage=932、iocharset=utf8、flush だけだった。他のをひとつでも指定すると罠その 2 直行。
マウント・オプションのうちなにが指定可能でなにが指定不可能なのか、どこかにまとまってるはずだと Google してみたら、"Bug #110865 “GNOME mounter rejects needed mount option” : Bugs : hal package : Ubuntu" に /usr/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi を見たらいいとあった。しかし、これは見にくすぎる。さらに調べてみて、以下のようにすればいいとわかった。
まず、マウント・オプションを指定したいヴォリューム (Volume) の UDI (Unique Device Identifier) を調べる。一番上に貼った iPod のプロパティ画面のイメージを見ればわかるように、このヴォリュームの UUID は "2218-4220" (もちろん、これはうちの場合)。この UUID を使って UDI を調べる。

$ hal-find-by-property --key volume.uuid --string 2218-4220
/org/freedesktop/Hal/devices/volume_uuid_2218_4220

UDI は "/org/freedesktop/Hal/devices/volume_uuid_2218_4220" と判明。この UDI から指定可能なマウント・オプションを調べる。

$ hal-get-property --udi /org/freedesktop/Hal/devices/volume_uuid_2218_4220 --key volume.mount.valid_options
ro sync dirsync noatime nodiratime noexec quiet remount exec utf8 shortname= codepage= iocharset= umask= dmask= fmask= uid= flush

一度にやるなら、こんな感じ。

$ hal-get-property --udi `hal-find-by-property --key volume.uuid --string 2218-4220` --key volume.mount.valid_options
ro sync dirsync noatime nodiratime noexec quiet remount exec utf8 shortname= codepage= iocharset= umask= dmask= fmask= uid= flush

とにかく、これでなんとかわかった。mount で指定可能なマウント・オプションが gnome-mount でもそうだとは限らず、また、ディフォルトで指定されるマウント・オプションが、指定不要なのではなく指定不可だったりするのだった。
しかし、UI が整備されてないのはツラすぎる。せめてこのリストを表示しておいてほしい。

罠その 5: マウント・オプションを指定すると、なにも指定しないときにディフォルトでついてた uid=<自分の UID> の指定が消える。

マウント・オプションをなにも指定しないときには、ヴォリュームまるごと自分を owner としてマウントされる (uid が自動で指定される) のだけど、ひとつでも指定すると root を owner としてマウントされてしまう。つまり、ひとつでもマウント・オプションを指定する場合は uid も自分で指定しないとダメ。そうしないと、自分の場合、iPod に書きこめなくなる。
これはバグといっていい気がする。GConf はユーザごとの設定になるので決め打ちして問題ないけど、uid の指定が特にない場合は勝手につけてくれてもよさげ。

罠その 6: "取り出し" 時によくエラーが出る。

これは罠じゃなくふつうにバグなんだろうけど、"取り出し" 時によくエラーが出る。

下のようなのが画面右下に出ることもある。

というところで、gnome-mount でいろいろ指定するやりかたはちょっと時期尚早なのかなぁと思い、やっぱり昨日の方法でいくことにした。

GConf ツリーのどこに設定は格納されるか。

ディヴァイスのプロパティから指定したマウント・オプションなどの設定は、うちの場合 /system/storage/volume/_org_freedesktop_Hal_devices_volume_uuid_2218_4220 以下に格納された。メモとして残しておく。