fbpx
Wikipedia

This article needs additional citations for verification. Please help improve this article by . Unsourced material may be challenged and removed.
Find sources: "Xlib"news · newspapers · books · scholar · JSTOR
(September 2018) ()

Xlib (also known as libX11) is an X Window System protocol client library written in the C programming language. It contains functions for interacting with an X server. These functions allow programmers to write programs without knowing the details of the X protocol.

X11-clients use xlib to communicate with the display server.

Few applications use Xlib directly; rather, they employ other libraries that use Xlib functions to provide widget toolkits:

Xlib appeared around 1985[citation needed], and is used in GUIs for many Unix-like operating systems. A re-implementation of Xlib was introduced in 2007 using XCB.

Contents

The role of KMS (Kernel mode-setting), Linux example
Illustrates the Linux graphics stack current as of 2013-08-24
XCB and Xlib are client libraries which implement a display server communications protocol
The display server sits between the kernel (here: Linux kernel) and its clients. It communicates with its clients over a given protocol.
Simple DirectMedia Layer can circumvent Xlib and write directly to framebuffer. An additional port to EGL is also available

The main types of data in Xlib are the Display structure and the types of the identifiers.

Informally, a display is a physical or virtual device where graphical operations are done. The Display structure of the Xlib library contains information about the display, but more importantly it contains information relative to the channel between the client and the server. For example, in a Unix-like operating system, the Display structure contains the file handle of the socket of this channel (this can be retrieved using the ConnectionNumber macro.) Most Xlib functions have a Display structure as an argument because they either operate on the channel or are relative to a specific channel. In particular, all Xlib functions that interact with the server need this structure for accessing the channel. Some other functions need this structure, even if they operate locally, because they operate on data relative to a specific channel. Operations of this kind include for example operations on the event queue, which is described below.

Windows, colormaps, etc. are managed by the server, which means that the data about their actual implementation is all stored in the server. The client operates on these objects by using their identifiers. The client cannot directly operate on an object, but can only request the server to perform the operation specifying the identifier of the object.

The types Windows, Pixmap, Font, Colormap, etc. are all identifiers, which are 32-bit integers (just as in the X11 protocol itself). A client 'creates' a window by requesting that the server create a window. This is done via a call to an Xlib function that returns an identifier for the window, that is, a number. This identifier can then be used by the client for requesting other operations on the same window to the server.

The identifiers are unique to the server. Most of them can be used by different applications to refer to the same objects. For example, two applications connecting with the same server use the same identifier to refer to the same window. These two applications use two different channels, and therefore have two differentDisplay structures; however, when they request operations on the same identifier, these operations will be done on the same object.

The Xlib functions that send requests to the server usually do not send these requests immediately but store them in a buffer, called the request buffer. The term request in this case refers to the request from the client that is directed to the server: the request buffer can contain all kinds of requests to the server, not only those having a visible effect on the screen. The request buffer is guaranteed to be flushed (i.e., all requests done so far are sent to the server) after a call to the functions XSync or XFlush, after a call to a function that returns a value from the server (these functions block until the answer is received), and in some other conditions.

Xlib stores the received events in a queue. The client application can inspect and retrieve events from the queue. While the X server sends events asynchronously, applications using the Xlib library are required to explicitly call Xlib functions for accessing the events in the queue. Some of these functions may block; in this case, they also flush the request buffer.

Errors are instead received and treated asynchronously: the application can provide an error handler that will be called whenever an error message from the server is received.

The content of a window is not guaranteed to be preserved if the window or one of its parts are made not visible. In this case, the application are sent an Expose event when the window of one part of it is made visible again. The application is then supposed to draw the window content again.

The functions in the Xlib library can be grouped in:

  1. operations on the connection (XOpenDisplay, XCloseDisplay, ...);
  2. requests to the server, including requests for operations (XCreateWindow, XCreateGC,...) and requests for information (XGetWindowProperty, ...); and
  3. operations that are local to the client: operations on the event queue (XNextEvent, XPeekEvent, ...) and other operations on local data (XLookupKeysym, XParseGeometry, XSetRegion, XCreateImage, XSaveContext, ...)
Simple Xlib application drawing a box and text in a window. Without window manager decorations.
Simple Xlib application drawing a box and text in a window. With IceWM window manager decorations.

The following program creates a window with a little black square in it:

The client creates a connection with the server by calling XOpenDisplay. It then requests the creation of a window with XCreateSimpleWindow. A separate call to XMapWindow is necessary for mapping the window, that is, for making it visible on the screen.

