lunes, 7 de noviembre de 2011

Trabajando con aplicaciones gráficas en Unix (X Window System)

Actualmente los sistemas informáticos operan en entornos gráficos otorgando al usuario una sensación de poseer áreas de trabajo similares a lo que en un escritorio podrían ser cuadernos, carpetas y demás objetos. Esta es la razón por la que a las estaciones de trabajo se les denomina escritorios y a las áreas de trabajo que se encuentran en estos escritorios se les conoce como ventanas, debido a que, generalmente, son áreas de forma rectangular y a través de éstas es posible visualizar los contenidos de la información.

Por supuesto que Unix no podría ser la excepción, emplea un sistema que le otorga una apariencia gráfica y que está formado por varios componentes. A dicho sistema se le conoce como Sistema de Ventanas X (X Window System).


Vamos a ver cuáles son los principales componentes de X Window System

  • Servidor X (X Server): Este es el componente gráfico; posee una interfaz humana (teclado y mouse), y se encuentra en una terminal gráfica (X Terminal), en la consola de un equipo *nix ó cómo un emulador (Ej: Xming, OmniX, Reflection/X).
  • Gestor de ventanas (Window Manager): Nombre dado a un programa cuya función es permitir realizar operaciones sobre las ventanas tales como: redimensionar, mover, cerrar, minimizar, etc. Además de proporcionarles bordes, barras, títulos, botones, etc. (Ej: mwm, twm, dtwm, metacity, KWin).
  • Gestor de sesiones o pantalla (Display Manager): Es un programa que permite iniciar una sesión en modo gráfico desde el mismo equipo o desde otro remoto (Ej. xdm, dtlogin, gdm, kdm)
  • Entorno de escritorio (Desktop Environment): Es el conjunto de programas que proporcionan los componentes de un escritorio moderno, dichos componentes van desde los menús desplegables hasta utilerías como agenda, cliente de correo elctrónico, etc. (Ej: CDE, GNOME, KDE, XFCE)
La razón por la que se llama X Server al componente gráfico que permite el despliegue de ventanas es porque en realidad es un servidor que permite "abrir ventanas"

 

(Fuente de imagen: wikipedia)

En este ejemplo es un típico caso de una estación de trabajo desde la cual se están ejecutando 2 aplicaciones locales y 1 remota. La comunicación entre las aplicación y el X Server es por medio del protocolo tcp y normalmente utiliza el puerto 6000 (Es por esto que a las aplicaciones se les llama X Client ó Cliente X).

También es importante señalar que en el X Server es posible tener mas de una pantalla (dependiendo de las características del X Server), por lo que a cada pantalla se le debe etiquetar con una identificación numérica con el formato: X.X. La identificación por default es: 0.0

Con la intención de ilustrar mejor esto, vamos a iniciar un laboratorio para lo cual requerimos lo siguiente:

  • Un equipo Solaris 10 al que le desactivaremos el modo gráfico con el comando: svcadm disable cde-login
  • Un X Server que esté ejecutando en una ventana o en pantalla completa, sin ningún cliente ejecutando y con el control de acceso desactivado. En mi caso, voy a utilizar el Xming corriendo sobre Microsoft Windows en modo de una ventana, con la opción de "Start no client" y con la opción de "No access control"
  • Una sesión con el usuario root en el equipo Solaris 10 utilizando un cliente en modo texto: telnet o ssh (no utilizar la consola)

Al iniciar el X Server aparecerá una ventana con un fondo parecido al de la ilustración con un puntero de mouse con forma de "x" (de hecho, si observan con cuidado el fondo del X Server, notarán que en realidad es un patrón de pequeñas "x")

 Image

Desde la sesión en modo texto, vamos a definir la variable de ambiente DISPLAY de este modo: DISPLAY=192.168.100.1:0.0, donde 192.168.100.1 es la dirección IP del X Server, es decir, en mi caso la de mi equipo Windows; lo que va después de ":" es la identificación  de la pantalla, normalmente será 0.0 . Una vez definida la ambiente la "exportamos": export DISPLAY

Con esta variable de ambiente le estamos indicando a la aplicaciones la dirección del X Server, vamos a ejecutar unas aplicaciones básicas, desde la terminal de texto escribimos: /usr/openwin/bin/xterm -geometry 80x24+20+20 &

 Image [2]

Noten que la ventana solo es un rectángulo sin bordes y ningún tipo de decoración, para poder escribir en ella pasarle por encima el mouse y no hay modo de cambiarla de posición o de tamaño, los parámetros que le dimos al comando xterm fue para indicarle el tamaño y la posición que debe ocupar la ventana en el X Server, desde la ventana que acabamos de abrir ejecutamos:  /usr/openwin/bin/xclock -geometry 100x100+600+400 &

 Image [3]

Con lo anterior apareció otra ventana con un reloj y así podría continuar abriendo más ventanas, sin embargo, no es muy práctico el tener que calcular la geometría de éstas. Esta es la razón principal por la que existen los gestores de ventanas, vamos a ejecutar uno muy simple que nos permitirá observar la diferencia, desde el xterm ejecutaremos: /usr/openwin/bin/twm &

 Image [4]

