Servidor Windows en tu Ubuntu

Hay ocasiones en las que aún es casi imposible sustituir una aplicación nativa de Windows en nuestro sistema libre. Hay otras situaciones en las que correr una aplicación de Windows es necesario como caso de prueba para garantizar la compatibilidad de algún programa en cualquier plataforma. Cualquiera sea la razón para utilizar Windows en tu sistema, en nodolibre vamos a considerar una solución a este problema que te brinda la oportunidad de crear un servidor de Windows en tu propia maquina para así servir las aplicaciones que serán utilizadas desde tu escritorio en Ubuntu.

El resultado final será un servidor de Windows XP corriendo en una maquina virtual qemu al que nos conectaremos desde Ubuntu GNU+Linux usando el escritorio remoto rdesktop a través de los Terminal Services de windows. Esta guía se basa en tutoriales que puedes revisar aqui [SeamlessVirtualization] [Multiple X Servers simultaneously] [Qemu].

Lo primero que debemos tener funcionando es nuestra maquina virtual. Qemu es la solución libre que utilizaremos para arrancar la maquina virtual, para lo cual necesitamos crear un disco duro virtual donde funcionará la copia de Windows que hará de servidor. También es recomendable instalar el acelerador de Qemu, KQemu [otras instrucciones], para optimizar el trabajo de la máquina virtual.

Para crear la imágen de Qemu en su formato nativo con un tamaño de 3 Gb hacemos:

  1. qemu-img create -f qcow2 winXp-srv.img 3G

Luego instalamos la copia que tengamos a disposición de Windows XP en nuestro nuevo disco virtual, para lo cual le indicamos que arranque el disco virtual que acabamos de crear desde la unidad de cdrom, usando 384 de memoria RAM para el sistema virtual:

  1. qemu -cdrom /dev/cdrom -hda winXP-srv.img -m 384 -boot d

O podemos arrancar desde una imágen ISO que contenga el disco de instalación de Windows XP:

  1. qemu -cdrom winXp-instalar.ISO -hda winXP-srv.img -m 384 -boot d

Iniciando QemuSeamless RDPUna vez que este instalado y corriendo el Windows XP procedemos a copiar en él los archivos que facilitarán la comunicación entre el escritorio ubuntu y las aplicaciones servidas en windows. Los archivos estan ubicados en http://www.cendio.se/files/thinlinc/seamlessrdp/seamlessrdp.zip.

Panel de ControlLuego de haber copiado y descomprimido el fichero en la raiz del sistema de archivos windows, procedemos a iniciar el Panel de Control para configurar el acceso remoto. En la sección de Usuarios habilitamos las opciones de Usar pantalla de bienvenida y Cambio rápido de usuario. En a sección Sistema accedemos a la pestaña Remoto y habilitamos la opción de Permitir conexiones remotas.

Ahora apagamos la maquina virtual y la iniciamos con la redirección de los puertos a los que nos conectaremos.

  1. qemu -m 384 -redir tcp:3389::3389 winXP-srv.img

Esto inicia una instancia de la maquina virtual de qemu en nuestro entorno gráfico, pero para diferenciar mejor los ambientes resulta preferible correrlo en una terminal visual independiente (vt8). Para ello iniciamos un nuevo servidor X que se encargará de correr el servidor windows:

Para que el servidor X arranque automáticamente windows necesitamos indicarlo en el archivo .xinitrc ubicado en:

  1. /home/$USUARIO/.xinitrc

Y en el contenido del archivo colocamos (asumiendo que kqemu esta instalado correctamente):

  1. #!/usr/bin/sh
  2. echo "$CLAVE_ROOT" | sudo -S /sbin/modprobe kqemu major=0
  3. qemu -full-screen -m 384 -redir tcp:3389::3389 winXP-srv.img

Ahora podemos usar nuestro entorno ubuntu en vt7 y el entorno windows en vt8 lanzando desde un terminal (preferiblemente tty1, usando <Alt>+<Control>+<F1>):

  1. xinit -display :1 — :1 vt8 &amp;

Usamos <Alt>+<Control>+<F7> para ir a Ubuntu y <Alt>+<Control>+<F8> para ir a Windows.

Una vez iniciado el windows podemos conectarnos desde ubuntu usando el escritorio remoto rdesktop. La conexión la haremos en el puerto indicado al momento de levantar el servidor llamando al programa previamente instalado como el usuario Administrador de la siguiente manera:

  1. rdesktop -A -s "c:\seamlessrdp\seamlessrdpshell.exe C:\$PROGRAMA_A_CORRER" localhost:3389 -u administrator -p $CLAVE_ADMIN_WINDOWS -a 16

Podemos cambiar localhost por otro dominio o IP si no corremos el servidor en la máquina local.

RDesktop iniciandoUna vez conectado podremos correr las aplicaciones en nuestro escritorio ubuntu sin necesidad de acceder a windows. Si queremos correr el internet explorer, lo invocamos de la siguiente manera:

  1. rdesktop -A -s "c:\seamlessrdp\seamlessrdpshell.exe C:\Program Files\Internet Explorer\iexplore.exe" localhost:3389 -u administrator -p $CLAVE_ADMIN_WINDOWS -a 16

