Введение в систему X
Если вы когда-либо применяли оконную систему рабочего стола в ОС Linux, скорее всего вы уже использовали графическую систему X с открытым программным кодом. Одна из наиболее передовых и в результате разочаровывающих характеристик X — жесткая привязка к идеологии “инструментов, а не политики”. Это означает, что в системе X нет определения какого-либо пользовательского интерфейса, но есть средства для его создания. Вы вольны создавать целиком собственную среду рабочего стола, экспериментируя и вводя новшества при желании. Но это же свойство долгое время тормозило разработку пользовательских интерфейсов в системах Linux и Unix. Для заполнения этой пустоты возникли два проекта рабочего стола, предпочитаемые пользователя Linux: Gnome и KDE. Рабочий стол ОС Linux, тем не менее, не ограничивается системой X. В действительности рабочий стол в Linux — это довольно расплывчатая субстанция без определенной версии, выпущенной в рамках одного проекта или какой-либо группой специалистов. Современная установка содержит мириады библиотек, утилит и приложений, которые все вместе называют “рабочим столом”.
У системы X, первоначально разработанной в MIT (массачусетский технологический институт) в начале 1980 гг, длинная и яркая история. Она создавалсь как унифицированная оконная система для высокопроизводительных рабочих станций того времени, которые были очень дорогими перемалывающими огромные объёмы чисел чудовищами.
Когда наступили 1990 гг. и цены на оборудование упали, энтузиасты перенесли систему X не недорогие домашние компьютеры PC, этот проект стал называться XFree86 (процессоры PC, выпускавшиеся корпорацией Intel и другими компаниями, были известны процессоры x86), и сегодня вместе с системой Linux распространяются потомки проекта XFree86, а в большинстве дистрибутивов Linux применяется вариант системы X, названный X.Org.
X Window System разделена на компоненты аппаратного и программного уровней, называемые X-сервером и X-клиентом. Эти компоненты взаимодействуют с помощью протокола с легко угадываемым названием “X-протокол”. В следующих разделах рассматривается по очереди каждый из этих компонентов.
X-сервер
X-сервер запускается на пользовательской локальной машине и выполняет низкоуровневые операции прорисовки графического экрана. Присутствие в названии слова “сервер” часто смущает: X-сервер выполняется на вашем настольном ПК. X-клиенты могу запускаться на вашем настольном ПК или на самом деле выполняться на других компьютерах в вашей сети, включая серверы. Если подумать, обратная терминология не лишена смысла, но часто кажется применяемой задом наперед.
Поскольку X-сервер напрямую общается с видеокартой, вы должны применять X-сервер, соответствующий вашей видеокарте, и для него следует задавать подходящее разрешение, скорость обновления экрана, количество цветов и т. д. Файл конфигурации называется xorg.conf
или Xfree86Config
. В прошлом вы обычно должны были вручную редактировать файл конфигурации, чтобы добиться корректной работы системы X. К счастью, современные дистрибутивы Linux автоматически определяют нужные установочные параметры, экономя время пользователя и избавляя его от решения головоломок!
X-сервер ждет ввод пользователя от мыши и клавиатуры и передает нажатия клавиш и щелчки кнопками мыши приложениям, X-клиентам. Эти сообщения называют событиями; они служат основными элементами программирования GUI. Позже в этой главе мы подробно рассмотрим события и их логическое расширение GTK+, сигналы.
X-клиент
X-клиенты — это любая программа, использующая X Window System как GUI. Примерами могут служить xterm, xcalc и более сложные приложения, например, Abiword. X-клиент ждет события пользователя, посылаемые X-сервером, и отвечает на них отправкой обратно серверу сообщений об обновлении изображений.
Примечание
X-клиент необязательно должен быть на той же машине, что и X-сервер
X-протокол
X-клиент и X-сервер взаимодействуют с помощью X-протокола, который позволяет клиенту и серверу быть разделенными сетью. Например, вы можете запустить приложение X-клиент с удаленного компьютера через Интернет или шифруемую виртуальную частную сеть (Virtual Private Network, VPN). В большинстве персональных систем Linux X-клиенты и X-сервер работают в одной и той же системе.
Xlib
Xlib — это библиотека, неявно используемая X-клиентом для генерации сообщений X-протокола. Она предоставляет API очень низкого уровня, позволяющий клиенту отображать простейшие элементы на X-сервере и откликаться на простейший ввод. Мы должны подчеркнуть, что Xlib — это библиотека очень низкого уровня, и создание с ее применением даже чего-либо столь же простого, как меню, — невероятно трудоемкий процесс, требующий сотен строк программного кода.
Разработчик GUI не может эффективно программировать непосредственно с помощью Xlib. Вам нужен API, делающий легким и простым создание таких элементов GUI, как меню, кнопки и раскрывающиеся списки. Говоря кратко, это роль играет комплект инструментальных средств или элементов интерфейса (toolkit).
Комплекты инструментов (toolkits)
Комплект инструментов или элементов интерфейса — это библиотека GUI, которую X-клиенты применяют для значительного упрощения создания окон, меню, кнопок и т. п. С помощью комплекта инструментальных средств вы можете создавать кнопки, меню, фреймы и тому подобное с помощью вызовов одной функции. Общий термин для обозначения элементов GUI, подобных перечисленным, — виджеты (widgets), универсальный элемент, который вы найдете во всех современных библиотеках GUI.
Существует масса комплектов инструментов для системы X, из которых вы можете выбирать, и каждый из них обладает определенными достоинствами и недостатками. На каком остановиться — важное проектно решение для вашего приложения, и при выборе следует учитывать следующие факторы.
Для кого предназначено ваше приложение?
Будут ли установлены библиотеки комплекта инструментов у ваших пользователей?
Перенесены ли комплекты инструментов в другие популярные операционные системы?
Какой лицензией программного обеспечения пользуется комплект инструментов и согласуется ли она с предполагаемым вами использованием?
Поддерживает ли комплект инструментов ваш язык программирования?
Современный ли внешний вид и реализация у комплекта инструментов?
На протяжении многих лет самыми популярными комплектами инструментальных средств были Mitif, OpenLook и Xt, но они уступили технически более совершенным комплектам GTK+ и Qt, формирующим основу рабочих столов GNOME и KDE соответственно.
Оконные менеджеры
Последний компонент X-мозайки — оконный менеджер или диспетчер, который отвечает за расположение окон на экране. Оконные менеджеры часто поддерживают отдельные “рабочие области”, на которые делится рабочий стол, увеличивая область экрана, с который вы можете взаимодействовать. Оконный менеджер также отвечает за графическое оформление всех окон, состоящее, как правило, из рамки и полосы заголовка с пиктограммами максимизации, минимизации и закрытия окна. Оконные менеджеры обеспечивают частично внешний вид рабочего стола, например заголовки окон.
К широко распространенным относятся следующие оконные менеджеры:
Mutter (до него был Metacity) — оконный менеджер, используемый по умолчанию для рабочего стола GNOME;
KWin — оконный менеджер, применяемый по умолчанию для рабочего стола KDE;
Openbox — разработанный для экономии ресурсов и запускаемый на более старых и медленных системах;
Enlightenment — оконный менеджер, отображающий превосходную графику и спецэффекты.
Как и всё в системе X, оконные менеджеры можно переключать. Тем не менее, большинство пользователей запускает оконный менеджер, входящий в их поставку среды рабочего стола.
Другие способы создания GUI — платформно-независимые оконные API
Следует упомянуть и другие способы создания GUI, не характерные для ОС Linux, — существуют языки с собственной поддержкой GUI, функционирующей под управлением Linux.
Язык Java поддерживает программирование GUI с помощью Swing и более старых API AWT. Внешнее оформление GUI на языке Java понравится не всем и на более старых машинах интерфейс может восприниматься как громоздкий и медленно реагирующий. Огромное преимущество Java заключается в том, что единожды откомпилированный код на языке Java выполняется неизменным на любой платформе с виртуальной машиной Java (Java Virtual Machine), которая включает Linux, Windows, Mac OS и мобильные устройства. Дополнительную информацию см. на Web-сайте http://www.oracle.com/technetwork/java/index.html.
Язык программирования C# очень похож на язык Java. В систему Linux общеязыковая исполняющая среда (C# Common Language или CLR) пришла из проекта Mono, см. Web-сайт http://www.mono-project.com. C# на платформе Mono поддерживает модешь программирования Windows Forms, применяемую в Windows, и специальную привязку к комплекту инструментов GTK+, названную Gtk#.
Tcl/Tk — язык сценариев, отлично подходящий для быстрой разработки интерфейсов GUI и работающий с X, Windows и Mac OS. Он очень удобен для быстрого макетирования или маленьких утилит, нуждающихся в простоте и удобстве сопровождения сценария. Все подробности можно найти на Web-сайте http://tcl.tk.
Python — тоже язык сценариев. Вы можете применять Tk, часть Tcl/Tk, из Python или программировать в привязке Python к GTK+, разрабатывая программы GTK+ на языке Python. Также есть привязка к Qt — PyQt. Дополнительную информацию о языке Python см. на Web-сайте https://www.python.org
Perl — еще один популярный язык сценариев в Linux. Вы можете применять Tk, часть Tcl/Tk, в языке Perl как Perl/Tk. Дополнительную информацию о Perl см. на Web-сайте https://www.perl.org
За платформную независимость, которую приносят эти языки, приходится платить. Совместно использование данных их собственными приложениям — например, применение операции перетаскивания мышью (drag and drop) — затруднено, и сохранение конфигурации обычно следует выполнять специфическим, а не стандартным способом, характерным для рабочего стола. Иногда поставщики программного обеспечения на Java хитрят, включая в поставку платформно-зависимые расширения для того, чтобы избежать подобных проблем.
Назад: Программирование в GNOME с помощью GTK+
Вернуться на главную страницу
Далее: Введение в GTK+