Sistema de ventanas X

Esquema de las capas de la interfaz gráfica de usuario
Servidor de pantalla: X-server o Wayland compositor
X Window System en GNOME 2.20.
Logotipo de X Window System
Logotipo de X.Org

El Sistema de Ventanas X (en inglés, X Window System) es un software que fue desarrollado a mediados de los años 1980 en el MIT para dotar de una interfaz gráfica a los sistemas Unix. Este protocolo permite la interacción gráfica en red entre un usuario y una o más computadoras haciendo transparente la red para éste. Generalmente se refiere a la versión 11 de este protocolo, X11, el que está en uso actualmente. X es el encargado de mostrar la información gráfica de forma totalmente independiente del sistema operativo.

X fue diseñado primariamente para implementar clientes ligeros, donde mucha gente usaba simultáneamente la capacidad de procesamiento de un mismo computador trabajando en tiempo compartido. Cada persona usaba un terminal en red que tenía capacidades limitadas para dibujar la pantalla y aceptar la entrada del usuario. Debido a la ubicuidad del soporte para el software X en Unix, es usado en los computadores personales incluso cuando no hay necesidad del tiempo compartido.

El sistema de ventanas X distribuye el procesamiento de aplicaciones especificando enlaces cliente-servidor. El servidor provee servicios para acceder a la pantalla, teclado y ratón, mientras que los clientes son las aplicaciones que utilizan estos recursos para interacción con el usuario. De este modo mientras el servidor se ejecuta de manera local, las aplicaciones pueden ejecutarse remotamente desde otras máquinas, proporcionando así el concepto de transparencia de red.

Debido a este esquema cliente-servidor, se puede decir que X se comporta como un terminal gráfico virtual.

El hecho que exista un estándar definido para X permite que se desarrollen servidores X para distintos sistemas operativos y plataformas, lo que hace que el código sea muy portable. Por ejemplo, permite tener clientes X ejecutándose en un potente servidor UNIX mientras los resultados son visualizados en una PC de escritorio con cualquier otro sistema operativo funcionando.

La comunicación entre el cliente X y el servidor se realiza por medio de un protocolo conocido como Xprotocol, que consiste en una serie de bytes interpretados como comandos básicos para generar ventanas, posicionarlas, o controlar eventos. Los clientes X acceden al Xprotocol mediante el uso de una biblioteca llamada Xlib, que evita al programador de clientes X tener que lidiar con el código binario del Xprotocol. Sin embargo, los aspectos de decoración de ventana y manejos de ventanas no están definidos en esta biblioteca.

X no es un gestor de ventanas, necesita de uno para controlar el manejo de ventanas. Esto trae la ventaja de que permite al usuario instalar uno o más administradores de ventanas de su preferencia. También trae la ventaja de que hace de X estrictamente un sistema gráfico, de tal modo que un cliente X podría estar enviando un gráfico a una pantalla, a una impresora o a cualquier otro hardware sin darse cuenta, flexibilizando la salida gráfica.

Por otro lado, la desventaja que trae el hecho de no tener un único entorno gráfico es que los programadores de clientes X que desean hacer uso de los recursos de los entornos gráficos (botones, barras de deslizamientos, etc) deben elegir un entorno gráfico específico para programar y contar que el usuario tenga por los menos las bibliotecas de dicho entorno gráfico instalado. Las bibliotecas de los entornos gráficos se conocen como "Toolkits", el estándar X provee sólo de un conjunto de herramientas básicas llamadas Xintrisics que permiten a los programadores de los entornos gráficos armar sus Toolkits sobre estas.

Diseño

Ejemplo de despliegue del servidor X: el servidor X recibe la entrada de un teclado y de un ratón locales y exhibe hacia una pantalla. Un navegador web y un emulador de terminal se ejecuta en la estación de trabajo del usuario y un emulador de terminal se ejecuta en un computador remoto pero es controlado y monitoreado desde la máquina del usuario.

X usa el modelo cliente-servidor: un servidor X se comunica con varios programas cliente. El servidor acepta los pedidos para la salida gráfica (ventanas) y devuelve la entrada del usuario (desde el teclado, del ratón, o de la pantalla táctil). El servidor puede funcionar así:

  • una aplicación exhibiendo hacia una ventana de otro sistema de visualización
  • un programa del sistema controlando la salida vídeo de una PC
  • una pieza de hardware dedicada

Esta terminología de cliente servidor - el terminal de usuario siendo el servidor y las aplicaciones siendo los clientes - a menudo confunde a nuevos usuarios de X, porque los términos parecen invertidos. Pero X toma la perspectiva de la aplicación, en vez de la del usuario final: X proporciona la exhibición por pantalla y los servicios de entrada/salida a las aplicaciones, así que es un servidor; las aplicaciones usan estos servicios, por lo tanto son los clientes.

El protocolo de comunicaciones entre el servidor y el cliente opera transparente a la red: el cliente y el servidor pueden ejecutarse en la misma o en diferentes máquinas, posiblemente con diferentes arquitecturas y sistemas operativos. Un cliente y un servidor pueden incluso comunicarse con seguridad sobre Internet haciendo una conexión de túnel sobre una sesión cifrada de la red.

Un cliente X puede emular un servidor X proporcionando servicios de exhibición a otros clientes. Esto es conocido como "X nesting" (anidado X). Los clientes de código abierto tales como Xnest y Xephyr soportan el X nesting.

Para utilizar un programa de cliente X sobre una máquina remota, el usuario hace lo siguiente:

  • En la máquina local, abrir una ventana de terminal
  • usar telnet o ssh para conectarse con la máquina remota
  • solicitar el servicio local de pantalla/entrada (ej., export DISPLAY=[user's machine]:0 si no se está usando SSH con X tunneling activado)

El cliente X remoto entonces hará una conexión al servidor X local del usuario, proporcionando la exhibición por pantalla y la entrada.

Alternativamente, la máquina local puede ejecutar un pequeño programa que se conecte con la máquina remota y comience la aplicación cliente.

Ejemplos prácticos de clientes remotos incluyen:

  • administrando una máquina remota gráficamente
  • corriendo una simulación de cómputo intensivo en una máquina Unix remota y mostrando los resultados por pantalla en una de escritorio Windows
  • ejecutar software gráfico en varias máquinas al mismo tiempo, controlados por una sola pantalla, teclado y ratón.
Other Languages
čeština: X Window System
Ελληνικά: X Window System
français: X Window System
עברית: X11
Հայերեն: X Window System
Bahasa Indonesia: X Window System
íslenska: X-gluggakerfið
italiano: X Window System
日本語: X Window System
lietuvių: X Window System
latviešu: X Window System
Bahasa Melayu: X Window System
Nederlands: X Window System
norsk nynorsk: X Window System
norsk bokmål: Vindussystemet X
português: X Window System
română: X Window System
русский: X Window System
Simple English: X Window System
slovenčina: X Window System
slovenščina: X Window System
српски / srpski: X Window System
українська: X Window System
Tiếng Việt: Hệ thống X Window