Ahora aparecen las ventanas "decoradas" con una barra de título, con la cual, es posible mover las ventanas, redimensionar y minimizar; también dando clic en el fondo aparece un menú con el que podemos realizar otras operaciones. En este momento ya es posible abrir ventanas sin ser necesario calcular la geometría, ejecutamos desde el xterm: /usr/openwin/bin/xcalc &

 Image [5]

Noten que al momento de abrir la ventana, aparece una silueta en la posición del puntero del mouse, está en espera de que le indiquemos en qué parte de la pantalla deseamos que aparezca la ventana, por lo que movemos el mouse hasta la posición deseada y le damos clic.

Ya que nos queda claro en que sentido va la comunicación de X Client a X Server podemos resumir que para ejecutar aplicaciones gráficas es necesario contar con un X Server, una sesión en el equipo donde residen los X Client y un gestor de ventanas que nos permita operar con éstos. Entonces, ¿por qué no tener todo esto integrado?. Esa es precisamente la función del gestor de sesiones, el cual se encarga de "levantar" el X Server en la consola; permite el inicio de sesión en el equipo, y una vez iniciada la sesión, se encarga de ejecutar el gestor de ventanas. En Solaris, el gestor de sesiones que se utiliza normalmente es el dtlogin, también llamado cde-login, al cual conocemos por ser la pantalla color azul metálico que nos pide usuario y contraseña para iniciar sesión en la consola o desde algún equipo remoto.

A manera de ilustración de cómo funciona el gestor de sesiones, vamos a ejecutar otro más básico que el dtlogin. Vamos a cerrar lo realizado hasta el momento y ya que son aplicaciones en realidad muy simples, podemos simplemente cerrar el X Server y listo. Desde la terminal de texto ejecutamos: /usr/openwin/bin/xdm &

Observen que la consola del Solaris 10 se puso en modo gráfico con una pantalla que solicita usuario, sin embargo, es muy diferente a la pantalla azul que conocemos.

 Image [6]

Este gestor de sesiones nos permite iniciar una sesión desde la consola, pero también podemos iniciar una sesión desde un equipo remoto, nuevamente ejecutamos el X Server desde nuestra estación, en mi caso voy a ejecutar el Xming, también le voy a indicar que lo haga en modo de una ventana pero en esta ocasión le voy a indicar que abra una sesión remota con XDMCP (Open session via XDMCP), en "Connect to host" le doy la dirección IP del equipo Solaris 10 que en mi caso es la 192.168.100.101

Antes de iniciar sesión, permítanme aclarar cómo es esta comunicación, si bien sigue siendo cierto que las ventanas se inician de X Cliente a X Server, la sesión se inicia en sentido inverso, es decir, de equipo con X Server (ó estación) a equipo remoto. La sesión utiliza un protocolo distinto el XDMCP, el cual, se transporta por udp y utiliza el puerto 177.

Iniciamos sesión utilizando un usuario distinto a root (por default, Solaris no permite el inicio de sesiones con root desde estaciones remotas).

 Image [7]

Podemos ya cerrar el X Server y desde la terminal de texto le damos kill al xdm, para restaurar el cde-login, simplemente ejecutamos: svcadm enable cde-login

En resumen, el equipo remoto inicia el gestor de sesiones; la estación se conecta al equipo remoto por medio del protocolo XDMCP; se inicia la sesión, y los X Client se conectan al X Server que se encuentra en la estación.

En un entorno de trabajo real, los sistemas operativos modernos utilizan gestores más complejos adaptados a las "particularidades" de cada plataforma y por lo regular se encuentran limitados para iniciar sesión sólo en la consola del sistema, sin embargo, en casi todos es posible permitir sesiones remotas.

Con lo que respecta a la forma de abrir un X Client remoto en nuestra estación, el modo normal es permitiendo el acceso a clientes remotos en nuestra estación, iniciar sesión en el equipo remoto y definir en éste la variable de ambiente DISPLAY que corresponda (Nota: la forma de permitir el acceso a nuestra estación en el caso de que ésta sea un *nix, es por medio del comando xhost). El gestor de ventanas que utilizan los clientes remotos es el mismo que emplean las aplicaciones locales.

Por último y ya en particular con lo que respecta a Microsoft Windows, su sistema de ventanas es completamente diferente, es por esto que se utilizan emuladores, los cuales trabajan en dos modos: de una sola ventana o pantalla completa, la cual se utiliza para iniciar sesiones remotas, y el modo multiventana, con el cual, se utiliza el gestor de ventanas propio de Windows

 Image [8]

Ejemplo de xterm utilizando el gestor de ventanas de Windows

Con esto damos por concluido el tema, espero que haya sido de su agrado y nos vemos a la próxima.

2 comentarios:

Gus dijo...

Hola:
Gracias por el post, me ha sido útil, aunque aún no he conseguido abrir un escritorio en mi pc, sólo aplicaciones como el reloj, calculadora incluso smc.

Unknown dijo...

¡Hola Gus!
Es posible que el problema sea que el XDMCP esté inactivo, quizá pueda servirte esto: http://www.unixymas.com.mx/2010/10/activar-el-uso-de-sesiones-graficas.html
Saludos.