|
看大家都用HAL了,我也顺便看看。今天正好有时间。搜索了无数网页后,基本上搞定了。
这部分是添加fstab 记录。第二部分是自动加载。
一开始用,有3个主要问题:
1。managed参数不被mount识别。需要patch!
2。中文不被支持。主要体现在需要加入 iocharset 等参数。
3。安全问题,普通用户无法mount等。参数 exec, users 等的修改。
解决方案的步骤:
1。自动添加记录。
A. 按照 LFS/BLFS 安装HAL,DBUS等。
B. 给 util-linux 打补丁,重装一次。经测试util-linux-2.12.r也可以用这个补丁。
主要是给mount加上对managed参数的支持。该参数是HAL用的。
- --- util-linux-2.12a/mount/mount.c.sopwith 2004-03-04 20:28:22.000000000 -0500
- +++ util-linux-2.12a/mount/mount.c 2004-07-16 16:50:18.792814782 -0400
- @@ -191,6 +191,8 @@
- { "diratime", 0, 1, MS_NODIRATIME }, /* Update dir access times */
- { "nodiratime", 0, 0, MS_NODIRATIME }, /* Do not update dir access times */
- #endif
- + { "kudzu", 0, 0, MS_COMMENT }, /* Silently remove this option (backwards compat use only - deprecated) */
- + { "managed", 0, 0, MS_COMMENT }, /* Silently remove this option */
- { NULL, 0, 0, 0 }
- };
复制代码
C. 修改/添加 HAL 的 policy 文件。
在 /usr/share/hal/fdi/policy 建立目录 95userdirectory
然后95目录在里边添加文件 95-user-policy.fdi。内容如下:
- <?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
- <deviceinfo version="0.2">
- <!-- User specif policies merged onto computer root object -->
- <device>
- <match key="info.udi" string="/org/freedesktop/Hal/devices/computer">
- <merge key="storage.policy.default.mount_option.exec" type="bool">false</merge>
- <merge key="storage.policy.default.mount_option.pamconsole" type="bool">false</merge>
- </match>
- <match key="volume.fstype" string="vfat">
- <merge key="volume.policy.mount_option.users" type="bool">true</merge>
- <merge key="volume.policy.mount_option.quiet" type="bool">true</merge>
- <merge key="volume.policy.mount_option.sync" type="bool">false</merge>
- <merge key="volume.policy.mount_option.codepage=936" type="bool">true</merge>
- <merge key="volume.policy.mount_option.iocharset=utf8" type="bool">true</merge>
- <merge key="volume.policy.mount_option.dmask=022" type="bool">true</merge>
- <merge key="volume.policy.mount_option.fmask=033" type="bool">true</merge>
- <merge key="volume.policy.mount_option.uid=1000" type="bool">true</merge>
- <merge key="volume.policy.mount_option.gid=100" type="bool">true</merge>
- </match>
- </device>
- </deviceinfo>
复制代码
里边的 uid , gid, iocharset 等参数的内容,自己修改。我去掉了默认的exec和pamconsole。因为exec不安全,pamconsole不被识别。
D.重启 HAL。
/etc/rc.d/init.d/haldaemon restart
E. 测试。
插一个USB盘,就可以看到fstab里边多了一条记录,而且/media目录里边多了一个usbdisk目录。
相关的日志:
user.log:
fantasy scsi.agent[2009]: disk at /devices/pci0000:00/0000:00:02.1/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0
fantasy fstab-sync[2079]: added mount point /media/usbdisk for /dev/sdk1
fantasy kernel: usb 1-2: USB disconnect, address 11
fantasy fstab-sync[2163]: removed mount point /media/usbdisk for /dev/sdk1
fstab里边自动出现的记录:
/dev/sdk1 /media/usbdisk vfat users,noauto,gid=100,uid=1000,fmask=033,dmask=022,iocharset=utf8,codepage=936,quiet,managed 0 0
3。自动加载的设置。
A。首先下载 ivman 并且安装。(我用的是 ivman-0.6.6)
./configure --prefix=/usr --sysconfdir=/etc
make
make install
B。bootscripts 里边加入 ivman 的启动。以下是部分截取。
- case "${1}" in
- start)
- boot_mesg "Starting Ikke's Volume Manager (ivman) ..."
- loadproc /usr/bin/ivman -s
- ;;
- stop)
- boot_mesg "Stopping Ikke's Volume Manager (ivman) ..."
- killproc /usr/bin/ivman
- ;;
- restart)
- ${0} stop
- sleep 3
- ${0} start
- ;;
- status)
- statusproc /usr/bin/ivman
- ;;
- *)
- echo "Usage: ${0} {start|stop|restart|status}"
- exit 1
- ;;
- esac
复制代码
C。设置 ivman 的文件。
IvmConfigActions.xml:当设备插入拔出的时候,Ivman 就会参照这个文件运行相应的命令。
IvmConfigBase.xml:设置 Ivman 的基础属性。如启动延迟,初次扫描等。
IvmConfigConditions.xml:硬件情况出现变化的时候,就参考这个文件里边的内容。比如按下电源键的时候,hal产生一个信号,ivman 可以捕捉到,运行相应的命令。
IvmConfigProperties.xml: 设备属性变化的时候,就参考这个文件。
具体的请看文件里边的例子和 man 文档。
我的文件都打包在附件里边,解压后放在 /etc/ivman 里边。主要实现的是 cdrom/USB 插入的时候,自动mount。USB 拔出的时候最好手动 umount,CDROM 则不用,可以自动umount。
转载请保持完整,并注明出处。
by 终极幻想@LinuxSir.Org |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|