|
|
我的系统是fedora 8,默认安装,当我用普通用户登录时,插入usb不能自动挂载,即使把他加入hal,dbus,avahi组后都不行,最后连加入root组都试过了,还是不行,能够检测到usb设备就是不能自动挂载;后来我用root用户登录试了下,尽然能够自动挂载,郁闷!!
后来我在/etc/udev//rules.d文件夹中加了一条规则100-usb.rules后就能实现自动挂载,但是没法在已挂载图标上右键选择卸载,觉得不太方便,所以想问一下如何使用hal,让普通用户能够自动挂载。
100-usb.rules的内容如下(得自论坛的大大):
KERNEL=="sd[b-z]", NAME="%k", SYMLINK+="usb%m", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", SYMLINK+="usb%n", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mkdir -p /media/%E{ID_MODEL}_%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", PROGRAM=="/sbin/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,noexec,nodev,noatime,iocharset=gb2312,utf8,codepage=936,umask=000 /dev/%k /media/%E{ID_MODEL}_%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mount -t auto -o iocharset=gb2312,utf8,codepage=936,umask=000,rw,noauto,noexec,nodev,noatime /dev/%k /media/%E{ID_MODEL}_%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/umount -l /media/%E{ID_MODEL}_%k"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rmdir /media/%E{ID_MODEL}_%k", OPTIONS="last_rule"
/etc/dbus-1/system.d/hal.conf的内容如下:
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- This configuration file specifies the required security policies
for the HAL to work. -->
<!-- Only root or user haldaemon can own the HAL service -->
<policy user="haldaemon"> <allow own="org.freedesktop.Hal"/>
</policy>
<policy user="root">
<allow own="org.freedesktop.Hal"/>
</policy>
<!-- Allow anyone to invoke methods on the Manager and Device interfaces -->
<policy context="default">
<allow send_interface="org.freedesktop.Hal.Manager"/>
<allow send_interface="org.freedesktop.Hal.Device"/>
<allow receive_interface="org.freedesktop.Hal.Manager"
receive_sender="org.freedesktop.Hal"/>
<allow receive_interface="org.freedesktop.Hal.Device"
receive_sender="org.freedesktop.Hal"/>
<allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
<allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
<allow receive_interface="org.freedesktop.Hal.Device.SystemPowerManagement"
receive_sender="org.freedesktop.Hal"/>
<allow receive_interface="org.freedesktop.Hal.Device.LaptopPanel"
receive_sender="org.freedesktop.Hal"/>
<allow receive_interface="org.freedesktop.Hal.Device.Volume"
receive_sender="org.freedesktop.Hal"/>
<allow receive_interface="org.freedesktop.Hal.Device.Volume.Crypto"
receive_sender="org.freedesktop.Hal"/>
</policy>
<!-- Default policy for the exported interfaces -->
<policy context="default">
<deny send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
<deny send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
<deny send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
<deny send_interface="org.freedesktop.Hal.Device.Volume"/>
<deny send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
</policy>
<!-- This will not work if pam_console support is not enabled -->
<policy at_console="true">
<allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
<allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
</policy>
<!-- You can change this to a more suitable user, or make per-group -->
<policy group="jackson">
<allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
<allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
<allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
</policy>
<policy user="jackson">
<allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
<allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
<allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume"/>
<allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
</policy>
</busconfig>
谢谢joint和gecll的帮助,问题终于解决了,只要把consolekit服务打开就行了,但是我要重启一次才能生效,起初就因为没有这样做而没起作用(即使我已用服务配置工具启动了该服务)。 |
|