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