Bonjour

Pour une démonstration, je dois mettre en place plusieurs XPs virtualisés sur un seul ordinateur. L'utilisateur dois pouvoir se connecter en selectionnant sur quel XP virtualisé il veut travailler. Un fois connecté seul le XP sur la machine virtuelle sélectionnée démarre en mode plein écran. Lorsque que l'on ferme le XP virtualisé, on revient au login de l'hôte.

Les applications et OS utilisés sont:

Ubuntu Karmic Koala comme hôte
VirtualBox 3.1.2 comme machine virtuel (Pas la version OSE)
XP SP3 comme invités

Je n'entrerai pas dans les détails de la configuration de ma démonstration, mais si quelqu'un a des questions, ca me feras plaisir de l'aider.

Le tout fonctionne à merveille sauf un petit problème, je dois me connecter en administrateur pour administrer toute nouvelle clé USB pour qu'elle soit reconnue dans les XPs invités. Une fois reconnue, cette clé peut être utilisé par tous les utilisateurs sur les XPs virtualisés sans problème. J'aimerais que les nouvelles clés USB soit automatiquement reconnues dans les XPs virtualisés quand celles-ci sont branchées. J'ai trouvé un début de solution sur le net que je vais vous expliquer.

Premièrement je dois ajouter une règle udev qui permet d'éxecuter un script a chaque clé USB inserrée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
DRIVERS=="usb-storage", IMPORT{program}="/lib/udev/usb_id --num-info --export %p", RUN+="/etc/udev/vboxusb.sh"
Ensuite je dois créer ce script qui seras éxecuté a chaque nouvelle clé USB insérée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/sh

attach_storage()
{
  set `/usr/sbin/lsusb -d ${ID_VENDOR}:${ID_MODEL}| sed 's/:.*//g'`
  while [ ! -z "$1" ]; do
    case $1 in
      [Bb]us) shift; BUSID=$1; shift;;
      [Dd]evice) shift; DEVICEID=$1; shift;;
      *) shift;;
    esac
  done
  ADDRESS=/proc/bus/usb/$BUSID/$DEVICEID

  set `ps ax -f | grep VBoxSDL | grep -v grep`
  NAME=$1
  while [ ! -z "$1" ]; do
    case $1 in
      --startvm) shift;VM=$1;;
      *) shift;;
    esac
  done

  if [ ! -z "$ADDRESS" ]; then
    su - $NAME -c "VBoxManage controlvm $VM usbattach $ADDRESS" > /etc/udev/test.txt 2> /etc/udev/error.txt
  fi
}

case $DEVNAME in
  /dev/sd[a-z][1-9])
  attach_storage;
  ;;
  /dev/sd[a-z])
  attach_storage;
  ;;
esac
Ce script fonctionne à merveille sauf à la ligne avec VBoxManage. VBoxManage me retourne l'erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
VirtualBox Command Line Management Interface Version 3.1.2
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

ERROR: Could not find a USB device with address '/proc/bus/usb/001/005'
Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), component Host, interface IHost, callee nsISupports
Context: "FindUSBDeviceByAddress(Bstr(a->argv [2]), dev.asOutParam())" at line 553 of file VBoxManageControlVM.cpp
Si quelqu'un a une solution pour règler ce problème, ca serais le bienvenue.

J'ai trouvé un autre problème en écrivant ces lignes, mais je crois que c'est plus un problème de udev, je le posterai dans le forum approprié si c'est le cas. Lors du démarrage de l'hôte, udev ne charge pas ma règle, je dois donc redémarrer udev. Mais si je redémarre udev, lorsque je me déconnecte d'un XP en machine virtuel, je perd le controle du clavier et de la souris (il sont tous les 2 en USB). je suis bon alors pour un redémarrage de l'hôte.

Merci