Tabla de contenidos
REXEC

Figura: Sistema X Window
El sistema X Window(referido de ahora en adelante como X) es una de las GUI("Graphical User Interface"), o sistema de ventanas de mapas de bits, más usadas. Todos los principales distribuidores de estaciones de trabajo trabajan con ella, y es usada cada vez más por los usuarios de todo el mundo. X ofrece es más que un simple entorno. Ofrece además una plataforma para paquetes comerciales incorporados en ella de modo exclusivo. Algunos grupos industriales, además de producir software de aplicación, han creado paquetes de software propios y estándares de interfaces que refinan las capacidades el sistema X Window. Estos paquetes se integran en las aplicaciones para mejorar su look and feel. Los dos paquetes comerciales más significativos en esta área son el MOTIF de OSF("Open Software Foundation") y el Open Look de UNIX International. X fue una creación de Robert Scheifler, Jim Gettys, y otros en el MIT, como parte del Proyecto Atenea, un proyecto de investigación dedicado al chequeo de grande redes de ordenadores personales y estaciones de trabajo. (Para más información sobre este proyecto, remitirse a Proyecto Atenea: estudio de computación distribuída en el MIT). Como parte de este estudio, se consideró necesario un sistema de entorno de ventanas que unificase los entornos existentes. X se concibió como tal, de modo que fuera un sistema de ventanas que pudiera ser usado en las diferentes redes y ordenadores integrados en el proyecto.
A medida que el proyecto Atenea progresaba, X evolucionó hacia un sistema de ventanas transportable y basado en red. Gran parte del trabajo inicial desarrollado en X se derivó de un sistema de ventanas de la misma época, desarrollado por Stanford y llamado W. De hecho, el nombre X fue simplemente una continuación del nombre anterior, W. El Consorcio del MIT, fundado en 1988, se dedica al desarrollo de X y a promover la cooperación en la industria informática para estandarizar las interfaces de X.
Las versiones actuales de X contienen dos números: el número de versión que indica el protocolo principal o revisiones del estándar, y el número de versión, que indica cambios menores. En el momento de redactar este documento, la última versión es X11R6; V1.2 para el OSF/MOTIF(basado en X11R5). Las principales revisiones de X son incompatibles entre sí, aunque hay compatibilidad hacia atrás con versiones menores dentro de una misma categoría.
El objeto de X fue permitir al usuario controlar todas las sesiones desde una sola pantalla, con aplicaciones ejecutándose bien en una ventana, o en terminales virtuales separadas, pero con un icono en la ventana principal recordándole la existencia de esa aplicación.
X proporciona la capacidad de gestionar tanto ventanas locales como remotas. Las ventanas remotas se establecen a través de TCP/IP, y las locales mediante el uso de zócalos de BSD.
Básicamente hay dos partes que se comunican entre sí:
- La aplicación, que recibe entradas del usuario, ejecuta código y envía la salida al usuario. En vez de leer y escribir directamente en el display, la aplicación usa la interfaz de programación Xlib para enviar y recibir datos de/a la terminal de usuario. La parte de aplicación se conoce también como cliente X.
- La terminal de usuario, que ejecuta la interfaz con el display y envía o recibe datos a/de la aplicación se denomina servidor X.

