¿ Qué es X ?
X Window Systems, X Window o simplemente X es un sistema de ventanas orientado
a red (network-based window system), independiente del hardware y del sistema
operativo y considerado ampliamente como el estandar en este contexto.
X es un sistema extremadamente complejo, lo que en gran parte se debe a que debe
correr sobre gran variedad de configuraciones hardware y software, así
como de periferia de visualización. Existen implementaciones de X que se
ejecutan sobre prácticamente cualquier máquina, desde PC's o
Macintosh hasta Cray pasando por una amplia variedad de máquinas
intermedias. X es ya hoy día un enlace entre máquinas muy dispares
con S.O. muy diferentes.
Origen de X
Nació como un intento de interconexión en red de estaciones de
trabajo gráficas muy diversas con diversos S.O. Proyecto Athena (1984)
de MIT con DEC e IBM.
Solución: Diseño de un sistema de ventanas, basado en el entorno W de
Stanford University, con un entorno gráfico soportado por red e
independiente del hardware de las máquinas que lo soportaban.
En marzo de 1988 se liberó la versión 11 actualización 2
(X11 release 2). El mismo año, la actualización 3, en enero de
1990 la actualización 4, que supuso la explosión de su
difusión, y en 1992, la actualización 5.
¿ Por qué el éxito de X ?
b) X es un entorno gráfico de ventanas que nació en un momento en
el que el mercado comenzó a demandar interfaces gráficas de usuario
(GUI).
c) X se ha beneficiado también del éxito de Unix como S.O., aunque
X no se diseñó específicamente para este.
d) X es transportable, debido a que existen versiones para casi cualquier
plataforma. El interface con C es prácticamente el mismo para cualquiera
de las implementaciones.
e) X, a nivel de ejecución y debido a su naturaleza de protocolo de red y
a su independencia del SO, puede ejecutarase en una máquina y sacar
resultados en otra.
f) Varios programas pueden utilizar los mismos recursos (raton, teclado,
pantalla grafíca).
Para que la ejecución de los programas no tenga de efectuarse en la misma
máquina en la que se procede a la visualización, X se
diseñó, como se ha dicho, como un protocolo de red, es decir, un
conjunto de peticiones (request) y réplicas (replies) entre dos
procesos. Esos procesos son el cliente (client) y el servidor (server).
Un cliente es un programa de usuario o aplicación. El servidor X
actúa como intermediario entre los clientes y los recursos locales como
teclado, pantalla o ratón. El servidor aisla a los clientes de las
diferencias y especificidades que se presentan entre distinto hardware,
manejadores de dispositivos (device drivers) o S.O.
Las tareas asignadas al servidor son:
3) Paso a los clientes de la información de entrada a
través de mensajes de red denominados eventos (events)
provenientes de presión de teclas, movimientos de ratón,
etc. El servidor gestiona el paso adecuado de cada evento al cliente
correspondiente.
4) Mantenimiento de las estructuras de datos, ventanas y fuentes, a los que los clientes se refieren por números de identificación (ID numbers).
Display: es sinónimo de servidor y se suele hablar del display server.
Pantalla (screen): es el hardware donde los datos gráficos se vuelcan.
No es sinónimo de display. De hecho, un mismo servidor puede controlar
múltiples pantallas.
Clientes: conjunto de programas que vuelcan datos en pantallas manejadas por el
mismo servidor. Los clientes pueden correr en la misma máquina que el
servidor o en otras distintas.
Protocolo X: protocolo de comunicación en red básico del entorno
X. Corre encima de protocolos de red de bajo nivel que permiten
comunicación bidireccional. Los ejemplos más comunes son TCP/IP
y DECnet.
Window Manager: Es un cliente especial que gestiona las principales ventanas de
aplicaciones en un display server. Su cometido es mediar en las demandas
competitivas de los recursos físicos del display, como son espacio
de pantalla, colores o teclado. Este cliente gestiona cosas como, el
despazamiento de ventanas en la pantalla (screen), sus cambios de
tamaño, el arranque de nuevas aplicaciones, el aspecto visual de las
ventanas en cosas como si se permite su solapamiento o ocultamiento, etc.
Jerarquía del Software X
La figura muestra los diferentes niveles en los que es posible programar
aplicaciones X. El nivel más bajo de interface con X en lenguaje C es
Xlib, que permite el acceso a todas las posibilidades del protocolo X, pero la
programación en este nivel no es de lo más amigable posible.
Xt se construye sobre Xlib. Xt es una capa orientada a objetos que soporta la
abstracción de interface de usuario denominada widget.
Un widget es un trozo de código configurable y reutilizable que opera
independientemente de la aplicación que lo usa, salvo las interacciones
predefinidas. widget set es una colección de widgets que se corresponden
con conmponentes de la interface de usuario con una apariencia concreta. Los
widgets permiten aislar el código de aplicación del de la
interface de usuario, y suministran elementos básicos de esta, listos
para su uso como pueden ser, botones, barras deslizantes (scrollbars), etc.
En la figura, las zonas más oscuras corresponden a los niveles de X que
son estandar del Consorcio X. Los widget sets no están disponibles en
las distribuciones libres de X, sino que los suministran directamente, a un
precio reducido, los vendedores de equipos.
El primer programa
Programar en X puede resultarnos duro en un principio, y por ello pienso que
la mejor manera de irnos acostumbrándonos a él es acudir a
ejemplos básicos que encontramos en la bibliografía. En el
laboratorio encontrarás los siguientes manuales:
El primer manual que el principiante debe abordar
De O'Reilly & Associates, Inc.(reconocidos por la X de la portada)
De Open Software Foundation
Con todas estas herramientas acudimos a por el primer programita, en los inicios
es aconsejable ir identificando las similitudes en las estructuras de los
distintos fuentes, en lugar de ir estudiando cada parámetro de cada
rutina referenciada que aparece en el listado.
Todos los fuentes de los ejemplillos los puedes encontrar en /u/home/alumnos
/ejem, o bien recuperar desde estas páginas.
Ejecutando ej1, cuyo fuente es
ej1.c nos
aparece una ventanita diminuta, a la que por otro lado podemos ampliar su
tamaño como al resto de las del entorno.
Un detalle importante es la compilación, como no es un comando
sencillo de teclear se emplean
scriptso ficheros
makefile, con lo
que se ahorra la tediosa tarea de teclear una y otra vez una larga
cadena de comandos y opciones.
En el listado descubrimos que han sido necesarias cinco llamadas para
obtener la ventanita. Debe notarse que no todas comienzan de igual forma,
si la llamada comienza por Xm es del nivel de Motif, si es por Xt de Xtoolkit,
y po r último si empieza con X pertenece al nivel más básico.
Quizás el detalle más notorio es que toda aplicación
termina entrando en un bucle infinito que espera por eventos o acciones
que el usuario produce sobre la interface, es decir, picamos un botón
otra ventana pasa por encima de la nuestra, etc.
Otra novedad son los widgets, son objetos creados por defecto en Motif que
probablemente satisfarán muchas de nuestras necesidades para una
interface.
Los atributos o recursos de los widgets (resources)
Nuestro segundo ejemplo,
ej2.c,
nos ofrece
De nuevo hemos creado una ventana, pero tiene algunas diferencias a la anterior,
no podremos cambiarle su tamaño, el fondo es negro, aparece con unas
dimensiones preestablecidas. Todos esos cambios los hemos provocado
alterando los valores de los atributos del widget que existían por
defecto, en el listado en contramos las llamadas a XtSetArg, que
indican los valores de los atributos. (Para escoger el color se utiliza
la rutina GetPixel tomada literalmente de la bibliografía).
Nuevos widgets
Los widgets tienen además de una apariencia predefinida un conjunto
de atributos para tareas específicas. Por ejemplo las &aaacute;reas de dibujo
(DrawingArea) están pensadas para trabajar sobre ellas suponiendo
que vamos a pintar sobre ellas, se le atribuyen acciones para ello.
El tercer ejemplo
ej3.c,
crea una de ellas, en color blanco.
Aparecen las estructuras jerarquizadas y los conceptos de padre e hijo, así como los anclajes (attachment) cuando el padre es un form.
Una aplicación sencilla
Nuestro cuarto ejemplo
ej4.c,
supone un salto cualitativo, aparecen nuevos widgets como la
barra de menú,
el men&u descolgable, los botones, etc. Pero lo más importante es
que ahora podemos interactuar con la ventana, escogiendo una opción
dentro de la barra, podemos picando en el área de dibujo generar
líneas, polígonos, ... A la zona de dibujo se le asocian
acciones a llevara cabo ante determinados sucesos que ocurren mientras
protagoniza el bucle infinito de espera, los widgets tienen eventos y
callbacks asociados, se habilitan para el widget y cuando
ocurre se invoca a la rutina especificada, por ejemplo un evento puede
ser picar un botón del ratón dentro del área, nos
interesan datos del evento, como el pixel donde ocurrió, y por eso
lo identificamos como un evento. cuando no ocurre eso sino que lo que
importa es solo la acción (picar un botón de menú)
utilizamos un callback, aparecen dos en el ejemplo
XmNactivateCallback para los botones del menú, y
XmNexposeCallback que detecta si otra ventana se superpone a la nuestra,
borrando consecuentemente la zona de dibujo.
El ejemplos final,
ej5.c,
simplemente reduce código aglutinando rutinas
que usamos repetidas veces (nuestro nivel personal por encima del Motif).
Una altareción a dicho ejemplo es
ej6.c,
en el mismo se introduce el widget MainWindow que asume una cierta
estructura que coincide con la de nuestra aplicación, es decir,
barra de menú, zona de dibujo ...
Podemos elaborar nuestro propio nivel superior
a) X es un entorno abierto, ya que el propietario de los derechos es MIT, que
lo distribuye libremente. De hecho, los fuentes son gratuitos. Por ello, quien
desarrolla en X no está atado a ninguna firma comercial en particular.
Componentes lógicos de X
1) Gestión del acceso al display por múltiples clientes.
2) Interpretación de los mensajes de red o peticiones (requests)
provenientes de los clientes y actuación en consecuencia.
Algunos mensajes solictan al servidor la ejecución de tareas
como, por ejemplo, mover una ventana. Otros simplemente solicitan
información al servidor.
Otras Definiciones



Comentarios, críticas, sugerencias y demás a
modesto@dis.ulpgc.es
The GIAS Group e-mail:
modesto@dis.ulpgc.es