Por último automatizamos todos estos comandos creando un script para el intérprete de comandos en ~/scripts/winSrv.sh cuyo contenido será:

  1. #!/usr/bin/sh
  2. xinit -display :1 — :1 vt8 &amp;

Y creamos un lanzador en el panel o en el escritorio que contendrá, en el caso del internet explorer:

  1. rdesktop -A -s "c:\seamlessrdp\seamlessrdpshell.exe C:\Program Files\Internet Explorer\iexplore.exe" localhost:3389 -u administrator -p $CLAVE_ADMIN_WINDOWS -a 16

Esperamos te resulte de utilidad esta solución, que sin duda es una más de las tantas que se han logrado en los sistemas GNU+Linux para facilitar la migración completa hacia un sistema libre y confiable. Esta aproximación te será útil tanto para correr un servidor en tu propio computador o para levantarlo en una red pequeña y así usarlo en dos computadoras diferentes.

Explorer en UbuntuEn nodolibre nos resultó util para correr el Internet Explorer y así evaluar el comportamiento de nuestros proyectos web en este navegador.

4 comentarios

Montar tus aplicaciones Windows en tu Ubuntu…

Como montar un servidor de las aplicaciones de windows desde el Escritorio Ubuntu usando qemu y rdesktop….

meneame.net
June 12th, 2008 at 12:14 pm

interesante, justamente lo estaba buscando para ejecutar programas privativos que aún no han sido reemplazados y otras opciones como Wine no proporcionan un desempeño confiable (sin desmerecer el trabajo de Wine) .

Supongo que no hay necesidad de tener el wxp instalado desde una partición, ahora ¿habría problema en correr el servidor desde un winxp ya instalado en el disco duro?

¿por qué escogiste 384 de RAM? ¿mejoraría si fuera mayor?

en la línea:
” qemu -cdrom /dev/cdrom -hda winXP-srv.img -m 384 -boot d ”

que significa ” boot d ” ?

¿qué significa ” tcp:3389::3389 “?
¿dónde puedo conseguir más información de redirección de puertos?

supongo que la variable “$USUARIO” es la misma “$USER” que mi sistema arroja, ¿entonces habrá que cambiar “$CLAVE_ROOT” por otra? ¿cómo puedo conocer las variables declaradas?

y en winxp “$CLAVE_ADMIN_WINDOWS” ¿puede tener algún cambio? supongo que puede vastar con colocar la clave original

en la línea:
rdesktop -A -s “c:\seamlessrdp\seamlessrdpshell.exe C:\Program Files\Internet Explorer\iexplore.exe” localhost:3389 -u administrator -p $CLAVE_ADMIN_WINDOWS -a 16

“C:\Program Files” debería ir encomillado -> “‘C:\Program Files’”
pregunto, porque las consolas suelen ser muy estrictas con eso.

Diego
June 13th, 2008 at 12:51 pm

y claro, agradezco la ayuda que me puedas brindar

éxito en el proyecto del nodo.

Diego
June 13th, 2008 at 12:56 pm

Saludos Diego, aqui trataré de responder algunas preguntas:
Mas informacion sobre todas las opciones de qemu las puedes encontrar aqui: http://linux.die.net/man/1/qemu

- ¿por qué escogiste 384 de RAM? ¿mejoraría si fuera mayor?
Si mejoraría si fuera mayor pero en mi caso particular ese es el máximo que soporta la computadora. Si dispones de memoria RAM superior a 1Gb seguramente podrás aumentar la RAM dedicada al espacio virtual

- ¿que significa ” boot d ” en “qemu -cdrom /dev/cdrom -hda winXP-srv.img -m 384 -boot d”?
Esta opción especifica que bootee desde el cdrom montado en windows generalmente en D:

- ¿qué significa ” tcp:3389::3389 “?
- ¿dónde puedo conseguir más información de redirección de puertos?
Aqui básicamente se indica que el puerto 3389 de la máquina virtual se ate al puerto 3389 de la máquina real

- supongo que la variable “$USUARIO” es la misma “$USER” que mi sistema arroja, ¿entonces habrá que cambiar “$CLAVE_ROOT” por otra? ¿cómo puedo conocer las variables declaradas?
En los lugares denotados por $usuario o $clave se debe colocar el nombre del usuario y su clave. En realidad no leerá ninguna variable, es un indicativo de que debes cambiar esas claves.

- y en winxp “$CLAVE_ADMIN_WINDOWS” ¿puede tener algún cambio? supongo que puede bastar con colocar la clave original
Si, es la clave del administrador del sistema.

- en la línea: rdesktop -A -s “c:\seamlessrdp\seamlessrdpshell.exe C:\Program Files\Internet Explorer\iexplore.exe” localhost:3389 -u administrator -p $CLAVE_ADMIN_WINDOWS -a 16

“C:\Program Files” debería ir encomillado -> “‘C:\Program Files’”
pregunto, porque las consolas suelen ser muy estrictas con eso.

Afortunadamente funciona sin las comillas adicionales

Henry Contreras
June 13th, 2008 at 8:13 pm

Leave a Comment

Nombre (required)

Correo (no será publicado) (required)

Sitio web

Comentario