I started this as a question but seem to have solved it. I'll post the solution nevertheless as it may be useful, and someone may have some helpful comments or corrections to add. I'm using VB 4.0.4 on Ubuntu 10.10 with extpack installed. I'm interested in having USB sticks generally automount in a Windows guest so that a hardened non-geek Windows user can feel at home. With a general USB filter defined the USB devices can only be manually mounted from within the running guest. With a specific filter defined they do automount, but a filter would need to be added for each device likely to be used.
I've found a couple of past posts over 2 years old that offer udev scripts to do this. This previous post is the more elegant but this is also claimed to work.
The trouble with these is that they rely on the existence of /proc/bus/usb which was deprecated and has now disappeared in modern distros, notably Ubuntu. The USB attach command used in these scripts:
VBoxManage controlvm <vm-name> usbattach <UUID|address>
used an "address" that came from/proc/bus/usb. The command:
VBoxManage list usbhost
gives information about USB devices on the host, for example for a device not captured by the guest and mounted or unmounted on the host showed:
Code: Select all
UUID: 453ded46-1c13-4f80-abf4-9de1cc2bb7d4
VendorId: 0x058f (058F)
ProductId: 0x6387 (6387)
Revision: 1.0 (0100)
Manufacturer: JetFlash
Product: Mass Storage Device
SerialNumber: OM8GXQQ9
Address: sysfs:/sys/devices/pci0000:00/0000:00:04.1/usb2/2-5//device:/dev/vboxusb/002/004
Current State: Busy
Code: Select all
DRIVERS=="usb-storage", IMPORT{program}="usb_id --num-info --export %p", RUN+="/etc/udev/vbox-automount-usb.sh"
Code: Select all
#!/bin/bash
attach_storage()
{
set `/usr/sbin/lsusb -d ${ID_VENDOR}:${ID_MODEL}| sed 's/:.*//g'`
while [ ! -z "$1" ]; do
case $1 in
Bus) shift
busdevice="$1"
;;
Device) shift
busdevice=${busdevice}"/$1"
;;
esac
shift
done
if [ ! -z "$busdevice" ]; then
address=$(VBoxManage list usbhost | grep "Address:" | grep $busdevice | sed -e 's/Address://' -e 's/^[ \t]*//')
if [ ! -z "$address" ]; then
su - vbox_user -c "VBoxManage controlvm vm_name usbattach $address"
fi
fi
}
case $DEVNAME in
/dev/sd[a-z])
attach_storage;
;;
esac
This also worked with two devices inserted consecutively, although on the second insertion an error message appeared about being unable to attach the device, but it went ahead and attached it anyway. This needs a bit more investigation.
cheers, Ken