2011/5/27 Gonzalo Aguirre <[email protected]>:
> 2011/5/27 Alejandro Vargas <[email protected]>:
>> Bueno... se me ocurren un par de cosas. Una sería probar ejecutandolo
>> con headless y conectarse con el rdesktop-vrdp que puede redirigir
>> puertos a la máquina virtual a ver qué pasa. Y otra cosa que se me
>> ocurre sería echarle una mirada al código fuente a ver si es fácil
>> parchar el diálogo que pone al enchufar los puertos para que le de
>> "aceptar" automáticamente o algo así. ¿Has preguntado en la lista de
>> desarrollo de VirtualBox?
>
> Estaba buscando por el lugar equivocado, se puede hacer un attach del
> usb on-the-fly con
>
> $ vboxmanage controlvm 57e02909-ed21-44c5-b841-cd5527ee3ea0 usbattach
> 70e9aff9-4cd2-4445-b43f-9426d5adb5f4
>
> en mi caso en el UUID de la máquina guest que ya está en
> funcionamiento y el parámetro del usbattach es el UUID del USB que me
> da el comando
>
> $ vboxmanage list usbhost
>
> a partir de ahí es cuestión de hacer un script meterlo en /etc/udev y
> cuando se enchufe algo que largue el script.
>
> En el foro oficial me dijeron que no puede haber algo genérico porque
> me quedaría sin teclado y mouse en el host, o que tendrían un
> comportamiento un poco raro.

Ya hice el script, tuve un par de problemas raros, hasta que salió
funcionando, hice el reporte a la página oficial. De todas maneras
pongo las dos formas que hice, de las cuales una no funciona pero lo
mismo a alguien se le ocurre dónde puede estar el error.

El disparador desde /etc/udev/rules.d no me quemé mucho la cabeza y lo
hice para dispositivos de almacenamiento:

KERNEL=="sd*", RUN+="/etc/udev/vboxusb.expect"

Por el lado del script el primero que hice era un simple bash:

----------- vboxusb.sh ------------
#!/bin/sh
VM_UUID=`vboxmanage list runningvms | sed -e 's/.*{\(.*\)}/\1/'`

if [ $VM_UUID != "" ]
then
        echo agregando USB  >> /tmp/prueba-udev.log
        USB_UUID=`vboxmanage list usbhost | grep UUID | awk '{print $2}'`
        su - mi_usuario -c "/usr/bin/vboxmanage controlvm  $VM_UUID usbattach
$USB_UUID"
fi

----------- vboxusb.sh ------------

al hacer el cambio de usuario me dice que la VM_UUID está apagada, si
lo hago en una consola normal tecleando los comandos no tengo
problema. Así que decidí hacer un login y hacer los mismos comandos y
funcionó, así que decidí hacerlo con `expect' y quedó así:

----------- vboxusb.expect ------------
#!/usr/bin/expect

spawn login

expect "login:"
send "mi_usuario\r"
expect "assword:"
send "mi_clave\r"
expect "\$ "
send "VM_UUID=`vboxmanage list runningvms | sed -e
's/.*\{\\(.*\\)\}/\\1/'`&& USB_UUID=`vboxmanage list usbhost | grep
UUID | awk '{print \$2}'` && /usr/bin/vboxmanage controlvm  \$VM_UUID
usbattach \$USB_UUID\r"
expect "\$ "
send "exit\r"

exit
----------- vboxusb.expect ------------

recuerden hacer un `chmod 0700 ...' del expect que está la clave en texto plano!

Con esto funciona, pero sigo teniendo un par de problemas porque
después de unos minutos `vboxmanage list runningvms' me larga una
lista vacía (un comportamiento totalmente indeterminista), y a partir
de ahí el script explota. Tengo que investigar si este comportamiento
está relacionado con algún evento y tratar de arreglarlo. Se aceptan
sugerencias de mejora del script.

Saludos!

-- 
GA

Responder a