Xlib

Поделись знанием:
Перейти к: навигация, поиск

Xlib (X library, рус. библиотека «икс») — библиотека функций клиента системы X Window, написанная на языке Си.

Содержит функции для взаимодействия с т. н. X-сервером. Библиотека позволяет использовать более высокий уровень абстракции, без знания деталей работы основного протокола системы X Window.

Некоторые пользовательские приложения используют Xlib напрямую (например, Opera), другие используют специальные инструментарии «виджетов» - «надстройки» над базовой библиотекой Xlib.

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

Библиотека XCB - попытка разработки замены Xlib.



Функции XLib

Функции XLib могут быть сгруппированы в несколько категорий:

  1. Операции управления соединением с X сервером, такие как XOpenDisplay, XCloseDisplay
  2. Запросы X серверу, такие как XCreateWindow, XCreateSimpleWindow, XCreateGC, XCreateColomap
  3. Операции клиентской части, такие как управления событиями: 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 = XDefaultScreen(d);

   /* Создать окно */
   w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 200, 200, 1,
                           XBlackPixel(d, s), XWhitePixel(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"

Ссылки

  •  (англ.) [www.sbin.org/doc/Xlib Руководство по программированию с использованием библиотеки Xlib]
  •  (англ.) [tronche.com/gui/x/xlib/function-index.html Список функций библиотеки Xlib]
  •  (англ.) [www.rahul.net/kenton/bib.html Kenton Lee's pages on X Window and Motif]
  •  (англ.) [tronche.com/gui/x/xlib-tutorial/ Учебник по Xlib]
  •  (англ.) [users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html Подробный обучающий курс Xlib]
  •  (англ.) [www.dis.uniroma1.it/%7eliberato/screensaver Использование Xlib для создания скринсейвера]
  •  (рус.) [motif.opennet.ru/book3.html Xlib - интерфейс с X Window на языке C](ссылка нерабочая!)
  •  (рус.) [gazette.linux.ru.net/lg78/articles/rus-tougher.html Программирование с Xlib на C++] (недоступная ссылка с 14-05-2013 (3997 дней) — история)
  •  (рус.) [dfe3300.karelia.ru/koi/posob/X/index.html Программирование в среде X Window на основе библиотеки Xlib]

Отрывок, характеризующий Xlib

– Коко, ты приехал, поди ко мне, дружок! – сказал голос графини из гостиной. Николай подошел к матери, поцеловал ее руку и, молча подсев к ее столу, стал смотреть на ее руки, раскладывавшие карты. Из залы всё слышались смех и веселые голоса, уговаривавшие Наташу.
– Ну, хорошо, хорошо, – закричал Денисов, – теперь нечего отговариваться, за вами barcarolla, умоляю вас.
Графиня оглянулась на молчаливого сына.
– Что с тобой? – спросила мать у Николая.
– Ах, ничего, – сказал он, как будто ему уже надоел этот всё один и тот же вопрос.
– Папенька скоро приедет?
– Я думаю.
«У них всё то же. Они ничего не знают! Куда мне деваться?», подумал Николай и пошел опять в залу, где стояли клавикорды.
Соня сидела за клавикордами и играла прелюдию той баркароллы, которую особенно любил Денисов. Наташа собиралась петь. Денисов восторженными глазами смотрел на нее.
Николай стал ходить взад и вперед по комнате.
«И вот охота заставлять ее петь? – что она может петь? И ничего тут нет веселого», думал Николай.
Соня взяла первый аккорд прелюдии.
«Боже мой, я погибший, я бесчестный человек. Пулю в лоб, одно, что остается, а не петь, подумал он. Уйти? но куда же? всё равно, пускай поют!»
Николай мрачно, продолжая ходить по комнате, взглядывал на Денисова и девочек, избегая их взглядов.
«Николенька, что с вами?» – спросил взгляд Сони, устремленный на него. Она тотчас увидала, что что нибудь случилось с ним.
Николай отвернулся от нее. Наташа с своею чуткостью тоже мгновенно заметила состояние своего брата. Она заметила его, но ей самой так было весело в ту минуту, так далека она была от горя, грусти, упреков, что она (как это часто бывает с молодыми людьми) нарочно обманула себя. Нет, мне слишком весело теперь, чтобы портить свое веселье сочувствием чужому горю, почувствовала она, и сказала себе:
«Нет, я верно ошибаюсь, он должен быть весел так же, как и я». Ну, Соня, – сказала она и вышла на самую середину залы, где по ее мнению лучше всего был резонанс. Приподняв голову, опустив безжизненно повисшие руки, как это делают танцовщицы, Наташа, энергическим движением переступая с каблучка на цыпочку, прошлась по середине комнаты и остановилась.
«Вот она я!» как будто говорила она, отвечая на восторженный взгляд Денисова, следившего за ней.
«И чему она радуется! – подумал Николай, глядя на сестру. И как ей не скучно и не совестно!» Наташа взяла первую ноту, горло ее расширилось, грудь выпрямилась, глаза приняли серьезное выражение. Она не думала ни о ком, ни о чем в эту минуту, и из в улыбку сложенного рта полились звуки, те звуки, которые может производить в те же промежутки времени и в те же интервалы всякий, но которые тысячу раз оставляют вас холодным, в тысячу первый раз заставляют вас содрогаться и плакать.
Наташа в эту зиму в первый раз начала серьезно петь и в особенности оттого, что Денисов восторгался ее пением. Она пела теперь не по детски, уж не было в ее пеньи этой комической, ребяческой старательности, которая была в ней прежде; но она пела еще не хорошо, как говорили все знатоки судьи, которые ее слушали. «Не обработан, но прекрасный голос, надо обработать», говорили все. Но говорили это обыкновенно уже гораздо после того, как замолкал ее голос. В то же время, когда звучал этот необработанный голос с неправильными придыханиями и с усилиями переходов, даже знатоки судьи ничего не говорили, и только наслаждались этим необработанным голосом и только желали еще раз услыхать его. В голосе ее была та девственная нетронутость, то незнание своих сил и та необработанная еще бархатность, которые так соединялись с недостатками искусства пенья, что, казалось, нельзя было ничего изменить в этом голосе, не испортив его.
«Что ж это такое? – подумал Николай, услыхав ее голос и широко раскрывая глаза. – Что с ней сделалось? Как она поет нынче?» – подумал он. И вдруг весь мир для него сосредоточился в ожидании следующей ноты, следующей фразы, и всё в мире сделалось разделенным на три темпа: «Oh mio crudele affetto… [О моя жестокая любовь…] Раз, два, три… раз, два… три… раз… Oh mio crudele affetto… Раз, два, три… раз. Эх, жизнь наша дурацкая! – думал Николай. Всё это, и несчастье, и деньги, и Долохов, и злоба, и честь – всё это вздор… а вот оно настоящее… Hy, Наташа, ну, голубчик! ну матушка!… как она этот si возьмет? взяла! слава Богу!» – и он, сам не замечая того, что он поет, чтобы усилить этот si, взял втору в терцию высокой ноты. «Боже мой! как хорошо! Неужели это я взял? как счастливо!» подумал он.