Figura: Concepto del sistema X Window - Clientes y servidores comunicándose.
Terminología:
- Servidor X
: Es un programa dedicado a suministrar servicios de display en una terminal gráfica, en favor del usuario y a petición del cliente X del usuario. Controla la pantalla y maneja el teclado y el ratón(u otros dispositivos de entrada) para uno o más clientes X. Igualmente, es responsable de la salida sobre el display, el mapeado de colores, la carga de fuentes y el mapeado del teclado. Típicamente, los servidores X se ejecutan en PCs y terminales de trabajo de tipo gráfico y de alto rendimiento, además de en las "terminales X", diseñadas para ejecutar sólo servidores X.
El servidor X X11R5 ha proporcionado algunas mejoras en la velocidad y nuevas interfaces para la fuentes. Existe un Protocolo de Servicio de Fuentes X disponible para permitir a los servidores X delegar la gestión de las fuentes en un servidor de fuentes.
- Cliente X
: Es la aplicación propiamente dicha y está diseñado para emplear una interfaz gráfica de usuario para mostrar sus salidas. Típicamente, muchos clientes X compiten por los servicios de un servidor X por cada usuario y display. El gestor de X Window, que es una entidad separada y diferenciada, resuelve los conflictos producidos por esta competencia. Xterm y Xclock son dos ejemplos de clientes X.
X11R5 ha añadido algunos clientes más, nuevas demos y una implementación completamente nueva del mapa de bits y xmag.
- El gestor de X Window
: Es un cliente X localizado en la estación de trabajo donde se ejecuta el servidor X. El gestor no es necesario para crear las ventanas, aunque permite redimensionarlas, moverlas y modificarlas cuando sea solicitado.
- Protocolo X
: Se ejecuta sobre la conexión de red y permite que se efectúen solicitudes y respuestas entre cliente y servidor. Está orientado a conexión(usa TCP) y describe el formato de los mensajes intercambiados entre cliente y servidor sobre la conexión.
- Xlib
: Contiene una rudimentaria interfaz de programación de aplicación. Se trata de una colección de subrutinas primitivas de C embebidas en todos los clientes X, que proporciona el acceso de más bajo nivel al protocolo X. Los procedimientos en Xlib traducen las peticiones de los clientes a solicitudes del protocolo X y analizan los mensajes que llegan(eventos, respuestas, errores) de los servidores X, además de suministrar diversas utilidades adicionales, por ejemplo, operaciones independientes del sistema operativo, como puede ser la gestión de almacenamiento. Es posible escribir aplicaciones enteras con Xlib. De hecho, la mayoría de los clientes X existentes son o han sido desarrollados de este modo.
X11R5 ha añadido dos grandes funcionalidades a Xlib:
- Dispositivos independientes del color
- Internacionalización (i18n): significa que los clientes X pueden adaptarse a los requerimientos de distintos lenguajes nativos, costumbres locales y códigos de caracteres.
- X Toolkits
: La complejidad de la interfaz de bajo nivel Xlib y de protocolo X subyacente puede ser manejada con un creciente variedad de Toolkits disponibles. Los X Toolkits son librerías de software que añden funcionalidades de alto nivel para implementar objetos comunes de la interfaz de usuario, como por ejemplo botones, menúes, barras de desplazamiento, así como herramientas de configuración para organizar estos objetos en el display. El estándar de X del MIT proporciona la base para el desarrollo de los X Toolkits. La librería, llamada Intrínsecas de Xlib o Xt, constituye las piezas elementales para construir una serie de objetos de la interfaz llamados widgets.
- Widgets: Para toolkits basados en Xt, se hace uso de mecanismos de interfaz comunes, llamados widgets. Un widget set es básicamente una ventana X más algunos datos adicionales y un conjunto de procedimientos para operar sobre ellos. Los widgets son un concepto exclusivo del cliente. Ni el servidor X ni el protocolo son capaces de entender los widgets. Un ejemplo de widget set es el Xaw, más conocido como Athena Widget Set, distribuído por el MIT con el código fuente de X11.
Funcionalidad:
- Los servidores y clientes X pueden estar en hosts diferentes. En ese caso podrán usar TCP/IP para comunicarse en la red. También pueden estar en la misma máquina, usando IPC(comunicación entre procesos) para comunicarse(a través de zócalos).
- Sólo hay un servidor X por terminal, con el que se pueden comunicar múltiples clientes X. El deber del servidor X es mostrar las ventanas de aplicación y enviar al cliente X correspondiente las entradas del usuario.
- Depende del cliente X el mantener las ventanas que ha creado. Los cambios efectuados en el display por otros clientes son notificados por eventos del servidor X. Sin embargo, los clientes no tienen que preocuparse de qué parte sus ventanas son visibles y cuáles no, o de cuándo se deben dibujar o redibujar sus ventanas.
- El servidor X lleva la cuenta de las ventanas visibles y no visibles manteniendo pilas o stacks. Una pial contiene los "hijos de primera generación" de una ventana padre. Una ventana hijo puede ser padre padre si tiene a su vez una o más ventanas hijo, que de nuevo se almacenarán en una subpila. La pila primaria es la que guarda todas las ventanas localizadas directamente bajo la raíz. Ver Figura - Estructura del sistema X Window para una ilustración. Las subventas sólo pueden ser visibles del todo cuando su padre está en la cima de su respectiva pila y se halla mapeada en el display.
- El servidor X en sí carece de funciones de gestión; sólo realiza el recorte de las ventanas sobre el puerto de visión según sus pilas. Cada cliente es responsable de sus propias ventanas. Hay un gestor de ventanas("Window Manager") que manipula las ventanas de la cima de todos los clientes. El gestor no forma parte del servidor X sino que es en sí un cliente. En cuanto el gestor cambia algo en la pantalla(por ejemplo, redimensionando una ventana), hace que el servidor X envíe un evento a los demás clientes.
- Los clientes envían mensajes de solicitud al servidor, que contesta con mensajes de respuesta o mensajes de error. El servidor X también puede enviar mensajes de eventos a las aplicaciones. Los mensajes de eventos indican cambios en las ventanas(y su visibilidad), y en la entrada de usuario(ratón y teclado).

