Xlib

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 і інші бібліотеки, що її використовують

Xlib (libX11, X library — бібліотека X) — програмна бібліотека функцій клієнта системи X Window (X11), написана на мові Сі. Містить функції для взаємодії з так званим X-сервером. Бібліотека дозволяє використовувати вищий рівень абстракції, без знання деталей роботи основного протоколу системи X Window.

Деякі користувацькі програми використовують Xlib безпосередньо (наприклад, Opera), інші використовують спеціальні інструментарії «віджетів» — «надбудови» над базовою бібліотекою Xlib:

  • Вбудовані засоби (Xt)
  • Набір віджетів Athena (Xaw)
  • Motif
  • GTK+
  • Qt (версія для X11)
  • wxWidgets

Бібліотека Xlib з'явилася близько 1985 року і натепер використовується як основа і як основний графічний інтерфейс користувача в багатьох Юнікс-подібних операційних системах.

Як альтернативу можна відзначити бібліотеку XCB, спробу розробки заміни Xlib.

Функції 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-подібних операційних систем, тому інших платформ було створено власні реалізації:

Примітки

  1. а б в https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/COPYING
  2. waddlesplash (29 серпня 2024), waddlesplash/xlibe, процитовано 8 вересня 2024
  3. Xlib for BeOS. SourceForge.JP[en] (яп.).
  4. tmzt (20 жовтня 2015), tmzt/androix-lib-libX11, процитовано 8 вересня 2024
  5. Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com. Процитовано 8 вересня 2024.
  6. termux/termux-x11, Termux, 8 вересня 2024, процитовано 8 вересня 2024
  7. The Python X Library. python-xlib.sourceforge.net. Процитовано 8 вересня 2024.
  8. python-xlib/python-xlib, python-xlib, 5 вересня 2024, процитовано 8 вересня 2024

Посилання