paskola   04-08-2026, 10:41
#1
Hola a todos, hoy en aplicaciones que nadie pidió y, que probablemente me ahorrará en promedio 3 minutos al mes, les presento una aplicación que me mantuvo ocupado un par de semanas. El propósito es sencillo: ejecutar las máquinas virtuales sin tener que entrar a VirtualBox. Sólo eso. El administrador default de VirtualBox es de por sí ya completo y buscaba tener una opción de simplemente permitiera elegir la máquina virtual y poder iniciarla o detenerla. Estoy utilizando SQLite para mantener la información de cada máquina virtual y los módulos que construí se encargan de ello. Estas son las cosas que hace:

- Recabar información de las máquinas virtuales usando VBoxManage en una Shell.
- Permite iniciar o detener máquinas virtuales.
- Cambia el estatus de cada máquina al iniciarla o detenerla.
- Permite cambiar el ícono o logo del sistema operativo de la máquina virtual.
- Permite cambiar la orientación del listado de máquinas.
– Sincroniza las máquinas para eliminar o agregar a la base de datos según sea el caso.

Por el momento solo busca máquinas virtuales de VirtualBox porque es el hipervisor que uso normalmente uso para probar cosas en mi laptop y que después pondré en producción usando Proxmox o Hyper-V.

Hay cosas que aún necesito refinar, por ejemplo la interfaz de usuario porque soy de ese selecto grupo que no puede crear una GUI decente ni aunque la vida vaya en ello.

Otro bug que no he podido resolver es que cuando se ejecuta VBoxManage en una instrucción Shell toma cerca de 1 minuto para completarse pero si VirtualBox está ejecutándose la misma tarea toma solo un par de segundos.

Y esa es mi historia, anexo una captura de como luce, una disculpa para los que tiene más idea de como hacer interfases bonitas. Cuando termine de resolver los bugs comparto el código si es de interés para el respetable público.

Un abrazo.
Archivos adjuntos
jguardon   04-08-2026, 11:20
#2
Pues una herramienta útil que seguramente le servirá a mas de uno.

La interfaz gráfica no me parece un horror, sino sencilla pero funcional. Y lamentablemente el tiempo de arranque de VBoxManage no creo que sea un problema de gambas, sino de la propia herramienta. Puedes probar a cargarla en segundo plano al arrancar tu aplicación para cuando lances la VM que ya haya cargado lo necesario. No sé como lo haces y si existe esa posibilidad, pero merece la pena explorarla.

Saludos y gracias por tu aportación

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
tincho   13-08-2026, 11:21
#3
Sin ver el código no nos podemos analizar la causa del retardo.
La interfase gráfica la puedes mejorar un poco usando la propiedad .Spacing = True para que los botones estén mejor distribuidos dentro del panel. y usando iconos .SVG que siempre tienen mejor calidad grafica que los .png u otro formato de imagen.

Saludos.

1 Saludo.
paskola   17-08-2026, 05:47
#4
Hola, muchas gracias a ambos por detenerse a comentar.

Las instrucciones que manejo son simples  llamadas a la instrucción Shell, aunque tambien probé con EXEC pero el resultado es el mismo. Según mi entendimiento la instrucción va correr todo en segundo plano a menos que se le indique con Wait que espere hasta concluir. En ambos casos el resultado fue el mismo: un tiempo de casi tres minutos cuando la misma instrucción tarda menos de dos segundos si VirtualBox está ejecutándose. Esta es uma de las instrucciones que uso:

Código:
Shell "VBoxManage list vms | awk -F ' ' '$1 ~ /^\"/ {  print $1}' " To svms_name

Si ejecuto el comando directo en la terminal de Linux el tiempo es menor a dos segundo sin importar si Virtualbox se está ejecutando o no.

Probé utilizar la clase Task para que permitiera a la interfaz seguir responsiva mientras se ejecutaba en segundo plano las instrucciones Sheel pero el resultado no fue muy diferente.

Al final tomé otro camino: cambieé la instrucción Shell para que ejecutara un script en bash y le enviara de parámetro el nombre de la máquina virtual de la que va buscar la información. El script en bash recibe el parámetro y regresa la información a una variable String. Quedo de esta forma:

Código:
Shell "bash ~/.vboxr/Assets/scripts/guestOS.sh " & vm To $GuestOS

Y con eso se redujo el tiempo de 3 minutos a poco mas de 50 segundos por cada máquina que encuentre. Y pues para mi, que soy único usuario hasta el momento,  ya me es suficiente. 

Por el momento para la base de datos y archivos de logos estoy usando rutas absolutas para acceder a ellos y quizas no sea la mejor forma si después comparto el código  para que alguien lo pueda ejecutar por lo que estoy haciendo pruebas para almacenar todo dentrol del folder DATA.

Les agradezco sus recomendaciones y mañana que esté en la oficina comparto el código completo.

Un abrazo
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2026 MyBB Group.
Made with by Curves UI.