Ajout de périphériques USB à une machine virtuelle sous Xen

Comme sur le logiciel VirtualBox d’Oracle, Xen permet de ponter un périphérique USB présent sur la machine hôte pour le rendre disponible sur une des machines virtuelles.

Affichons la liste des périphériques USB connectés à la machine. Cette liste nous donnera le Vendor et Product ID de chaque périphérique USB.
lsusb

Voici dans mon cas le résultat obtenu.
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 003: ID 043d:0051 Lexmark International, Inc. Laser Printer
Bus 004 Device 002: ID 03f0:6004 Hewlett-Packard DeskJet 5550
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 10d5:5000 Uni Class Technology Co., Ltd
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Il suffit ensuite d’ajouter au fichier de configuration de la machine virtuelle (« /etc/xen/mon-vm.cfg » par exemple) les lignes suivantes en remplaçant xxxx par la valeur Vendor du périphérique et yyyy par son Product ID (dans mon cas 043d pour xxxx et 0051 pour yyyy pour avoir l’imprimante Lexmark disponible sur la machine virtuelle).
usb = 1
usbdevice = "host:xxxx:yyyy"

Il se peut qu’un argument (« tablet ») soit déjà déclaré pour la directive « usbdevice ». Il faut absolument le laisser si la machine dispose d’un accès VNC sous peine d’avoir des problèmes de synchronisation entre la souris virtuelle de VNC et la souris physique. D’après pas mal d’articles sur Internet, une limitation dans les scripts de Xen empêcherait de pouvoir déclarer une liste de périphériques USB … Et après tests, je confirme que ces dires … Dommage ! Une mise à jour permettra peut-être un jour de le faire … Il n’est donc pas possible d’avoir pour le moment une ligne ressemblant à ceci :
usbdevice = [ "tablet", "host:043d:0051", "host:03f0:6004" ]

Pour plus d’informations, voir : Virtuatopia.com