El objetivo de esta entrada es explicar la manera de lanzar y capturar una aplicación Windows alojada en un equipo remoto, capturando dicha aplicación sin más ventanas que la propia. El resultado final a obtener puede verse en la siguiente imagen.
Es posible capturar aplicaciones Windows tanto desde un cliente con Sistema Operativo Windows como desde un cliente con Sistema Operativo Linux. En este documento se explica la manera de configurar ambos tipos de clientes y la manera de configurar el servidor desde el que se van a capturar las aplicaciones, el cual es independiente del tipo de cliente que se conecte a él.
Configuración del Servidor de Aplicaciones
Para poder capturar correctamente las aplicaciones se deberán hacer las siguientes modificaciones en los equipos con Sistema Operativo Windows que harán de servidores (fuente con modificaciones):
- Creación de la carpeta “seamlessrdp” en C:. con los ficheros seamlessrdp.dll, seamlessrdpshell.exe y vchannel.dll que gestionan desde Windows la captura de una aplicación en concreto desde Linux a través de rdesktop. Estos ficheros se pueden bajar desde aquí.
- Habilitar el control remoto del escritorio. Esto es necesario porque lo que hace en realidad este método es iniciar sesión en Windows desde el Cliente a través del protocolo RDP (Remote Desktop Protocol) de Terminal Service. Para hacer esto nos vamos al Menú Inicio, al icono de Mi PC y con el botón derecho del ratón seleccionamos Propiedades. Nos vamos a la pestaña Remoto y activamos la casilla Permitir que otros usuarios se conecten de manera remota a este equipo.
- Automatizar el arranque de los Terminal Services. Esto es necesario para que cada vez que queramos emplear este método no nos veamos obligados a iniciar sesión para que se inicie este servicio y luego cerrarla e iniciar las aplicaciones en ventanas independientes. Para cambiar el inicio de manual a automático de este servicio nos vamos al Menú Inicio, y con el botón derecho del ratón sobre el icono de Mi PC, elegimos Administrar. Ahí desplegamos la lista Servicios y Aplicaciones y seleccionamos Servicios. Nos movemos por la lista y buscamos Servicios de Terminal Server y hacemos doble clic de ratón sobre él. En la lista desplegable donde dice Tipo de Inicio cambiamos Manual por Automático.
- Desactivar el escritorio para el usuario que empleemos. Esto es necesario para que no tengamos el escritorio de Windows de fondo sobre el del Cliente. Para ello iniciamos sesión en Windows con el usuario que vayamos a emplear (si tenemos más de uno y no hemos iniciado ya la sesión para ese usuario) y luego editamos el registro. Vamos al Menú Inicio, pulsamos sobre Ejecutar, escribimos regedit y le damos a Aceptar. Ahí iremos a la siguiente rama HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer y allí, pulsando con el botón derecho sobre la parte derecha seleccionamos Nuevo y Valor DWORD. Al nuevo Valor DWORD le llamaremos NoDesktop y le daremos un valor igual a 1
- Comprobar opciones de inicio de sesión. Esto es necesario para que funcione bien el modo Seamless. En Menú Inicio, Panel de Control, Cuentas de Usuario pulsar sobre Cambiar la forma en la que los usuarios inician y cierran sesión. Nos aparecerá una ventana con dos opciones: Usar la Pantalla de bienvenida y Usar Cambio rápido de usuario. Debemos activar ambas opciones. En caso de estar bajo un dominio, no aparecerá esta pantalla.
- Activar la contraseña para el usuario. Para poder emplear los Terminales Services es necesario que iniciemos sesión con una contraseña, debido a la función para la que fueron diseñados. Entonces si nuestro usuario no tiene actualmente una contraseña, necesitaremos crear una. Iremos al Menú Inicio, Panel de Control, Cuentas de Usuario y ahí seleccionando el usuario que vamos a emplear elegimos Crear una contraseña. En caso de estar bajo un dominio, esto no es necesario.
- Habilitar la transmisión de audio al cliente. Para ello, hay que editar las Directivas de Grupo. Vamos al Menú Inicio, pulsamos sobre Ejecutar, escribimos gpedit.msc y le damos a Aceptar. Habilitar la directiva de grupo Configuración del equipo > Plantillas administrativas > Componentes de Windows > Terminal Services > Redirección de los datos cliente – servidor > Permitir redirección del audio.
Configuración de los Clientes
Denominamos cliente al equipo desde el que vamos a capturar las aplicaciones del equipo Servidor. Los clientes pueden ser tanto Sistemas Windows como Sistemas Linux. Estos son los pasos a seguir en ambos tipos de clientes.
Cliente Windows
Para la conexión desde Windows necesitamos dos elementos, un cliente RDP con el que conectarnos al cliente, que va a ser rdesktop para Windows y una implementación del Sistema X Windows para Microsoft Windows (XP, 2003 y Vista) basado en el X.Org Server.
El cliente RDP elegido ha sido rdesktop porque es el complemento para seamlessrdp que se ha instalado en el servidor para permitir la captura de aplicaciones en su propia ventana. Rdesktop para Windows se puede bajar desde aquí. La instalación no tiene ninguna complicación y se realiza aceptando todas las opciones por defecto del instalador.
Xming se puede descargar desde este enlace. De nuevo, la instalación no tiene ninguna complicación y se realiza aceptando todas las opciones por defecto del instalador.
Una vez instalado Xming, hay que configurarlo para tener el control de acceso inhabilitado, el primer paso es lanzar el configurador de Xming. Esto se hace desde Inicio > Todos los Programas > Xming > XLaunch. Una vez lanzado, las pantallas que aparecerán y las opciones que hay que elegir son las siguientes:
Para que el servicio Xming se inicie con Windows hay que copiar el ejecutable de Xming a la carpeta Inicio. La manera más fácil de hacerlo es arrastrando, con la tecla Ctrl pulsada, el icono de Xming situado en Inicio > Todos los programas > Xming hasta el menú de Inicio situado en Inicio > Todos los programas > Inicio.
Cliente Linux
Sesiones simples
Para el funcionamiento del cliente Linux no es necesario hacer ninguna modificación en un sistema Linux moderno. Lo único necesario es un cliente rdesktop, que viene por defecto en todas las distros Linux. Por si fuera necesario, la última versión de rdesktop se puede encontrar aquí. En este punto podremos hacer conexiones únicas al servidor, lo que quiere decir que una vez iniciemos una sesión con el servidor (lanzando uno o varios programas pero en la misma conexión), no podremos lanzar más sesiones contra el servidor para lanzar nuevas aplicaciones.
Sesiones múltiples
Si queremos conseguir un rdesktop que permita múltiples conexiones hay que hacer varios pasos para parchear una versión de rdesktop con un parche creado por Fontis IT Consulting.Los pasos a seguir son los siguientes:
- Bajar el código fuente de la última versión de rdesktop.
- Descomprimir el contenido en una carpeta llamada rdesktop.
- Ejecutar para descargar el parche:
wget http://www.fontis.com.au/system/files/rdesktop.patch
- Asegurarnos de que tenemos conexión a Internet y ejecutar (en caso de distro basada en Debian como por ejemplo Ubuntu):
$ sudo apt-get update; sudo apt-get upgrade; sudo apt-get install patch autoconf build-essential libcurl4-openssl-dev libx11-dev
- En caso de una distro basada en Red-Hat habrá que buscar los rpm necesarios y resolver las dependencias manualmente.
- En caso de no tener conexión a Internet ejecutar en un equipo basado en Debian que sí tenga internet
sudo apt-get -d install patch autoconf build-essential libcurl4-openssl-dev libx11-dev
- con esto se nos quedarán los paquetes a instalar y las dependencias en la ruta /var/cache/apt/archives pero sin instalarse ningún paquete. Para instalarlo nos llevamos los paquetes .deb al equipo cliente y los instalamos con el comando
sudo dpkg -i *.deb
- Ejecutar los siguientes comandos para parchear e instalar la última versión de rdesktop:
$ sudo patch -p1 < rdesktop.patch
$ cd rdesktop
$ ./bootstrap; ./configure; make
$ sudo make install
Desde este momento, podríamos lanzar todas las sesiones que considerasemos necesarios contra un servidor de la manera siguiente:
- Para comenzar una sesión rdesktop-SeamlessRDP, se hace de la misma manera que con un rdesktop sin parchear
rdesktop -A -s “C:\seamlessrdp\seamlessrdpshell.exe aplicacion1_server” server
- Para lanzar una nueva aplicación dentro de la sesión rdesktop-SeamlessRDP existente
rdesktop -l “aplicacion2_server”
Además, con el parche, se han añadido nuevas opciones para la línea de comandos
- -M: Especifica el path dónde está el identificador del socket sobre el que el proceso rdesktop está escuchando. Por defecto es $HOME/.rdesktop/seamless.socket
- -l: En vez de comenzar un proceso rdesktop nuevo, utiliza el socket existente para conectar con el servidor. Puede combinarse con la opción -M
El problema que se plantea en este punto es qué comando utilizar en cada momento, sobre todo si hacemos las llamadas desde un programa y no manualmente. Para solucionar este problema se puede utilizar un script que compruebe si hay alguna sesión rdesktop abierta, y si lo está, utilizar el socket para lanzar nuevas aplicaciones. Una aproximación realizada en Perl por Fontis IT que se podría utilizar como base para la realización de un script propio es la siguiente:
#!/usr/bin/perl
my $bin = ‘/usr/local/bin/rdesktop’;
my $host = ‘w.x.y.z’;
my $socket = “$ENV{‘HOME’}/.rdesktop/seamless.socket”;
my $shell = ‘C:\seamlessrdp\seamlessrdpshell.exe’;
if (@ARGV != 1) {
print “usage: rdesktop-wrapper \n”;
exit;
}
# if socket and master session exist,
# launch command in slave mode
$numprocs = ‘pgrep -U $ENV{‘USER’} -x rdesktop | wc -l’;
if (-e $socket and ($numprocs == 1)) {
exec($bin, ‘-M’, $socket, ‘-l’, $ARGV[0]);
# otherwise, start new master mode
# only if no other sessions running
} elsif ($numprocs == 0) {
exec ($bin, ‘-A’, ‘-s’, $shell . ” $ARGV[0]“, $host);
}
Este proceso ha sido probado con rdesktop.1.6.0 y rdesktop.1.5.0.
Captura de las aplicaciones
Para capturar las aplicaciones, el servidor debe estar iniciado y con ninguna sesión abierta. Al conectarnos desde el cliente, al ser Windows XP un sistema operativo monousuario, cerrará la sesión de quien esté conectado. De igual manera, si alguien se conecta localmente al servidor, se cerrará la sesión remota. Esto no ocurriría en Sistemas Operativos multiusuario como por ejemplo Windows Server 2003. Por otro lado, parece posible modificar Windows XP para hacerlo multiusuario.
Desde un cliente Windows
Se ejecuta desde la línea de comandos. Para abrir el Símbolo del sistema, pulsamos en Inicio, Ejecutar, y lanzamos el proceso cmd. Lo primero que hay que hacer es exportar el DISPLAY al equipo actual y luego ya podemos lanzar el proceso.
set DISPLAY=127.0.0.1:0
rdesktop -A -s “C:\seamlessrdp\seamlessrdpshell.exe programa” -d domain -u user -p password ip_host
En el intervalo de unos 5 segundos debería aparecer una nueva ventana con el programa lanzado.
Desde un cliente Linux
Desde Linux, lo único que hay que hacer es lanzar la aplicación desde un terminal
rdesktop -A -s “C:\seamlessrdp\seamlessrdpshell.exe programa” -d domain -u user -p password ip_host
En caso de haber instalado el rdesktop parcheado, podremos lanzar más aplicaciones con el siguiente comando
rdesktop -l “programa_2″





[...] remotamente desde Linux. Ejecutar una aplicación en un equipo Linux remotamente desde Windows. Aplicaciones Windows en un equipo remoto visualizándose en un equipo Linux. Aplicaciones Windows en un equipo remoto visualizándose en un equipo Windows. Aplicaciones Linux [...]
Pingback por Ejecución remota de aplicaciones « recordatorio — junio 9, 2009 @ 10:40 am