From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wout Mertens Date: Tue, 07 Jan 2003 12:37:04 +0000 Subject: RE: My first usb storage automount script :) Message-Id: List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: linux-hotplug@vger.kernel.org Hmmm, Only one way to find out :) The script is real easy to install, just copy it to /etc/hotplug, and run the line that registers it (you can find it inside the script). I think the issue will be if the card reader sends usb plug/unplug events or not... if it doesn't, I really wouldn't know how to do it. Actually, there's an easier way to test: Plug in the reader, have hotplug enabled, and watch /var/log/messages to see what the kernel thinks is happening. If you see messages every time you plug/unplug a card, you're lucky, and it will probably work. Good luck, Wout. On Fri, 3 Jan 2003, Eddie Shi wrote: > Hi, > Does anyone know whether this will work on the following situation: > > 1. The usb-storage device (ie USB card reader) is alreay plugged in the > system. > > 2. No CF/MS/SM/SD are plugged in yet. > > Given the above assumption , Will the system automount the CF when the = CF > card is plugged in ? Or We still need to manually enter " mount -t vfat > /dev/sda1 /cf ". > > I guess what I would like to see is to have something like CD's automou= nt > when a CD is inserted. > > > Thanks > > > Eddie > -------------------------------------------------------------------------= --- > ------------------ > Hi there, > > I just wanted to share what I hacked up through some frustration. It's a > script that will automatically mount usb devices that are attached. > > It ties in to the hotplug architecture as closely as possible, without > changing anything. So then I subscribed to this list to announce it. > > Of course, that's when I discovered > http://users.actrix.co.nz/michael/usbmount.html by Michael Hamilton. > > So I'll first give a rundown of differences: > My solution: > - only mounts the device that was just inserted (with some luck) > - is called automount_usb, so that, by changing the usb.usermap, it gets > called every time a device is inserted and not just the first time > - creates remover scripts that have /bin/sh as the only dependency > - creates nicely readable names as mount points > - supports devices with multiple partitions > - is really small > > But Michael's solution: > - makes KDE icons > - is easier to read > > So, please have a look at the attached code, and tell me what you think > about the device detection code. Michael, if you read this, we could > perhaps merge the two efforts and get all the features. > > Also, let's start a thread on making a gui.agent script that gets called > by the hotplug scripts. It would notify the user of hotplug events. > I feel that it should be called with the same environment as the other > agents, with an extra HOTPLUG_PATH variable indicating the path on which > the device is available, if applicable. > > This could then be used by KDE, Gnome etc to notify the user. > > Cheers, > > Wout. > > PS: /Please/ change usb.agent so that it creates /var/run/usb/ before > pointing remover scripts there... > ["automount_usb" (TEXT/PLAIN)] > > #!/bin/sh > # Automount hotplugged usb storage devices. Copyright (c) 2002, Wout Mert= ens > # This script is released under the GPL. > > # The usb devices will be mounted for the console user. > # To work, this needs: > # - kernel support: > # - hotplugging, /proc, usbdevfs and devfs > # - as modules: usb-storage, sd_mod, scsi_mod > # - filesystems that will be mounted, like vfat > # - ls, tr, echo, awk, basename, stat, grep, mount, umount, mkdir, rm, sed > > # TODO Fix usb.agent so that /var/run/usb gets created if missing > # TODO Some rigid way of getting this run. Currently, I do > # grep usb-storage /lib/modules/*/modules.usbmap|sed > 's/usb-storage/automount_usb/' \ > >> /etc/hotplug/usb.usermap # TODO Lots of testing > # TODO nice way of setting options > # TODO Also, the error checking should probably be more robust > # TODO Some clean way of handling disconnects while writing. > # TODO Make a generic event system for GUIs that shows that something was > # mounted for the user. Proposal: /etc/hotplug/gui.agent gets > # called with ACTION=ADd/remove, NAME=3Dnice_name, PATH=3Dnew_path, etc. > # Not just for new storage, scanners and so on are useful too... > > # Dump debug > mesg () { > #return > /usr/bin/logger -t $0 "$*" > } > > # Figure out the device to mount > NUM=3D`basename $DEVICE|sed 's/^0*//'` > SERIAL=3D`awk -F=3D '/^T:.*/{if($0~/Dev#=3D *'$NUM' \ > /){t=3D1}else{t=3D0}}t=3D1&&/SerialNumber/{print $2;exit}' /proc/bus/usb/= devices` > \ > PRODUCT=3D`awk -F=3D '/^T:.*/{if($0~/Dev#=3D *'$NUM' > /){t=3D1}else{t=3D0}}t=3D1&&/Product/{print \ > $2;exit}' /proc/bus/usb/devices` # Use the serial or the product name to > find which \ > scsi host was just created if [ -n "$SERIAL" ]; then > SCSI=3D`grep -l $SERIAL /proc/scsi/usb-storage-*/*|tail -1` > elif [ -n "$PRODUCT" ]; then > SCSI=3D`grep -l $PRODUCT /proc/scsi/usb-storage-*/*|tail -1` > fi > > mesg Device No. $NUM, serial $SERIAL, name $PRODUCT, path $SCSI > > # Mount it > if [ -n "$SCSI" ]; then > # The name of the file is the number of the SCSI host > SCSI=3D`basename $SCSI` > PARTS=3D`ls /dev/scsi/host$SCSI/*/*/*/part*` > MOUNTPATH=3D/mnt/usb/`echo $PRODUCT|tr '[ /?*"]' _` > if [ -e "$MOUNTPATH" ]; then > if mount|grep "$MOUNTPATH">/dev/null; then > # TODO I'm too lazy to write proper collision avoidance code > MOUNTPATH=3D"$MOUNTPATH".$$ > fi > fi > # I'm hoping that mount ignores options that don't apply to the fs > # These options should prevent abuse and make it writeable for the > # console user. > MOUNTOPTS=3D'-osync,nosuid'`stat -c',uid=3D%u,gid=3D%g' /dev/console` > mesg Mounting $PARTS on $MOUNTPATH, options $MOUNTOPTS > > [ `echo $PARTS|wc -w` -eq 1 ] && MOUNTDIRECT=3D1 > REMOVE> for i in $PARTS; do > if [ -n "$MOUNTDIRECT" ]; then > T=3D$MOUNTPATH > else > T=3D$MOUNTPATH/`basename $i` > fi > mkdir -p $T > if mount $MOUNTOPTS $i $T; then > REMOVE=3D"umount $T;$REMOVE;rmdir $T" > else > rmdir $T > fi > done > > # Create remover > echo "#!/bin/sh" > $REMOVER > echo $REMOVE | sed 's/;;/;/g' >> $REMOVER > chmod +x $REMOVER > else > exit 1 > fi > > > > > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net > Linux-hotplug-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel > ------------------------------------------------------- This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld =3D Something 2 See! http://www.vasoftware.com _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel