stringtranslate.com

XCB

Los clientes X11 utilizan XCB para comunicarse con el servidor X.
Una vista más completa de la pila de gráficos de Linux
Los programas a menudo utilizan GTK o FLTK o Qt para sus widgets GUI .
Una visión más completa de los componentes de un sistema operativo para computadoras domésticas.

XCB ( X protocol C-language Binding ) es una biblioteca que implementa el protocolo de servidor de pantalla X11 del lado del cliente. XCB está escrito en el lenguaje de programación C y se distribuye bajo la licencia MIT . El proyecto fue iniciado en 2001 por Bart Massey y tiene como objetivo reemplazar a Xlib .

Descripción general

XCB fue diseñado como un reemplazo más pequeño y modernizado para Xlib, anteriormente la biblioteca C principal para comunicarse con el sistema de ventanas X, coincidiendo con una revisión más completa de la implementación de X que tuvo lugar a principios de la década de 2000. [2] Los principales objetivos de XCB son:

La reducción de tamaño requerida se logra principalmente restringiendo el alcance de XCB al manejo del protocolo X y omitiendo la funcionalidad de Xlib, como su extensa biblioteca de utilidades, gran parte de la cual vio poco uso por parte de las aplicaciones. Esto da como resultado una reducción de treinta veces el tamaño de la biblioteca compilada (a partir de 2004). [3] Los objetivos secundarios incluyen hacer que la interfaz C sea asíncrona , facilitando un mejor multihilo y haciendo más fácil la implementación de extensiones (a través de descripciones de protocolo XML ).

Las descripciones del protocolo principal y de extensión están en XML , con un programa escrito en Python que crea los enlaces en C. (Las versiones anteriores usaban XSLT y M4 ).

Otro objetivo es poder utilizar estas descripciones de protocolo para crear documentación de protocolo, más enlaces de lenguaje y stubs del lado del servidor.

Massey y otros han trabajado para demostrar que partes clave de XCB son formalmente correctas utilizando la notación Z. [4] (Desde hace tiempo se sabe que Xlib contiene errores. [5] )

Compatibilidad con Xlib

Xlib/XCB proporciona compatibilidad de interfaz binaria de aplicación con Xlib y XCB, lo que proporciona una ruta de portabilidad incremental. [6] Xlib/XCB utiliza la capa de protocolo de Xlib, pero reemplaza la capa de transporte de Xlib con XCB y proporciona acceso a la conexión XCB subyacente para el uso directo de XCB. Xlib/XCB permite que una aplicación abra una única conexión al servidor de visualización X y utilice tanto XCB como Xlib, posiblemente a través de una mezcla de bibliotecas diseñadas para uno u otro. [7] [8]

Ejemplo

// Aplicación XCB sencilla para abrir una ventana y dibujar un cuadro en ella// Para compilarlo usando GNU, use: // gcc xc -lxcb#incluir <stdio.h> #incluir <stdlib.h> #incluir <xcb/xcb.h>   int principal ( void ) { xcb_conexión_t * c ; xcb_pantalla_t * s ; xcb_ventana_t w ; xcb_gcontext_t g ; xcb_evento_genérico_t * e ; uint32_t máscara ; uint32_t valores [ 2 ]; int hecho = 0 ; xcb_rectángulo_t r = { 20 , 20 , 60 , 60 };                             // abrir conexión al servidor c = xcb_connect ( NULL , NULL ); if ( xcb_connection_has_error ( c )) { printf ( "No se puede abrir la pantalla \n " ); exit ( EXIT_FAILURE ); } // obtener la primera pantalla s = xcb_setup_roots_iterator ( xcb_get_setup ( c ) ). data ;                 // crear contexto de gráficos negros g = xcb_generate_id ( c ); w = s -> root ; mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES ; values ​​[ 0 ] = s -> black_pixel ; values ​​[ 1 ] = 0 ; xcb_create_gc ( c , g , w , mask , values ​​);                       // crear ventana w = xcb_generate_id ( c ); máscara = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK ; valores [ 0 ] = s -> píxel_blanco ; valores [ 1 ] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS ; xcb_create_window ( c , s -> profundidad_raíz , w , s -> raíz , 10 , 10 , 100 , 100 , 1 , XCB_WINDOW_CLASS_INPUT_OUTPUT , s -> raíz_visual , máscara , valores );                              // mapea (muestra) la ventana xcb_map_window ( c , w );   xcb_flush ( c ); // bucle de eventos while ( ! done && ( e = xcb_wait_for_event ( c ))) { switch ( e -> response_type & ~ 0x80 ) { case XCB_EXPOSE : // dibuja o vuelve a dibujar la ventana xcb_poly_fill_rectangle ( c , w , g , 1 , & r ); xcb_flush ( c ); break ; case XCB_KEY_PRESS : // sale al presionar una tecla done = 1 ; break ; } free ( e ); } // cierra la conexión al servidor xcb_disconnect ( c );                                    salir ( SALIDA_EXITO ); }

