So, ich habe nun mal noch ein wenig recherchiert und rumprobiert - allerdings nur in einer Lucid Virtual-Box, so dass ich das Skript nicht vollständig überprüfen kann.
Dieser Teil hier in z.B. einer /etc/udev/rules.d/99_vboxautousb.rules
funktioniert auf alle Fälle. Damit wird beim Anstecken eines USB-Sticks ein Skript gestartet:
DRIVERS=="usb-storage",IMPORT{program}="usb_id --num-info --export %p", RUN+="/etc/udev/vboxusbstorage.sh"
Diese Zeile sorgt dafür, dass beim Anstecken das Skript vboxusbstorage.sh
im Verzeichnis /etc/udev/
gestartet wird, dabei wird in den Umgebungsvariablen allerhand Informationen zum angesteckten USB-Gerät gesetzt. Siehe dazu hier.
Diese Informationen stehen dem Skript vboxusbstorage.sh
nun zur Auswertung zur Verfügung, welche in der Funktion attach_storage()
Anwendung finden. Dort sorgt die Zeile
set `/sbin/lsusb -d ${ID_VENDOR}:${ID_MODEL}| sed 's/:.*//g'`
dafür, dass mittels lsusb -d
und sed
über die ID_VENDOR und ID_MODEL aus den Umgebungsvariablen, die Busnummer sowie die Gerätenummer herausgefiltert werden.
Über diese Information lässt sich der Stick nun ansteuern, denn unterhalb des Verzeichnisses /dev/bus/usb
befinden sich jeweils Unterverzeichnisse mit einer dreistelligen Nummer, die für den entsprechenden Bus stehen. Jedes Busverzeichnis enthält dann wiederum eine Datei mit einer dreistelligen Nummer für das/die am Bus angesteckten USB-Geräte:
while [ ! -z "$1" ]; do case $1 in Bus) shift address="/dev/bus/usb/$1" #steuert das Bus-Verzeichnis an ;; Device) shift address=${address}"/$1" #wählt das Gerät am Bus aus ;; esac shift done
Mit dem so ermittelten Pfad kann man nun auf den USB-Stick zugreifen und ihn direkt ohne Filter in die VB weiterreichen:
su - root -c "VBoxManage controlvm winxp usbattach"
Siehe dazu hier. Dabei muss winxp
durch den Namen der entsprechenden VB ersetzt werden. Damit sollte Dein Problem gelöst sein.
Da ich wie gesagt in einer VB getestet habe, habe ich nur mittels echo
bis einschließlich zu
set `/sbin/lsusb -d ${ID_VENDOR}:${ID_MODEL}| sed 's/:.*//g'`
den Variablenwert überprüft. Also meine letzte Kontrollanweisung ist:
echo $1 > /home/tester/Desktop/test.txt
Allerdings hakte es beim mir an dieser Stelle. Eigentlich müsste als Ausgabe etwas in der Form:
Bus nnn Device xxx
ausgegeben werden. Stattdessen erhalte ich aber einen leere Textdatei. An den Umgebungsvariablen ID_VENDOR und ID_MODEL liegt es nicht, diese können noch zuvor richtig verifiziert werden.
Gruß, Martin