Las “peticiones” son enviadas por un cliente al server para preguntar si puede mejorar alguna aplicación (por ejemplo crear una nueva ventana) y además son devueltos a la persona que los envió para que reciba los datos (Repuestas).Algunas extensiones al protocolo core existente, cada una con sus propias peticiones, respuestas, eventos y errores.Fue diseñado por Bob Scheifer y Jim Gettys, pusieron como principio primordial del proyecto “Crearemos un mecanismo, no una política”.Los elementos gráficos tales como los botones, menús, iconos, etc. pueden ser creados usando subventanas.Como resultado, las ventanas creadas por los clientes se arreglan en forma de un árbol (una jerarquía).Por lo tanto, los clientes no pueden asumir que el almacenamiento de respaldo sea mantenido.El protocolo incluye las peticiones necesarias para que un cliente pueda inspeccionar y cambiar los atributos de una ventana.Los datos acerca de una ventana pueden ser obtenidos corriendo el programa xwininfo.A diferencia de las ventanas, los pixmaps no se muestran automáticamente en la pantalla.[6] Tales fuentes son almacenadas como archivos, y el servidor tiene acceso directamente vía el sistema de archivos local o vía la red desde otro programa llamado servidor de fuente.Los clientes pueden pedir la lista de fuentes disponibles al servidor y pueden solicitar que una fuente sea cargada (si ya no lo está) o descargarla del servidor (si no es usada por otros clientes).Las convenciones del X logical font description[7] especifican cómo las fuentes deben ser nombradas de acuerdo a sus atributos.Estas convenciones también especifican los valores de las propiedades opcionales que pueden estar adjuntas a las fuentes.Cada cliente tiene su propio conjunto de identificadores que puede usar para crear nuevos recursos.Los clientes eligen los identificadores que están en este conjunto de tal manera que no coincidan: dos objetos entre ventanas, pixmaps, fuentes, colormaps, y contextos gráficos, no pueden tener el mismo identificador.Esta posibilidad es explotada, por ejemplo, por la versión X Window de Ghostview: este programa crea una subventana, almacenando su identificador en una variable de entorno, y llama Ghostscript, el cual dibuja el contenido del archivo PostScript para mostrarlo en esta ventana.Sin embargo, antes de cerrar la conexión, un cliente puede solicitar al servidor no destruirlos.Sin embargo, algunos tipos de eventos son enviados a los clientes incluso si no los han pedido específicamente.Esto es posible porque, para cada ventana, el servidor mantiene una máscara de evento separada por cada cliente.Sin embargo, hay algunos tipos de eventos que pueden ser seleccionados solamente por un cliente a la vez para cada ventana.Hay un total de seis clases visuales posibles, cada una identificando una manera diferente para representar un triple RGB con un pixelvalue.Para representar colores con los pixelvalues, todos estos seis mecanismos requieren algunos parámetros adicionales para trabajar.Un tipo visual dado puede ser usado para más exhibiciones y para diferentes profundidades.Por otra parte, los clientes no pueden cambiar o crear nuevos tipos visuales.Particularmente, un colormap está instalado cuando el hardware muestra colores de acuerdo al mismo.Gracias a esta característica, los colormaps estándar pueden ser usados por varias aplicaciones.Este sistema consiste en varias características adicionales en xlib, encontradas en la serie de funciones Xcms*.Los átomos son usados para un número de propósitos, sobre todo relacionados con la comunicación entre diversos clientes conectados con el mismo servidor.La lista de todos los átomos que residiendo en un servidor puede ser impresa usando el programa xlsatoms.En particular, este programa imprime cada átomo (el identificador, es decir, un número) con su nombre (su string asociado).
Un ejemplo de interacción entre un cliente y un servidor.
Anatomía de una ventana
FVWM
. El área blanca es la ventana como ha sido creada y vista por la aplicación cliente.
El programa
xfontsel
permite al usuario ver los
glyphs
de una fuente.
Un ejemplo de evento: cuando una tecla es presionada en una ventana, un evento es generado y se envía a un cliente, dependiendo de su máscara de evento de ventana, y que el cliente puede cambiar.
Esta tecla genera siempre el mismo
keycode
, pero los símbolos
/
,
7
, y
{
impresos están asociados a tres
keysym
diferentes.