Cómo conectar un dispositivo USB a una máquina virtual alojada en un sistema de virtualización VMware ESXi. En este tutorial conectamos, como ejemplo, un dispositivo X10 CM15 a un servidor ESXi y lo transferimos a una máquina virtual Linux CentOS alojada en este servidor. Este ejemplo sirve para cualquier dispositivo USB (pendrive, impresora, escáner, smartphone, TV, lector SD, etc.).
- Requisitos para conectar dispositivo USB a VMware ESXi.
- Conectar y comprobar dispositivo USB a servidor físico VMware ESXi.
- Asignar dispositivo USB a máquina virtual en VMware ESXi.
- Comprobar dispositivo USB conectado en máquina virtual Linux CentOS 6.
Requisitos para conectar dispositivo USB a VMware ESXi
En primer lugar necesitaremos disponer de un sistema de virtualización VMware ESXi, como es lógico, con sus máquinas virtuales correspondientes, que serán el destino del dispositivo USB conectado. Físicamente conectaremos el dispositivo USB al servidor VMware ESXi y de forma virtual trasladaremos dicho dispositivo a una máquina virtual existente.
A continuación mostramos algunos artículos y tutoriales sobre cómo montar sistemas de virtualización profesional:
- Instalar VMware ESXi 5 en VMware Workstation, instalar vSphere Client.
- Virtualizar en Linux, instalar VirtualBox en Linux Ubuntu 10.10 64 bits.
- Virtualización profesional gratuita con Citrix XenServer Free Edition.
- Virtualización con Hyper-V en Microsoft Windows Server 2012.
Como también es lógico necesitaremos una máquina virtual montada sobre el sistema de virtualización, en nuestro caso usaremos una máquina virtual con el sistema operativo Linux CentOS, como ejemplo, ya que el método de detección de dispositivo USB con una máquina con Windows suele ser bastante más sencillo. A continuación mostramos cómo montar una máquina virtual o servidor físico con Linux CentOS:
Para comprobar la correcta conexión y detección del dispositivo USB en el servidor VMware ESXi necesitaremos acceder con un usuario con privilegios suficientes y necesitaremos tener habilitado el acceso mediante SSH al servidor VMware ESXi. A continuación mostramos cómo habilitar el acceso SSH a un servidor VMware ESXi:
Conectar y comprobar dispositivo USB a servidor físico VMware ESXi
En primer lugar conectaremos el dispositivo USB físicamente a uno de los conectores USB del servidor VMware ESXi:
Una vez conectado podremos comprobar si ha sido detectado correctamente por VMware ESXi, para ello nos conectaremos mediante SSH (usando cualquier cliente como PuTTY que es gratuito), introduciremos la IP del servidor ESXI y pulsaremos en «Open»:
En primer lugar usaremos el comando Linux «dmesg» para comprobar si el dispositivo USB ha sido detectado por ESXi:
dmesg
Si ha sido detectado aparecerá en los mensajes del sistema:
Devolverá:
~ #dmesg
usb 3-1: new low speed USB device using uhci_hcd and address 5
usb 3-1: New USB device found, idVendor=0bc7, idProduct=0001
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: Product: USB ActiveHome Interface
usb 3-1: Manufacturer: X10 Wireless Technology Inc
usb 3-1: usbfs: registered usb0305
usb 3-1: device is available for passthrough
usb 3-1: device is available for passthrough
usb 3-1: reset low speed USB device using uhci_hcd and address 5
usb 3-1: reset low speed USB device using uhci_hcd and address 5
Con el comando «lsusb» también podremos obtener los dispositivos USB conectados al servidor VMware ESXi:
Devolverá:
~ # lsusb
Bus 03 Device 05: ID 0bc7:0001 X10 Wireless Technology, Inc. ActiveHome (ACPI-compliant)
Bus 03 Device 01: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 08 Device 01: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 07 Device 01: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 06 Device 01: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 05 Device 01: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 04 Device 01: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 02 Device 01: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 01 Device 01: ID 1d6b:0002 Linux Foundation 2.0 root hub
Asignar dispositivo USB a máquina virtual en VMware ESXi
Una vez detectado el dispositivo en el servidor VMware ESXi ya podremos asignarlo a una máquina virtual. Para ello abriremos VMware vSphere Client, pulsaremos con el botón derecho sobre la máquina virtual a la que le asignaremos el dispositivo USB y en el menú emergente pulsaremos en «Edit Settings»:
Pulsaremos en «Add» para añadir el dispositivo USB conectado:
Seleccionaremos «USB Device»:
El dispositivo USB conectado al servidor VMware ESXi nos aparecerá en la lista, lo seleccionaremos (en nuestro caso «X10 Wireless USB ActiveHome Interface» y pulsaremos «Next»:
Pulsaremos «Finish» para establecer la asignación del dispositivo USB a la máquina virtual:
Pulsaremos «OK» para agregar el dispositivo USB a la máquina virtual:
En las tareas recientes del servidor podremos comprobar que el dispositivo se ha agregado a la máquina virtual:
Si volvemos a acceder a la configuración de la máquina virtual, seleccionando «USB 1», en la parte derecha nos mostrará el estado «Device Status: Connected»:
Comprobar dispositivo USB conectado en máquina virtual Linux CentOS 6
Una vez realizados los pasos anteriores, en la máquina virtual Linux CentOS podremos comprobar si el dispositivo USB ha sido asignado correctamente. Para ello abriremos una ventana de terminal y ejecutaremos el comando:
dmesg
Devolverá:
dmesg
usb 2-2.1: new low speed USB device number 7 using uhci_hcd
usb 2-2.1: New USB device found, idVendor=0bc7, idProduct=0001
usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-2.1: Product: USB ActiveHome Interface
usb 2-2.1: Manufacturer: X10 Wireless Technology Inc
usb 2-2.1: configuration #1 chosen from 1 choice
Con el comando «lsusb» podremos comprobar (al igual que en VMware ESXi) que el dispositivo ha sido asignado y detectado correctamente en Linux CentOS:
Devolverá:
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 007: ID 0bc7:0001 X10 Wireless Technology, Inc. ActiveHome (ACPI-compliant)
Si queremos obtener aún más información sobre el dispositivo USB conectado y detectado en Linux CentOS podremos ejecutar el comando:
lsusb -D /dev/bus/usb/002/003
(donde 002 será el Bus y 003 el Device, ambos valores devueltos en el comando anterior lsusb)
Devolverá:
lsusb -D /dev/bus/usb/002/003
Device: ID 0bc7:0001 X10 Wireless Technology, Inc. ActiveHome (ACPI-compliant)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0bc7 X10 Wireless Technology, Inc.
idProduct 0x0001 ActiveHome (ACPI-compliant)
bcdDevice 1.00
iManufacturer 1 X10 Wireless Technology Inc
iProduct 2 USB ActiveHome Interface
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 2mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 0 (Defined at Interface level)
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Device Status: 0x0001
Self Powered
Otros comandos para obtener información sobre los dispositivos USB conectados a un equipo Linux:
tail -f /var/log/vmkernel.log | grep -i USB
Devolverá algo así:
usb 3-1: USB disconnect, address 5
usb 3-1: usbfs: unregistered usb0305
usb 3-1: new low speed USB device using uhci_hcd and address 6
usb 3-1: New USB device found, idVendor=0bc7, idProduct=0001
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: Product: USB ActiveHome Interface
usb 3-1: Manufacturer: X10 Wireless Technology Inc
usb 3-1: usbfs: registered usb0306
usb 3-1: device is available for passthrough
usb 3-1: device is available for passthrough
usb 3-1: reset low speed USB device using uhci_hcd and address 6
usb 3-1: reset low speed USB device using uhci_hcd and address 6
usb 3-1: device is available for passthrough
usb 3-1: device is available for passthrough
usb 3-1: reset low speed USB device using uhci_hcd and address 6
usb 3-1: reset low speed USB device using uhci_hcd and address 6
Otro comando interesante para obtener información de los dispositivos USB es:
cat /proc/bus/usb/devices
Que nos devolverá unos datos sobre los USB conectados y el dato «Driver» muy importante para saber si nuestro dispositivo USB puede requerir de controladores (drivers) adicionales). Por ejemplo, el dispositivo conectado, un «USB ActiveHome X10 Wireless» nos muestra en «Driver» el valor «(none)», lo que quiere decir que probablemente necesite de controladores adicionales:
cat /proc/bus/usb/devices
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 34/900 us ( 4%), #Int= 3, #Iso= 0
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0001 Rev= 2.06
S: Manufacturer=Linux 2.6.32-431.3.1.el6.x86_64 uhci_hcd
S: Product=UHCI Host Controller
S: SerialNumber=0000:02:00.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0e0f ProdID=0003 Rev= 1.02
S: Manufacturer=VMware
S: Product=VMware Virtual USB Mouse
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=1ms
I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=1ms
T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=12 MxCh= 7
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0e0f ProdID=0002 Rev= 1.00
S: Product=VMware Virtual USB Hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms
T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 7 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0bc7 ProdID=0001 Rev= 1.00
S: Manufacturer=X10 Wireless Technology Inc
S: Product=USB ActiveHome Interface
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=00(>ifc ) Sub=00 Prot=00 Driver=(none)
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
E: Ad=02(O) Atr=03(Int.) MxPS= 8 Ivl=10ms
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 2.06
S: Manufacturer=Linux 2.6.32-431.3.1.el6.x86_64 ehci_hcd
S: Product=EHCI Host Controller
S: SerialNumber=0000:02:02.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
En este caso concreto, se trata de un adaptador USB a serie y efectivamente requiere de drivers adicionales, que descargaremos e instalaremos siguiendo las instrucciones del fabricamente. En este ejemplo descargaremos el dichero iplc-driver.tgz (desde www.linuxha.com/athome/common/iplcd/iplc-driver.tgz). Una vez descargado ejecutaremos los siguientes comandos para instalar el driver:
wget «http://www.absurde.org/wp-content/uploads/2011/10/iplc-2.6.36.patch_.txt»
wget «http://www.linuxha.com/common/iplcd/iplc-driver.tgz»
tar -xvzf iplc-driver.tgz
patch iplc/driver/linux-2.6/device.c < iplc-2.6.36.patch_.txt
patching file iplc/driver/linux-2.6/device.c
sed -i ‘s#linux/autoconf.h#generated/autoconf.h#’ iplc/driver/linux-2.6/device.c
sed -i ‘s##include <linux/smp_lock.h>#//#include <linux/smp_lock.h>#’ iplc/driver/linux-2.6/device.c
cd iplc/driver/linux-2.6/
make cm15a
Los drivers en Linux se suelen instalar como hemos indicado anteriormente, si bien puede variar la instalación en función del driver. Otra forma:
tar zxvf iplc-driver.tgz
cd iplc/driver/linux-2.6
make -f Makefile.cm15a
make cm15a
cd cm15a.d
insmod cm15a.ko