[Ubuntu]openbox下U盘自动挂载

来源:互联网 发布:云资源管理平台软件 编辑:程序博客网 时间:2024/05/22 07:06
我使用的系统是Ubuntu12.04+openbox,没有使用gnome等集成环境,所以没有U盘自动挂载功能。从网上搜索了一下资料:


+ubuntu下usb自动挂载(ext4,ntfs,vfat,exfat格式的u盘) http://hi.baidu.com/blue_egg/item/db33a02074ca301c2b0f1c90


见到手动配置U盘自动挂载主要是使用udev功能。搜索了一下udev的资料:


+udev 维基百科,自由的百科全书 http://zh.wikipedia.org/wiki/Udev
+udev (简体中文) https://wiki.archlinux.org/index.php/Udev_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)


感觉udev比较复杂(因为是用于管理所有设备,而不单单是U盘),所以只配置自己正在用的U盘能自动挂载就算了。


插上U盘后,用fdisk命令检查出放在 /dev/sdb1 中:
$ sudo fdisk -l
/dev/sdb1   *          63    15130079     7565008+   b  W95 FAT32
但后来不知什么原因又变成 /dev/sdc1 ...


建立规则文件:/etc/udev/rules.d/10_usbkey.rules,内容为:
KERNEL=="sd[b-z][0-9]",SUBSYSTEM=="block",ATTR{partition}=="1",RUN+="/sbin/usbmount.sh %k"


需要注意几个地方:
RUN中待执行的命令,一开始我是放在/home中的,结果没反映,后来改放到/root或/sbin中才生效。
一开始以为U盘BUS属性是usb不会错的,结果不是。
如果不加上ATTR{partition}=="1",RUN中的命令会执行两次,一次是因为匹配到/dev/sdc, 第二次是匹配到/dev/sdc1,使用udevadm info --name=/dev/sdc1 --attribute-walk命令找到/dev/sdc1中有ATTR{partition}=="1",加入规则中,这样RUN中的命令就只运行一次了。


但是,后来发现有ATTR{partition}=="1"时,只有add事件(U盘插入),没有remove事件(U盘拨出),一开始 /sbin/usbmount.sh 的内容是这样写的:
echo "$ACTION $1" >> /home/g/script/run.txt
所以能看到哪些事件和设置路径被触发。


然后从规则中删掉ATTR{partition}=="1",又发现RUN中的命令只运行一次了,并且add和remove事件都有(其它我什么都没改过,实难搞懂)。
所以,最后的规则文件内容是:
KERNEL=="sd[b-z][0-9]",SUBSYSTEM=="block",RUN+="/sbin/usbmount.sh %k"


一些参考资料:
+[原]简述udev的自定义规则 http://www.linuxfly.org/post/540/
+怎样编写udev规则 http://blog.csdn.net/leisure512/article/details/6683715


编写/sbin/usbmount.sh脚本,让U盘按/dev中的名称进行挂载(比如sdc1):
#!/bin/bash


# echo "$ACTION $1" >> /home/g/script/run.txt
# exit
len=${#1}
# eg. sdc
if [ $len == 3 ]; then
exit
fi
# eg. scd1


if [ $ACTION == "add" ]; then
mkdir "/media/usb$1" -p
mount -t auto -o rw,umask=000 "/dev/$1" "/media/usb$1"
fi


if [ $ACTION == "remove" ]; then
umount "/media/usb$1"
rmdir "/media/usb$1"
fi


给usbmount.sh加上可执行权限:
chmod a+x usbmount.sh


+通过udev自动挂载U盘的方法 http://blog.csdn.net/unbutun/article/details/3838196


现在插拨U盘后都能自动挂载和卸载了。并且挂载的目录按/dev中的设置路径命名,同时插多个U盘时不会冲突。


我还希望插入U盘后可以自动运行一些脚本,设想是:
在U盘一个固定的目录建立ukey文件,文件内记录待执行的脚本名称,如果发现这个标识文件,则到/home/script/usbautorun/目录下找对应的脚本文件执行。


在/sbin/usbmount.sh脚本挂载命令添加一行:
/home/g/script/usbautorun/mount.sh $1


然后编写mount.sh脚本:
#!/bin/bash


if [ -f "/media/usb$1/zjq/ukey" ]; then
ukey=`cat /media/usb$1/zjq/ukey`
path="/home/g/script/usbautorun/$ukey.sh"
if [ -f $path ]; then
echo `$path /media/usb$1/`
fi
fi


这样,就可以通过U盘的ukey文件指定自动执行 usbautorun/ 目录下的脚本文件了。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一只眼睛变红了怎么办 黑眼球缺了一角怎么办 眼镜度数配高了怎么办 孩子近视800度可怎么办 儿童眼睛近视怎么办才能恢复正常 小孩眼睛近视怎么办才能恢复正常 3岁宝宝近视怎么办啊 6个月婴儿近视怎么办 近视眼的人老了怎么办 一千多度的近视怎么办 近视镜片磨花了怎么办 眼镜镜片磨花了怎么办 戴眼镜鼻梁有印怎么办 狗狗发烧怎么办最有效 狗狗感冒怎么办最有效 狗狗发烧去医院怎么办 眼睛里长了虫子怎么办 吃了没熟的猪肉怎么办 没熟的鸡肉吃了怎么办 狗狗大便有绦虫怎么办 吃了有虫的猪肉怎么办 米猪肉吃了会怎么办 吃了鱼的寄生虫怎么办 鱼身体里有线虫怎么办 幼猫半夜一直叫怎么办 猫半夜4点叫不停怎么办 眼睛里长了黄斑怎么办 眼睛周围长小疙瘩怎么办 眼睛被手机砸了怎么办 眼睛被东西砸了怎么办 眼睛被打了一下怎么办 眼睛被树枝伤了怎么办 眼球被打了一下怎么办 眼睛黄有血丝是怎么办 上眼皮有异物感怎么办 20岁眼周围皱纹怎么办 才22岁眼睛皱纹怎么办 眼周围发干皱纹怎么办 眼周围淤血肿了怎么办 每到秋季就咳嗽怎么办 左肾泥沙样结石怎么办