encyklopedia.run.place

Xlib

Xlib – biblioteka programistyczna zapewniająca interfejs w języku C do komunikacji z systemem X Window System. Biblioteka ta pozwala aplikacjom na tworzenie i zarządzanie oknami, obsługę zdarzeń wejściowych, rysowanie grafiki oraz współpracę z menedżerem okien.

Historia

Projekt X Window System powstał w 1984 roku w ramach prac w MIT. Pierwsza wersja biblioteki Xlib została udostępniona razem z X11 w 1987 roku. Od tego czasu Xlib stała się de facto standardem programistycznym dla aplikacji graficznych działających w środowisku X, choć później pojawiły się alternatywy, takie jak XCB czy GTK+.

Podstawowa architektura

Xlib działa jako warstwa pośrednia pomiędzy aplikacją a serwerem X (X Server). Główne elementy architektury to:

  • Display – struktura opisująca połączenie z serwerem X.
  • Window – identyfikatory okien tworzonych lub zarządzanych przez aplikację.
  • Pixmap – bufor graficzny wykorzystywany do off‑screen rendering.
  • GC (Graphics Context) – kontekst graficzny przechowujący atrybuty rysowania, takie jak kolor, styl linii czy czcionka.
  • Event Loop – pętla przetwarzająca zdarzenia (klawiatura, mysz, eksponowanie okna itp.).

Kluczowe funkcje

Biblioteka Xlib udostępnia setki funkcji, z których najważniejsze grupy to:

Inicjalizacja i zamknięcie połączenia
XOpenDisplay(), XCloseDisplay()
Tworzenie i zarządzanie oknami
XCreateWindow(), XMapWindow(), XDestroyWindow()
Rysowanie podstawowych elementów
XDrawLine(), XDrawRectangle(), XFillArc(), XCopyArea()
Obsługa zdarzeń
XNextEvent(), XSelectInput(), XFlush()
Obsługa czcionek i tekstu
XLoadFont(), XDrawString()
Obsługa zasobów i koloru
XAllocColor(), XSetBackground(), XSetForeground()

Programowanie w Xlib

Aby napisać prostą aplikację w Xlib, potrzebny jest następujący schemat:

#include <X11/Xlib.h>
int main()
{
    Display *d = XOpenDisplay(NULL);
    if (!d) return 1;

    int screen = DefaultScreen(d);
    Window w = XCreateSimpleWindow(d, RootWindow(d, screen),
                                   100, 100, 400, 300, 1,
                                   BlackPixel(d, screen), WhitePixel(d, screen));
    XSelectInput(d, w, ExposureMask | KeyPressMask);
    XMapWindow(d, w);

    XEvent e;
    while (1) {
        XNextEvent(d, &e);
        if (e.type == Expose) {
            XFillRectangle(d, w, DefaultGC(d, screen), 20, 20, 100, 100);
        }
        if (e.type == KeyPress) break;
    }

    XCloseDisplay(d);
    return 0;
}

Przykład powyżej otwiera połączenie z serwerem X, tworzy okno, nasłuchuje zdarzeń eksponowania oraz klawiszy i rysuje prostokąt.

Alternatywy i rozwinięcia

Chociaż Xlib jest wciąż szeroko stosowany, współczesny rozwój X przyniósł kilka alternatyw:

  • XCB (X C Binding) – lżejsza, bardziej asynchroniczna biblioteka, oferująca lepszą wydajność i prostszą obsługę wątków.
  • Xt (X Toolkit Intrinsics) – warstwa pośrednia umożliwiająca tworzenie widgetów i bardziej rozbudowanych interfejsów.
  • GTK+ i Qt – wysokopoziomowe biblioteki GUI opierające się na Xlib lub XCB, dostarczające gotowe komponenty interfejsu.

Obecny status i przyszłość

Biblioteka Xlib jest wciąż utrzymywana jako część X.Org – otwarto‑źródłowego wdrożenia X Window System. Wraz z migracją wielu środowisk graficznych na Wayland, Xlib pozostaje kompatybilna dzięki warstwie XWayland, która emuluje serwer X w środowisku Wayland.

Powiązane pojęcia

X Window System | X Server | X Client | XCB | Wayland | XWayland | C | Unix