/etc/udev/rules.d/10_local.rules:
Код: Выделить всё
#insert rule
BUS=="usb", SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="add", NAME="%k", GROUP="disk", RUN+="/etc/udev/scripts/my-flash-mount.sh add %k"
#eject rule
SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="remove", RUN+="/etc/udev/scripts/my-flash-mount.sh remove %k"
/etc/udev/my-flash-mount.sh
Код:
#!/bin/bash
# using:
# flash-mount.sh add|remove sdc1
LOG=/var/log/udev
# try to mount only partitions (sdb1) , not whole disk (sdb)
DEV=`echo $2 | sed -n '/^sd[a-z][1-9]/p'`
if [ -z $DEV ]; then exit; fi
# get dir name to mount to
# DIRTY CODE !!! FIXME
f=`mktemp`
{ for i in /media/usbdisk[0-9]*; do echo `echo $i | cut -dk -f2`; done } | sort -n | tail -1 > $f
NUM=`cat $f`
if [ $NUM == '[0-9]*' ]; then NUM=0; fi
DIR="/media/usbdisk$NUM"
# DEBUG
echo ------- >> $LOG
echo '$DEV:'$DEV >> $LOG
echo '$DIR:'$DIR >> $LOG
if [ $1 = 'add' ]; then
echo `date` >> $LOG
echo "Mounting $DEV" >> $LOG
{ if [ ! -d $DIR ]; then mkdir -m 750 $DIR; fi } >> $LOG
chown root:plugdev /media/$DEV >> $LOG
mount /dev/$DEV $DIR -t vfat -o users,dmask=007,fmask=117,utf8,noatime,quiet 2>&1 >$LOG
elif [ $1 = 'remove' ]; then
echo `date` >> $LOG
DIR=`mount | fgrep $DEV | cut -d' ' -f 3`
echo "Unmounting $DEV" >> $LOG
umount /dev/$DEV 2>&1 >> $LOG
rmdir $DIR >> $LOG
fi
Оно даже заработало и стало примонтировать вставляемые флешки, но при попытке сделать в KDE для этой флешки "Safely Remove" оно ругается:
Код: Выделить всё
Unfortunately, the device system:/media/sdb1 (/dev/sdb1) named 'selivan_flash' and currently mounted at /media/usbdisk0 could not be unmounted.
Unmounting failed due to the following error:
Device to unmount is not in /media/.hal-mtab so it is not mounted by HAL
То есть заниматься монтированием должен всё-таки hal. Как же это можно настроить?
З.Ы. Кусок скрипта про имя каталога для монтирования очень кривой
З.З.Ы. KDE 3.5.8