La operación bit a bit elimina un bit que indica de dónde proviene el evento. [9]a->response_type & ~0x80

XCB tiene una API comparable, pero de nivel ligeramente inferior a Xlib , [10] como se puede ver con este ejemplo.

Descripción del protocolo

Los creadores de XCB han inventado un lenguaje de descripción de interfaz especializado para modelar el protocolo X11 de forma neutral respecto del lenguaje y facilitar la generación de enlaces a otros lenguajes de programación. [ dudosodiscutir ] libxcb en sí mismo se implementa como un generador de código y un pequeño fragmento de C de funciones de utilidad.

Un ejemplo:

<xcb header= "bigreq" extension-xname= "BIG-REQUESTS" extension-name= "BigRequests" extension-multiword= "true" major-version= "0" minor-version= "0" >       < nombre de solicitud= "Habilitar" código de operación= "0" > <respuesta> < bytes de pad = "1" /> < tipo de campo = "CARD32" nombre= "longitud_máxima_de_solicitud" /> </respuesta> </solicitud> </xcb>            

Logo

El logotipo de XCB fue producido por Gearóid Molloy, autor del cómic web Neko the Kitty , y donado al proyecto. [11]

Otros enlaces de idiomas

Notas

  1. ^ "libxcb-1.17.0".
  2. ^ Gettys, James; Packard, Keith (2004). La (re)arquitectura del sistema X Window (PDF) . Proc. Simposio sobre Linux. Vol. 1.
  3. ^ Sharp, Jamey (2004). Cómo se implementa Xlib (y qué estamos haciendo al respecto) (PDF) . Proc. Usenix Annual Techn. Conf., Freenix Track.
  4. ^ Massey y Bauer, 2002.
  5. ^ Sharp y Massey, 2002, §2.4. "Si bien Xlib fue diseñado para soportar aplicaciones con subprocesos, y si bien ese soporte no es inutilizable, existen condiciones de competencia conocidas que no se pueden eliminar sin cambiar la interfaz de Xlib".
  6. ^ Maloney, Ross J. (31 de marzo de 2018). Programación de bajo nivel en X Window: una introducción con ejemplos. Springer. pp. 225–244. ISBN 978-3-319-74250-2. Recuperado el 17 de mayo de 2022 .
  7. ^ "Xlib/XCB: Xlib con transporte XCB". 2008-01-11 . Consultado el 2009-09-11 .
  8. ^ Jamey Sharp y Josh Triplett (26 de noviembre de 2006). "libx11 con Xlib/XCB ahora en fase experimental; por favor, pruebe con sus paquetes". debian-devel-announce (Lista de correo) . Consultado el 11 de septiembre de 2009 .
  9. ^ "Protocolo del sistema X Window". X.Org . Capítulo 1. Formatos de protocolo . Consultado el 22 de marzo de 2024 . Cada evento contiene un código de tipo de 8 bits. El bit más significativo de este código se establece si el evento se generó a partir de una solicitud SendEvent.{{cite web}}: Mantenimiento de CS1: ubicación ( enlace )
  10. ^ Jamey Sharp; Bart Massey (2002), XCL: una capa de compatibilidad de Xlib para XCB, Conferencia técnica anual de USENIX 2002, Freenix Track
  11. ^ Logotipo de Kitty (xcb.freedesktop.org)

Referencias

Enlaces externos