The square is drawn by calling XFillRectangle. This operation can only be performed after the window is created. However, performing it once may not be enough. Indeed, the content of the window is not always guaranteed to be preserved. For example, if the window is covered and then uncovered again, its content might require being redrawn. The program is informed that the window or a part of it has to be drawn by the reception of an Expose event.

The drawing of the window content is therefore made inside the loop handling the events. Before entering this loop, the events the application is interested in are selected, in this case with XSelectInput. The event loop waits for an incoming event: if this event is a key press, the application exits; if it is an expose event, the window content is drawn. The function XNextEvent blocks and flushes the request buffer if there is no event in the queue.

Xlib does not provide support for buttons, menus, scrollbars, etc. Such widgets are provided by other libraries, which in turn use Xlib. There are two kinds of such libraries:

  • libraries built atop of the X Toolkit Intrinsics library (Xt), which provides support for widgets but does not provide any particular widget; specific widgets are provided by widget set libraries that use Xt, such as Xaw and Motif;
  • libraries that provide widget sets using Xlib directly, without the Xt library, such as the X versions of GTK, Qt, FLTK and fpGUI.

Applications using any of these widget libraries typically specify the content of the window before entering the main loop and do not need to explicitly handle Expose events and redraw the window content.

The XCB library is an alternative to Xlib. Its two main aims are: reduction in library size and direct access to the X11 protocol. A modification of Xlib has been produced to use XCB as a low-level layer.

  1. "XDC2007 Notes". February 9, 2007.
  2. "Display Structure on freedesktop CVS". Tip search for: typedef struct _XDisplay Display.
The Wikibook X Window Programming has a page on the topic of: XLib

