+ -
当前位置:首页 → 问答吧 → 通过gnome-volume-manager自动挂载u盘与光盘

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

时间:2007-01-10

来源:互联网

虽然在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结果是
代码:
/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

代码:
 File systems ---> DOS/FAT/NT Filesystems --->
 <*> VFAT (Windows-95) fs support
 (936) Default codepage for FAT
 (gb2312) Default iocharset for FAT
原文见:http://pinker.3322.org/?p=47

作者: arping   发布时间: 2007-01-10

现在用submount,比较小巧。

作者: vincent339   发布时间: 2007-01-10

谢谢了,马上试试!

作者: ldh168   发布时间: 2007-01-11

http://zh.gentoo-wiki.com/HOWTO_%E8%...B8%AD%E6%96%87

作者: xep007   发布时间: 2007-01-11

引用:
作者: 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年的

作者: arping   发布时间: 2007-01-11

多谢楼上各位,搞定了。
引用:
(gb2312) Default iocharset for FAT
我现用的是utf8。原来是cp936,乱码。

作者: ldh168   发布时间: 2007-01-11