自動でマウントする時にEUC-JPでマウントしたい
上の番組を見ながら七転八倒していましたが、やっと完成。以下まとめ。間違ってたら教えて下さい。
以下参考URL。
http://cclub.cc.tut.ac.jp/~pakuchan/hoge/2005/7/19
http://t-munu.phys.s.u-tokyo.ac.jp/aso/linux/CF-R3-FC3.html#hald%A4%CB%A4%E8%A4%EB%A5%AA%A1%BC%A5%C8%A5%DE%A5%A6%A5%F3%A5%C8%A4%CE%B5%F3%C6%B0%A4%F2%CA%D1%A4%A8%A4%EB
Fedoraのいくつかだったか知りませんがUSBとかCD-ROMとかそういうメディアが勝手にマウントされるようになりました。これ自体は喜ぶべきことなのですが、日本語な私達にはちょっと問題があります。日本語名のファイルが文字化けしちゃうんですよね。
で、これを改善するために昔のように/etc/fstabを弄っても意味がありません。/etc/fstabの冒頭のコメントにあるように、
This file is edited by fstab-sync - see 'man fstab-sync' for details
ということなのでfstab-syncが書きこんでしまうために毎回書き変わってしまいます。
で、どうすればいいかというと、fstab-syncのmanにもあるようにHALの設定を弄る必要があります。
By default, the /usr/share/hal/fdi/policy/10osvendor/10-storage-policy.fdi file speci-
fies the policy - this file should never be edited by the system administrator as it
might get updated by the OS vendor for security updates. Instead, system- or site-spe-
cific rules can be put in the /etc/hal/fdi/policy/ directory as separate files.
ということで、HALの設定は/usr/share/hal/fdi/policy/10osvendor/につらつらと書いてあります。
ま、ここを直接弄ってもいいんですけど、"this file should never be edited"とのことなので、/etc/hal/fdi/policyにファイルを作ることにしましょう。
今回やりたいのはとにかくなんでもいいので、vfatなファイルシステムのパーティションの文字コードをeuc-jpに指定することです。こうするためには、以下のようなXMLが必要になります。
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- --> <deviceinfo version="0.2"> <device> <match key="block.is_volume" bool="true"> <match key="volume.fsusage" string="filesystem"> <match key="volume.fstype" exists="vfat"> <merge key="volume.policy.mount_option.iocharset=euc-jp" type="bool">true</merge> </match> </match> </match> </device> </deviceinfo>
最初に「blockがvolumeで、volumeがfilesystemとして利用され、valueのfilesystemがvfatの場合」をmatchエレメントを使って示しています。そして「iocharset=euc-jpをmount optionに指定する」をmergeエレメントを使って示しています。
ま、他のファイルシステムでも、エンコーディングにしたい場合には御自由にどうぞ。
でこの内容を/etc/hal/fdi/policy以下のファイルに書き込みます。
Linuxのご多分に漏れず先頭の数字に意味があるようなので、"10-storage-policy.fdi"では駄目で、"90-storage-policy.fdi"というファイル名にしたところうまくいきました。
無事書き終わったらHALのdaemonプロセスを再起動します。
> /etc/init.d/haldaemon restart
で設定ファイルが有効になります。確認してみますか。
VFATなパーティションが存在するUSBなディスクがLinuxに認識されていることが前提です。
> lshal | grep volume.policy volume.policy.mount_option.iocharset=euc-jp = true (bool)
という行が出ていれば、無事設定が有効になっています。
残念ながらそのままでは現在マウントされているパーティションに設定が反映されないので、USBディスクを抜き刺ししてみて下さい。
> mount | grep sdb1 /dev/sdb1 on /media/USBDISK type vfat (rw,nosuid,nodev,_netdev,iocharset=euc-jp,user=toge)
こうなっていればうまくいった証拠です。めでたしめでたし。