LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: yuihji

udev自动挂载新解

[复制链接]
发表于 2011-2-1 12:06:45 | 显示全部楼层
Post by 沙漠之子;2127194
你的方式是怎样的?


我就是用的rox的常规方法,在/etc/fstab里设置不自动挂载,然后桌面放个快捷方式指向/media/sdb1,插上u盘,点下图标挂载,关闭目录,自动卸载。这个是在rox里面设置的。
回复 支持 反对

使用道具 举报

发表于 2011-2-1 12:09:45 | 显示全部楼层
Post by yuihji;2127196
这个应该不行。这个 rules 的执行者应该是 root ,而登入 X 的用户不是 root 。所以不行。
具体怎样我就不知道了…


这个问题我也想到了,我后来试了RUN+="su xx -c 'export DISPLAY=:0;/usr/bin/rox /media/%E{dir_name}'",好像还是不行。
后来我试了一下用脚本,貌似可以实现插入u盘rox就*出目录。

  1. # 挂载设备
  2. ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}", RUN+="/home/flay/bin/myusb %E{dir_name}"
复制代码

  1. $cat ~/bin/myusb
  2. #!/bin/sh

  3. DIR=$1

  4. su flay -c "export DISPLAY=:0;rox /media/$DIR"
复制代码


脚本写的很简单额,另外想问下,这个直接拔会不会有危险,我还是比较喜欢关闭目录,自动卸载。
回复 支持 反对

使用道具 举报

发表于 2011-2-1 14:40:25 | 显示全部楼层
有办法显示中文卷标没?
回复 支持 反对

使用道具 举报

发表于 2011-2-1 14:54:14 | 显示全部楼层
额,刚读了一下udev的规则,原来是要用全路径
如此就不需要用外部脚本了直接如下:

  1. # 挂载设备
  2. ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}", RUN+="/bin/su flay -c 'export DISPLAY=:0;/usr/bin/rox /media/%E{dir_name}'"
复制代码


经测试,这样也是可以实现插入u盘打开目录
回复 支持 反对

使用道具 举报

发表于 2011-2-5 20:53:03 | 显示全部楼层
想搞定中文卷标,但是如下的设置没生效,不知怎么弄
ENV{ID_FS_TYPE}=="vfat|ntfs",  PROGRAM="/bin/bash -c "echo -e '$env{ID_FS_LABEL_ENC}'"|/usr/bin/iconv -f gbk -t utf8",  ENV{dir_name}="%c"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-6 17:14:56 | 显示全部楼层
Post by 沙漠之子;2127437
想搞定中文卷标,但是如下的设置没生效,不知怎么弄
ENV{ID_FS_TYPE}=="vfat|ntfs",  PROGRAM="/bin/bash -c "echo -e '$env{ID_FS_LABEL_ENC}'"|/usr/bin/iconv -f gbk -t utf8",  ENV{dir_name}="%c"
似乎不可行。
我试了试:
  1. # /sbin/blkid -o udev -p /dev/sdb1
  2. ID_FS_UUID=A709-5903
  3. ID_FS_UUID_ENC=A709-5903
  4. ID_FS_VERSION=FAT32
  5. ID_FS_TYPE=vfat
  6. ID_FS_USAGE=filesystem
  7. ID_PART_ENTRY_SCHEME=dos
  8. ID_PART_ENTRY_TYPE=0x7
  9. ID_PART_ENTRY_NUMBER=1

  10. # /sbin/blkid -o udev -p /dev/sdb2
  11. ID_FS_LABEL=windows7
  12. ID_FS_LABEL_ENC=windows7
  13. ID_FS_UUID=722DB6C5312903CB
  14. ID_FS_UUID_ENC=722DB6C5312903CB
  15. ID_FS_TYPE=ntfs
  16. ID_FS_USAGE=filesystem
  17. ID_PART_ENTRY_SCHEME=dos
  18. ID_PART_ENTRY_TYPE=0xb
  19. ID_PART_ENTRY_FLAGS=0x80
  20. ID_PART_ENTRY_NUMBER=2
复制代码

也就是 blkid 这个软件根本不认得中文卷标。至少得换个软件。
回复 支持 反对

使用道具 举报

发表于 2011-2-6 17:57:05 | 显示全部楼层
$ -> sudo /sbin/blkid -o udev -p /dev/sdb1
ID_FS_LABEL=ɳĮ֮__
ID_FS_LABEL_ENC=ɳĮ֮\xd7\xd3
ID_FS_UUID=0134-14F6
ID_FS_UUID_ENC=0134-14F6
ID_FS_VERSION=FAT32
ID_FS_TYPE=vfat
ID_FS_USAGE=filesystem
ID_PART_ENTRY_SCHEME=dos
ID_PART_ENTRY_TYPE=0xc
ID_PART_ENTRY_FLAGS=0x80
ID_PART_ENTRY_NUMBER=1
$ -> echo -e "ɳĮ֮\xd7\xd3"|iconv -f gbk -t utf8
沙漠之子

貌似想这样设置不行
ENV{ID_FS_TYPE}=="vfat|ntfs", PROGRAM="/bin/bash -c "echo -e '$env{ID_FS_LABEL_ENC}'"|/usr/bin/iconv -f gbk -t utf8", ENV{dir_name}="%c

PROGRAM执行外部命令,%c返回外部命令执行的结果 但是没成功
回复 支持 反对

使用道具 举报

发表于 2011-2-9 17:39:37 | 显示全部楼层
Post by flay0303;2127215
我就是用的rox的常规方法,在/etc/fstab里设置不自动挂载,然后桌面放个快捷方式指向/media/sdb1,插上u盘,点下图标挂载,关闭目录,自动卸载。这个是在rox里面设置的。


能介绍一下具体怎么操作吗?rox的。
回复 支持 反对

使用道具 举报

发表于 2011-2-11 08:59:08 | 显示全部楼层
Post by crazyrain;2127693
能介绍一下具体怎么操作吗?rox的。


  1. $sudo mkdir /media/sdb1
  2. $cat /etc/fstab
  3. #for flash disk
  4. /dev/sdb1   /media/sdb1  auto    iocharset=utf8,rw,user,noauto  0   0

复制代码


注意要设置noauto,一般u盘都是vfat吧,如果是ntfs的参数要改一下
然后在桌面放个.desktop文件,执行rox /media/sdb1
mount和umount命令在rox里面默认已经设置好了
可以参考http://rox.sourceforge.net/Manual/Manual/Manual.html#id2504732

其实我最最喜欢的还是puppy的那种挂载方式,这个也算是模仿了下,就是仿的不怎么高级额,呵呵
puppy的方式,应该是用udev+pmount实现的,插上u盘,桌面会出来一个图标,点一下挂载,并且会出现一个标识表示已经挂载,右键可以卸载。
回复 支持 反对

使用道具 举报

发表于 2011-2-13 00:24:02 | 显示全部楼层
udev的规则文件语法,有没有比较详细讲解的文档啊?wiki看得一头雾水
回复 支持 反对

使用道具 举报

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

本版积分规则

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