Xlib
Тип | бібліотека |
---|---|
Розробник | X.Org Foundation |
Перший випуск | ~1985 |
Операційна система | GNU/Linux[d] і BSD[d] |
Мова програмування | C |
Ліцензія | Expat licensed[1], X11 licensed[1] і Historical Permission Notice and Disclaimerd[1] |
Онлайн-документація | x.org/releases/current/doc/libX11/libX11/libX11.html |
Репозиторій | gitlab.freedesktop.org/xorg/lib/libx11 |
Вебсайт | www.x.org/docs/X11/xlib.pdf |
Xlib (libX11, X library — бібліотека X) — програмна бібліотека функцій клієнта системи X Window (X11), написана на мові Сі. Містить функції для взаємодії з так званим X-сервером. Бібліотека дозволяє використовувати вищий рівень абстракції, без знання деталей роботи основного протоколу системи X Window.
Деякі користувацькі програми використовують Xlib безпосередньо (наприклад, Opera), інші використовують спеціальні інструментарії «віджетів» — «надбудови» над базовою бібліотекою Xlib:
Бібліотека Xlib з'явилася близько 1985 року і натепер використовується як основа і як основний графічний інтерфейс користувача в багатьох Юнікс-подібних операційних системах.
Як альтернативу можна відзначити бібліотеку XCB, спробу розробки заміни Xlib.
Функції XLib можуть бути згруповані в декілька категорій:
- Операції управління з'єднанням з X сервером, такі як XOpenDisplay, XCloseDisplay
- Запити X серверу, такі як XCreateWindow, XCreateSimpleWindow, XCreateGC, XCreateColomap
- Операції клієнтської частини, такі як управління подіями: XNextEvent, або операції з локальними даними XCreateImage
Наступний приклад програми встановлює з'єднання з X сервером і виводить на екран вікно з привітанням:
/*
Компілюється таким рядком: cc test.c -o test -lX11
*/
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
extern int errno;
int main (void) {
Display *d;
Window w;
XEvent e;
char *msg = "Hello, World!";
int s;
/* З'єднатися з X сервером, якщо X сервер на віддаленій машині
* слід дозволити на машині, де запущений X Server
* віддалені з'єднання командою xhost+ (дивись man xhost)
*/
if ((d = XOpenDisplay(getenv("DISPLAY"))) == NULL) {
printf ("Can't connect X server: %s\n", strerror (errno));
exit (1);
}
s = DefaultScreen (d);
/* Створити вікно */
w = XCreateSimpleWindow (d, RootWindow (d, s), 10, 10, 200, 200, 1,
BlackPixel (d, s), WhitePixel (d, s));
/* На які події будемо реагувати */
XSelectInput (d, w, ExposureMask | KeyPressMask);
/* Вивести вікно на екран */
XMapWindow (d, w);
/* Нескінчний цикл обробки подій */
while (1) {
XNextEvent (d, &e);
/* Перерисувати вікно */
if (e.type == Expose) {
XFillRectangle (d, w, DefaultGC (d, s), 20, 20, 10, 10);
XDrawString (d, w, DefaultGC(d, s), 50, 50, msg, strlen (msg));
}
/* При натисканні кнопки-вихід */
if (e.type == KeyPress)
break;
}
/* Закрити з'єднання з X сервером */
XCloseDisplay(d);
return 0;
}
Клієнт (програма) створює з'єднання з X сервером функцією XOpenDisplay, в яку передається вказівник на DISPLAY, визначений через змінну середовища виконання. У UNIX це можна зробити командою export DISPLAY = ".0:0". Як змінну DISPLAY можна вказати і віддалену машину з запущеним X сервером. Функція (макрос) DefaultScreen вибирає поточний екран (в X Window може бути декілька екранів), XCreateSimpleWindow створює вікно, а XSelectInput визначає події, на які вікно має реагувати. XMapWindow виводить вікно на екран, а XNextEvent вибирає з черги подію, яку вище було визначено. При подію Expose у вікні малюється прямокутник і виводиться рядок "Hello World!". При натисканні клавіші на клавіатурі програма завершує роботу.
Xlib створено для Unix-подібних операційних систем, тому інших платформ було створено власні реалізації:
- для Windows: Cygwin, WSL
- для Mac OS: XQuartz[en]
- для iOS: Cydia
- для Haiku: Xlibe[2] (створена на основі експериментальної BeXlib для BeOS[3])
- для Android: androix-lib-libx11[4], libx11-android[5], Termux (з плагіном Termux X11[6])
- python-xlib — імплементація Xlib на мові Python[7][8]
- ↑ а б в https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/COPYING
- ↑ waddlesplash (29 серпня 2024), waddlesplash/xlibe, процитовано 8 вересня 2024
- ↑ Xlib for BeOS. SourceForge.JP[en] (яп.).
- ↑ tmzt (20 жовтня 2015), tmzt/androix-lib-libX11, процитовано 8 вересня 2024
- ↑ Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com. Процитовано 8 вересня 2024.
- ↑ termux/termux-x11, Termux, 8 вересня 2024, процитовано 8 вересня 2024
- ↑ The Python X Library. python-xlib.sourceforge.net. Процитовано 8 вересня 2024.
- ↑ python-xlib/python-xlib, python-xlib, 5 вересня 2024, процитовано 8 вересня 2024
- (англ.) Керівництво з програмування з бібліотекою Xlib
- (англ.) Список функцій бібліотеки Xlib [Архівовано 1 квітня 2021 у Wayback Machine.]
- (англ.) Kenton Lee's pages on X Window and Motif [Архівовано 20 травня 2013 у Wayback Machine.]
- (англ.) Підручник Xlib [Архівовано 16 березня 2012 у Wayback Machine.]
- (англ.) Докладний навчальний курс Xlib
- (англ.) Використання Xlib для створення скрінсейвера [Архівовано 19 березня 2012 у Wayback Machine.]
- (рос.) Xlib - интерфейс с X Window на мові C
- (рос.) Програмування з Xlib на C++
- (рос.) Програмування в середовищі X Window на основі бібліотеки Xlib [Архівовано 4 січня 2012 у Wayback Machine.]