Figura: Estructura de ventanas del sistema X Window - Cada ventana es hijo de otra ventana, siendo la raíz el display.
Aplicar el concepto de cliente/servidor tiene las siguientes ventajas:
- Las aplicaciones no tienen que conocer las características hardware de la terminal.
- Las aplicaciones no tienen que estar en el mismo ordenador que la terminal.
- Los programas escritos en Xlib son portables.
- Se pueden añadir nuevos tipos de terminal sólo con proporcionar un servidor X adecuado.
- Los porgramadores no tienen que ocuparse de las comunicaciones, sólo han de escribir aplicaciones gráficas para Xlib, con independencia de si los usuarios son locales o remotos.
Un protocolo X se puede implementar sobre cualquier mecanismo de transporte fiable y orientado a conexión. Utiliza un simple bloque de protocolo sobre la capa de transporte. Se usan cuatro tipos de mensajes:
- Formato de petición. Solicita el flujo del cliente al servidor.

Donde:
- "Major" y "minor" son códigos de operación de 1 byte cada uno.
- "Length" vale 2 bytes.
- "Data" puede tener cero o más bytes de longitud, según la petición.
- Formato de respuesta : bloque de 32 bytes.
- Formato de error: bloque de 32 bytes.
- Formato de evento: bloque de 32 bytes.
Los mensajes de respuesta, error y evento son enviados por el servidor al cliente.
Los displays se numeran siempre a partir de cero. Para conexiones TCP, el número de display N se asocia con el puerto 5800+N (hex 5800) y el 5900+N. El servidor X trata las conexiones en el puerto 58xx como conexiones con hosts que usan el formato "primero el byte inferior", y a los 59xx como aquellos que tienen el formato "primero el byte de orden superior".
Hay más de cien posibles peticiones, cada una correspondiente a una llamada de aplicación de Xlib. Ya que este documento no es una guía del programador, no trataremos las funciones de Xlib. El RFC 1013 - Protocolo del sistema X Window, Version 11 contiene la actualización alfa de 1987 del X11. Para conseguir documentación sobre la versión actual de X11R6, ponerse en contacto con el MIT o con un distribuidor de libros técnicos.
Tabla de contenidos
RPC ("Remote Procedure Call")