LinuxSir.cn,穿越时空的Linuxsir!

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

搞定gnome-mount,NTFS卷自动挂载不再郁闷。

[复制链接]
发表于 2006-7-11 17:38:04 | 显示全部楼层 |阅读模式
FC5来了,问题也来了。在FC4下实现自动挂载的fstab-sync被dump掉了,变成了gnome-mount。每次插上ntfs的移动硬盘的时候,都会跳出来一个恼人的对话框,告诉你“你没有权限访问磁盘”。然后你还得su -c "umount /dev/sda1",再su -c "mount -t /dev/sda1 /media/sda1 -o user,nls=utf8",麻烦死了。因为gnome-mount也是比较新的玩意,所以连一个文档都找不到,加上gnome-mount自己的标准还没有最终确定,所以这让我非常郁闷。(根据这里的说法,gnome-mount将不再使用fdi,而使用gconf,以后甚至还能在UI,比如Nautilus下设置,这样就方便多了,前景非常好。)

然后,我就在Linux-fans里面求助,在wall_john的的帮助下,得到了解决办法。(其实我之前就在wall_john的的blog里面找到了这篇文章,但是因为懒得重编软件而没有使用——想找一个更加适合懒人的办法。

因为在学习使用ybuild,所以,今天顺便就弄一下那个软件包。经过一番努力,终于搞定了!呵呵。先说说方法吧:

1. 到wall_john的blog里下载gnome-mount-0.4-ntfs-mount.patch;
2. 到fedora下载服务器下载gnome-mount的src.rpm;
3. 安装源码包
  1. # rpm -ivh gnome-mount-0.4-5.src.rpm
复制代码
4. 修改spec文件
  1. # vi /usr/src/redhat/SPECS/gnome-mount.spec
复制代码
修改如下几处,添加行时不要包括行号:
(1)增加了第10行:Patch2: gnome-mount-0.4-ntfs-mount.patch
(2)增加了第33行:%patch2 -p0 -b .ntfs-mount
  1.       1 Summary: Mount replacement which uses HAL to do the mounting
  2.       2 Name: gnome-mount
  3.       3 Version: 0.4
  4.       4 Release: 5
  5.       5 License: GPL
  6.       6 Group: Applications/System
  7.       7 Source: %{name}-%{version}.tar.gz
  8.       8 Patch0: gnome-mount-0.4-drive-mount.patch
  9.       9 Patch1: gnome-mount-0.4-no-media.patch
  10.      [b]10 Patch2: gnome-mount-0.4-ntfs-mount.patch[/b]
  11.      11 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
  12.      12 BuildRequires: hal-devel >= 0.5.5 gtk2-devel >= 2.8.0 dbus-devel >= 0.31
  13.      13 Requires: hal >= 0.5.7
  14.      14 Requires: dbus >= 0.60
  15.      15
  16.      16 %description
  17.      17 A replacement for the mount, umount and eject commands that
  18.      18 uses HAL to do all the heavy lifting.
  19.      19
  20.      20 %package devel
  21.      21 Summary: Development files for gnome-mount
  22.      22 Group: Development/Libraries
  23.      23
  24.      24 %description devel
  25.      25 Development files for gnome-mount
  26.      26
  27.      27 %prep
  28.      28 rm -rf $RPM_BUILD_ROOT
  29.      29
  30.      30 %setup -q
  31.      31 %patch0 -p0 -b .drive-mount
  32.      32 %patch1 -p0 -b .no-media
  33.      [b]33 %patch2 -p0 -b .ntfs-mount[/b]
  34. ……
  35. ……
复制代码
5. 修改patch文件
  1. # cp gnome-mount-0.4-ntfs-mount.patch /usr/src/redhat/SOURCES/
  2. # vi /usr/src/redhat/SOURCES/gnome-mount-0.4-ntfs-mount.patch
复制代码
因为直接用于源代码的patch并不能直接用于rpm包的编译,所以我根据另外两个patch文件,小小的修改了一下。仅仅修改了头部几行。差别请自行对照原文件。
代码如下:
  1. Index: src/gnome-mount.c
  2. ===================================================================
  3. RCS file: /cvs/gnome/gnome-mount/src/gnome-mount.c,v
  4. retrieving revision 1.17.0
  5. diff -u -r1.17.0 gnome-mount.c
  6. --- src/gnome-mount.c   Jul 11 2006 14:28:51 -0000      1.17.0
  7. +++ src/gnome-mount.c   Jul 11 2006 14:50:25 -0000
  8. @@ -587,6 +587,8 @@ volume_mount (const char *udi, LibHalVol
  9.         char *key;
  10.         gboolean ret;
  11.         const char *fstype;
  12. +    char umaskbuf[64];
  13. +    char *umask;
  14.         ret = FALSE;
  15. @@ -637,7 +639,7 @@ volume_mount (const char *udi, LibHalVol
  16.                 snprintf (uidbuf, sizeof (uidbuf) - 1, "uid=%u", getuid ());
  17.                 g_ptr_array_add (options, uidbuf);
  18. -       } else if (strcmp (fstype, "vfat") == 0) {
  19. +       } else if (strcmp (fstype, "vfat") == 0 || strcmp (fstype, "ntfs") == 0) {
  20. /*
  21.   * Ugh, flush is not upstream yet.. better not add it...
  22.   *
  23. @@ -651,6 +653,14 @@ volume_mount (const char *udi, LibHalVol
  24.                         snprintf (uidbuf, sizeof (uidbuf) - 1, "uid=%u", getuid ());
  25.                         g_ptr_array_add (options, uidbuf);
  26.                 }
  27. +
  28. +        /*if (opts & MOUNT_UMASK)*/ {
  29. +            if (umask = libhal_device_get_property_string(hal_ctx, udi,
  30. +                            "volume.policy.mount_option.umask", NULL)) {
  31. +                snprintf(umaskbuf, sizeof (umaskbuf) - 1, "umask=%s", umask);
  32. +                g_ptr_array_add (options, umaskbuf);
  33. +            }
  34. +        }
  35.         } else if (strcmp (fstype, "iso9660") == 0) {
  36.                 if (opts & MOUNT_UID) {
  37.                         snprintf (uidbuf, sizeof (uidbuf) - 1, "uid=%u", getuid ());
复制代码
6. 开始build RPM包
  1. # cd /usr/src/redhat/SPECS/
  2. # rpmbuild -ba gnome-mount.spec
复制代码
如果你的开发工具和devel包比较全的话,编译是不会有问题的。编译结束后可以在 /usr/src/redhat/RPMS/i386/ 目录下找到编译好的rpm,在 /usr/src/redhat/SRPMS/ 下可以找到src.rpm包。
7. 安装rpm
  1. # rpm -ivh gnome-mount-0.4-5.i386.rpm --force
复制代码
8. 配置gnome-mount
配置很简单,wall_john大侠已经帮我们把脚本都写好了:
  1. # mkdir /usr/share/hal/fdi/policy/95userpolicy/
  2. # vi 10-storage-methods.fdi
复制代码
添加如下内容,并保存:
  1. <?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
  2. <deviceinfo version="0.2">
  3.   <device>
  4.     <match key="volume.fsusage" string="filesystem">
  5.       <match key="volume.fstype" string="ntfs">
  6.         <merge key="volume.policy.mount_option.umask" type="string">0222</merge>
  7.         <!--merge key="volume.policy.mount_option.umask=0222" type="bool">true</merge-->
  8.         <append key="volume.mount.valid_options" type="strlist">umask=</append>
  9.       </match>
  10.     </match>
  11.     <match key="block.is_volume" bool="true">
  12.       <merge key="volume.ignore" type="bool">false</merge>
  13.     </match>
  14.   </device>
  15. </deviceinfo>
复制代码
大侠解释说:
  1. 顺便说一下,上面的fdi文件第一个大match处理ntfs的读取权限,
  2. 第二大match使本机硬盘的分区也能自动挂载。
复制代码
9. 个人喜好配置
重启系统后,你会看见硬盘上所有Linux可以识别的空间都被挂载了。插上移动硬盘试试,顺利挂载!

但是桌面上乱糟糟的一堆,成何体统啊!
$ gconf-editor
找到/apps/nautilus/desktop/分支,volumes_visible项,去掉前面的复选框,桌面上清静了!双击桌面上的“计算机”图标,嘿,这些挂载的分区好端端的躺在里面呢!另外,你也可以发现多了一个“位置-可移动介质”子菜单,里面有被gnome-mount挂载的所有的分区,怎么样,不错吧。(看下面的效果图)

如果你不想自动挂载硬盘上所有分区,你就直接把 /usr/share/hal/fdi/policy/95userpolicy/10-storage-methods.fdi 里面第二个大match注释掉或者删除掉。

如果你不想麻烦,你可以直接下载我编译好的rpm包。
在  http://ersaclarke.5upan.com/  的Linux目录下。
或者到我的网站下载:
gnome-mount-0.4-5.i386.rpm
gnome-mount-0.4-5.src.rpm
gnome-mount-0.4-ntfs-mount.patch
gnome-mount.spec

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2006-7-11 17:53:30 | 显示全部楼层
不错不错
不过我还是习惯挂载到固定的目录
回复 支持 反对

使用道具 举报

发表于 2006-7-12 00:01:13 | 显示全部楼层
倒,还不如写一个shell脚本来的容易。。。。:P
回复 支持 反对

使用道具 举报

发表于 2006-7-12 00:26:07 | 显示全部楼层
强烈支持!!请楼主想想办法,能提交到 fedora-cn 的软件仓库里就好了。
桌面上多几个盘符也不是什么大问题,几乎所有的发行版都是把windows分区的盘符堆在桌面上。如果想清爽,建议不装windows。
回复 支持 反对

使用道具 举报

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

本版积分规则

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