Xlib Article Talk Language Watch Edit This article needs additional citations for verification Please help improve this article by adding citations to reliable sources Unsourced material may be challenged and removed Find sources Xlib news newspapers books scholar JSTOR September 2018 Learn how and when to remove this template message Xlib also known as libX11 is an X Window System protocol client library written in the C programming language It contains functions for interacting with an X server These functions allow programmers to write programs without knowing the details of the X protocol XlibDeveloper s X Org FoundationInitial release 1985 citation needed Repositorygitlab wbr freedesktop wbr org wbr xorg wbr lib wbr libx11 wbr gitWritten inCTypeLibraryWebsitewww wbr x wbr org documentation www wbr x wbr org wbr releases wbr current wbr doc wbr libX11 wbr libX11 wbr libX11 wbr htmlX11 clients use xlib to communicate with the display server Few applications use Xlib directly rather they employ other libraries that use Xlib functions to provide widget toolkits X Toolkit Intrinsics Xt Athena widget set Xaw Motif FLTK GTK Qt X11 version Tk SDL Simple DirectMedia Layer SFML Simple and Fast Multimedia Library Xlib appeared around 1985 citation needed and is used in GUIs for many Unix like operating systems A re implementation of Xlib was introduced in 2007 using XCB 1 Contents 1 Data types 2 Protocol and events 3 Functions 4 Example 5 Other libraries 6 References 7 External linksData types EditThe role of KMS Kernel mode setting Linux example Illustrates the Linux graphics stack current as of 2013 08 24 XCB and Xlib are client libraries which implement a display server communications protocol The display server sits between the kernel here Linux kernel and its clients It communicates with its clients over a given protocol Simple DirectMedia Layer can circumvent Xlib and write directly to framebuffer An additional port to EGL is also available The main types of data in Xlib are the Display 2 structure and the types of the identifiers Informally a display is a physical or virtual device where graphical operations are done The Display structure of the Xlib library contains information about the display but more importantly it contains information relative to the channel between the client and the server For example in a Unix like operating system the Display structure contains the file handle of the socket of this channel this can be retrieved using the ConnectionNumber macro Most Xlib functions have a Display structure as an argument because they either operate on the channel or are relative to a specific channel In particular all Xlib functions that interact with the server need this structure for accessing the channel Some other functions need this structure even if they operate locally because they operate on data relative to a specific channel Operations of this kind include for example operations on the event queue which is described below Windows colormaps etc are managed by the server which means that the data about their actual implementation is all stored in the server The client operates on these objects by using their identifiers The client cannot directly operate on an object but can only request the server to perform the operation specifying the identifier of the object The types Windows Pixmap Font Colormap etc are all identifiers which are 32 bit integers just as in the X11 protocol itself A client creates a window by requesting that the server create a window This is done via a call to an Xlib function that returns an identifier for the window that is a number This identifier can then be used by the client for requesting other operations on the same window to the server The identifiers are unique to the server Most of them can be used by different applications to refer to the same objects For example two applications connecting with the same server use the same identifier to refer to the same window These two applications use two different channels and therefore have two different Display structures however when they request operations on the same identifier these operations will be done on the same object Protocol and events EditThe Xlib functions that send requests to the server usually do not send these requests immediately but store them in a buffer called the request buffer The term request in this case refers to the request from the client that is directed to the server the request buffer can contain all kinds of requests to the server not only those having a visible effect on the screen The request buffer is guaranteed to be flushed i e all requests done so far are sent to the server after a call to the functions XSync or XFlush after a call to a function that returns a value from the server these functions block until the answer is received and in some other conditions Xlib stores the received events in a queue The client application can inspect and retrieve events from the queue While the X server sends events asynchronously applications using the Xlib library are required to explicitly call Xlib functions for accessing the events in the queue Some of these functions may block in this case they also flush the request buffer Errors are instead received and treated asynchronously the application can provide an error handler that will be called whenever an error message from the server is received The content of a window is not guaranteed to be preserved if the window or one of its parts are made not visible In this case the application are sent an Expose event when the window of one part of it is made visible again The application is then supposed to draw the window content again Functions EditThe functions in the Xlib library can be grouped in operations on the connection XOpenDisplay XCloseDisplay requests to the server including requests for operations XCreateWindow XCreateGC and requests for information XGetWindowProperty and operations that are local to the client operations on the event queue XNextEvent XPeekEvent and other operations on local data XLookupKeysym XParseGeometry XSetRegion XCreateImage XSaveContext Example Edit Simple Xlib application drawing a box and text in a window Without window manager decorations Simple Xlib application drawing a box and text in a window With IceWM window manager decorations The following program creates a window with a little black square in it Simple Xlib application for creating a window and drawing a box in it gcc input c o output lX11 include lt X11 Xlib h gt include lt stdio h gt include lt stdlib h gt include lt string h gt int main void Display display Window window XEvent event char msg Hello World int s open connection to the server display XOpenDisplay NULL if display NULL fprintf stderr Cannot open display n exit 1 s DefaultScreen display create window window XCreateSimpleWindow display RootWindow display s 10 10 200 200 1 BlackPixel display s WhitePixel display s select kind of events we are interested in XSelectInput display window ExposureMask KeyPressMask map show the window XMapWindow display window event loop for XNextEvent display amp event draw or redraw the window if event type Expose XFillRectangle display window DefaultGC display s 20 20 10 10 XDrawString display window DefaultGC display s 50 50 msg strlen msg exit on key press if event type KeyPress break close connection to the server XCloseDisplay display return 0 The client creates a connection with the server by calling XOpenDisplay It then requests the creation of a window with XCreateSimpleWindow A separate call to XMapWindow is necessary for mapping the window that is for making it visible on the screen The square is drawn by calling XFillRectangle This operation can only be performed after the window is created However performing it once may not be enough Indeed the content of the window is not always guaranteed to be preserved For example if the window is covered and then uncovered again its content might require being redrawn The program is informed that the window or a part of it has to be drawn by the reception of an Expose event The drawing of the window content is therefore made inside the loop handling the events Before entering this loop the events the application is interested in are selected in this case with XSelectInput The event loop waits for an incoming event if this event is a key press the application exits if it is an expose event the window content is drawn The function XNextEvent blocks and flushes the request buffer if there is no event in the queue Other libraries EditXlib does not provide support for buttons menus scrollbars etc Such widgets are provided by other libraries which in turn use Xlib There are two kinds of such libraries libraries built atop of the X Toolkit Intrinsics library Xt which provides support for widgets but does not provide any particular widget specific widgets are provided by widget set libraries that use Xt such as Xaw and Motif libraries that provide widget sets using Xlib directly without the Xt library such as the X versions of GTK Qt FLTK and fpGUI Applications using any of these widget libraries typically specify the content of the window before entering the main loop and do not need to explicitly handle Expose events and redraw the window content The XCB library is an alternative to Xlib Its two main aims are reduction in library size and direct access to the X11 protocol A modification of Xlib has been produced to use XCB as a low level layer References Edit XDC2007 Notes February 9 2007 Display Structure on freedesktop CVS Tip search for typedef struct XDisplay Display External links EditThe Wikibook X Window Programming has a page on the topic of XLibX Org Foundation s official programming documentation including most recent version of Xlib C Language X Interface in several formats A short tutorial on Xlib Manual pages for all Xlib functions Kenton Lee s pages on X Window and Motif A longer tutorial on Xlib Using Xlib for creating a screensaver module Retrieved from https en wikipedia org w index php title Xlib amp oldid 1088251108, wikipedia, wiki, book,

books

, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.