由于 fc3 内核默认 fat32 文件系统字符编码是 ascii,如果优盘的文件名包含中文,那么在转换时会出问题,应用程序就会失去响应。具体的表现有多种,比如桌面假死,关机时提示无法卸载分区等等
解决的办法是在挂载时,根据语言环境 locale 的值,使用挂载参数。如果是 UTF-8 那么就用 mount -o utf8,如果是 GB* 那么就用 mount -o iocharset=cp936。但是这样繁琐地手动挂载就失掉了 FC3 的好处。正确的解决办法,是添加自己的配置文件,我的是这样
你先cd /usr/share/hal/fdi/95userpolicy/进入此目录然后新建storage-policy.fdi,
在用vi /usr/share/hal/fdi/95userpolicy/storage-policy.fdi
在里边输入以下代码:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
你先cd /usr/share/hal/fdi/95userpolicy/进入此目录然后新建storage-policy.fdi,
在用vi /usr/share/hal/fdi/95userpolicy/storage-policy.fdi
在里边输入以下代码:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="@block.storage_device:storage.removable" bool="true">
<merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
<merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
<merge key="volume.policy.mount_option.users" type="bool">true</merge>
<merge key="volume.policy.mount_option.utf8" type="bool">true</merge>
</match>
<match key="@block.storage_device:storage.hotpluggable" bool="true">
<merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
<merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
<merge key="volume.policy.mount_option.users" type="bool">true</merge>
<merge key="volume.policy.mount_option.utf8" type="bool">true</merge>
</match>
</device>
</deviceinfo>
<device>
<match key="@block.storage_device:storage.removable" bool="true">
<merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
<merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
<merge key="volume.policy.mount_option.users" type="bool">true</merge>
<merge key="volume.policy.mount_option.utf8" type="bool">true</merge>
</match>
<match key="@block.storage_device:storage.hotpluggable" bool="true">
<merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
<merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
<merge key="volume.policy.mount_option.users" type="bool">true</merge>
<merge key="volume.policy.mount_option.utf8" type="bool">true</merge>
</match>
</device>
</deviceinfo>
原理正如上面所说,hal 在收到优盘插入的通知时,将读取这些 storage policy 配置文件。在改写 /etc/fstab 时,将用到配置文件中的数据,将这些 mount_option 全部加入 fstab 中去。在做上面的步骤时先运行:/etc/init.d/haldaemon/ stop 停了他
测试效果
测试效果的办法简单得很,但是不要急着插入优盘,而是应当先运行 service haldaemon start
如果你不想自动,而只想挂一次的话可以这样做:有些人的电脑一开始都实现自动挂载。这样的话当你的 MP3连接电脑时你要先umount 他如果这一点没有发现的话你可以先在命令行里输入mount看一下有没有自动mount上去。确定之后就先umount /dev/sdb1 然后在mount上去做法如下:
mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/mp3
就可以实现解决乱码的问题啦
