LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1184|回复: 5

通过gnome-volume-manager自动挂载u盘与光盘

[复制链接]
发表于 2007-1-9 22:38:33 | 显示全部楼层 |阅读模式
虽然在linux下挂载轻而易举,但是实现自动挂载曾经还是一件比较麻烦的事情。这里介绍利用gnome-volume-manager实现自动挂载的主要流程,不敢妄称完美,但的确可以达到与windows自动挂载相同的效果。

linux发现并自动挂载可移动设备的原理比较繁琐,简单描述如下:

   1. 当插入可移动设备时,内核首先发现,并通知hotplug和udev,hotplug负责加载相应的模块(如usb-storage),udev负责创建相应的设备(如/dev/sda1);
   2. udev再将消息传给hald守护程序,并告诉它相关挂载的信息,例如权限信息等;
   3. hald知道后,通过一系列精心编写的规则文件(就是传说中的xxx-policy.fdi),将如何挂载的信息通过dbus这个通道发出去;
   4. gnome-volume-manager订阅dbus的消息,调用gnome-mount来实现可移动设备的挂载与卸载。KDE在kde-volume-manager未发布之前也采用gnome-volume-manager。

更详细的过程请参考这里和这张流程图

根据以上流程,不难知道自动挂载的安装和配置过程:

   1. 编译内核,让其支持hotplug和可移动设备。
   2. 安装udev,hotplug,hal,dbus,gnome-mount,gnome-volume-manager。
   3. 启动hotplug,hal 和 dbus 服务,并将这些服务加入到开机自启动列表
   4. 添加"gnome-volume-manager --sm-disable"这一行到System->preferences->Sessions->Startup programs,并重新登录gnome,这样可以保证gnome-volume-manager随gnome启动。
   5. 删除或者注释掉/etc/fstab中有关可移动设备挂载的部分,因为hald的script会检查/etc/fstab中的内容,如果已经挂载或者存在相关选项,就忽略该设备。
   6. 将想要使用自动挂载的用户加入plugdev组,"gpasswd -a someuser plugdev",因为非plugdev组的普通用户不能使用自动挂载功能。

检验方法:

    插入usb存储设备或者将光盘放入光驱,如果桌面上出现相应的图标,并弹出窗口,则说明自动挂载成功。

缺陷及解决办法:

挂载u盘时,如果u盘是vfat的格式,gnome-volume-manager-2.15.0的mount结果是
  1. /dev/sda1 on /media/disk type vfat (rw,noexec,nosuid,nodev,shortname=winnt,uid=1000)
复制代码

我曾经在传说中的fdi文件里设置过iocharset和codepage,lshal命令显示这些设置已被hald读取,但是gnome- volume-manager的mount结果依然如此,这说明它没有读取policy中的指定选项,这样的结果是某些locale(例如我的 zh.CN_GBK)下挂载的目录下中文文件是乱码。其实更科学的应该根据用户自己的locale来自动选择。

解决办法就是在编译内核的时候,指定vfat文件系统的默认编码:iocharset=gb2312,codepage=936

  1.     File systems ---> DOS/FAT/NT Filesystems --->
  2.     <*> VFAT (Windows-95) fs support
  3.     (936) Default codepage for FAT
  4.     (gb2312) Default iocharset for FAT
复制代码


原文见:http://pinker.3322.org/?p=47
发表于 2007-1-10 18:57:40 | 显示全部楼层
现在用submount,比较小巧。
回复 支持 反对

使用道具 举报

发表于 2007-1-10 20:29:04 | 显示全部楼层
谢谢了,马上试试!
回复 支持 反对

使用道具 举报

发表于 2007-1-10 20:59:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-11 09:29:26 | 显示全部楼层
Post by vincent339
现在用submount,比较小巧。


Warning: Submount has been masked as of December 12, 2006, and is scheduled for removal from portage on January 2, 2007. Submount is broken with latest kernel, and is no longer maintained.

submount太老了,它的最新更新是在2004年的
回复 支持 反对

使用道具 举报

发表于 2007-1-11 11:30:24 | 显示全部楼层
多谢楼上各位,搞定了。
(gb2312) Default iocharset for FAT
我现用的是utf8。原来是cp936,乱码。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表