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