Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

X Window -- восполняя пробелы. Часть 3

Андрей Зубинский


Галопирующий стиль еженедельного журнала не позволяет углубляться в сложности и нюансы, поэтому в завершающей части обзора X Window автор будет придерживаться уже ставшего привычным правила: обзорный материал не может и потому не должен обучать, но способен подтолкнуть к изучению...

Несколько жемчужин

Входящие в стандартную поставку X Window утилиты немногочисленны и ознакомиться с ними самостоятельно читателю особого труда не составит. А вот среди множества разработок, зачастую попадающих в класс "антиквариата", выбрать достойные, полезные и позволяющие полноценно использовать потенциал X Window как реальной программной системы непросто.

Одна из главных особенностей X Window -- сетецентрический характер -- естественно, создает угрозу безопасности. Механизмы аутентификации, предусмотренные базовым утилитарным набором X Window, достаточно просты. Фактически они ограничиваются доверительным перечислением имен компьютеров и/или пользователей (так называемая xhost-аутентификация -- по имени соответствующей утилиты) и mit-magick-cookies (MMC или xauth-аутентификация).

xcb, xwit, mxconns и lavaps, несмотря на размеры и простоту, позволяют значительно повысить эффективность и безопасность работы со многими приложениями X Window. Массу привычных вынужденных действий можно автоматизировать, при этом не отягощая излишней функциональностью и без того сложные прикладные программы
Первый механизм хоть и прост, но небезопасен: клиенты, которым "оказано доверие" подключиться к вашему X-серверу, могут практически все. К сожалению, в хорошо защищенных локальных сетях использование только такого механизма способно привести к непредсказуемым последствиям даже не по злому умыслу и не из-за проникновения извне, а по куда более прозаичной причине, например в результате незнания новым сотрудником внутренних административных правил или особенностей настроек различного ПО.

MMC расширяет эти скромные возможности пусть примитивным, но все же более или менее удовлетворительным уточняющим требованием соответствия имени X-сервера и конкретной программы-клиента. Но и такой уровень защиты далеко не всегда надежен.

При учете столь скромных возможностей по защите X Window тем более странным может показаться факт, что весьма полезная утилита mxconns, разработанная в знаменитой CERN (Европейская Организация Ядерных Исследований) -- "родине" WWW и доступная на основе абсолютно либеральной лицензии, остается малораспространенной и почти неизвестной. По сути, mxconns -- это интерактивный виртуальный X-proxy-сервер, позволяющий пользователю рабочей станции или X-терминала как полностью управлять в реальном времени доступом к своим ресурсам с помощью удобного графического интерфейса, так и ненавязчиво "отбивать" подозрительные неаутентифицированные запросы X-протокола. Автором проверена работа этой утилиты под управлением ряда ОС -- Linux, FreeBSD, Solaris и HP UX, и во всех случаях mxconns не создавала проблем ни с трансляцией (программа распространяется в исходных текстах), ни с администрированием. Ее вполне можно отнести к разряду "крайне необходимых" в случае построения сколько-нибудь серьезных сетевых систем с использованием X Window.

Впрочем, об опасностях достаточно. Перейдем к более привлекательной теме -- утилитам, реализующим потенциальные возможности X-технологии. К малоизвестным их представителям можно отнести, например, крохотную программку управления буферами копирования (cut buffers) X Window -- xcb. X-сервер реализует несколько буферов копирования, но свобода от политик требует для доступа к подавляющему большинству из них специального инструмента. xcb как раз является примером реализации "конкретной возможности при отсутствии политик": утилита позволяет копировать в/из множества буферов, оперативно "переключаться" между ними и очищать их содержимое. Но, что самое приятное, xcb, как и любая хорошо спроектированная X-программа, допускает реальное "клиент-серверное" использование запущенной программы. Так, можно извне передавать (принимать) содержимое конкретных буферов без низкоуровневого программирования и дополнительного инструментария.

editres не только обеспечивают настройку приложений, но и являются мощной поддержкой процессов разработки и реинжиниринга ПО
Второй претендент на титул "жемчужинка" также малоизвестен, но функционально очевиден: раз X Window--система сетевая, раз в ней предусмотрен специальный стандартный протокол взаимодействия программ-клиентов (ICCCM), следовательно, возможности этого протокола должны быть доступны не только программам-клиентам, но и пользователю. На деле это означает, например, что процедуры управления положением окон на экранах и их состоянием активизируются не только посредством формирующего туннельный синдром "мышеводства", но и из написанных пользователем скриптов. Обеспечивающую эти функции старинную утилиту xwit можно найти в сетевых архивах. Дополненная функциями утилит xprop и xwininfo из стандартной поставки X Window (это информационные программы, сообщающие все характеристики любого окна приложения) xwit позволяет реализовать целые сценарии управления множеством абсолютно независимых от них приложений, ограничиваемые разве что фантазией и временем пользователя.

Третий претендент на звание "жемчужины" на сегодняшний день, увы, спорный, но все же... -- утилита editres. Спорность и сожаление мы вспомним позже, а пока в двух словах охарактеризуем этот инструмент. Механизм ресурсов X Window, о котором рассказывалось в первой части статьи, на самом деле оказался очень удачным и наглядно демонстрирует действенность инженерного правила "красивое должно работать хорошо". Если раньше мы говорили о ресурсах и идентификаторах ресурсов как о способе сокращения требований к полосе пропускания соединения "клиентская программа -- X-сервер", то теперь пора сказать и о другой привлекательной стороне этой медали. Правильно спроектированное и реализованное X-приложение, полноценно утилизирующее возможности X Window, даже в исполняемом (бинарном) виде обладает мощной базой данных, не только хранящей информацию об архитектуре пользовательского интерфейса, но и позволяющей "на лету", в ходе работы программы, вносить массу изменений в интерфейсную подсистему, не затрагивая собственно код.

Спектр прикладных и инструментальных программ, разработанных с использованием тулкита Motif, настолько широк, а качество ПО настолько высоко, что все слухи о "гибели" Motif можно считать преждевременными. Среда разработки систем визуализации данных IBM Data Explorer, текстовый редактор Nedit, графический front-end к программам отладки DDD, набор специализированных редакторов диаграмм TCM -- далеко не полный перечень очень качественных и надежных программ, ставших доступными после "освобождения" Motif
Эти функции поддерживаются, естественно, механизмом ресурсов, а для их утилизации применяются специальный протокол editres и одноименная утилита с графическим интерфейсом. На деле это означает, например, сведение процедур локализации интерфейсов к тривиальной задаче, что, согласитесь, уже не мало. Ну а ценность получаемой от editres архитектурной информации недооценить трудно: изучение иерархии элементов пользовательского интерфейса, отображаемой editres в виде графа, элементарный доступ с помощью соответствующих меню к тонким настройкам каждого интерфейсного элемента -- незаменимые помощники программиста. editres входит в поставку X Window, но существует и обновленная, более удобная версия этой программы.

И наконец, последний в нашем коротком перечне программ маленький шедевр является на первый взгляд совсем ненужной утилитой. Но она попала сюда не случайно, а из-за уникальности и информативности пользовательского интерфейса. lavaps -- монитор процессов, выполняющихся на вашем компьютере, отображает состояние памяти и активность задач в виде... движущихся разноцветных "пузырьков", изменяющих форму и площадь в соответствии с простыми принципами: чем больше памяти занимает процесс, тем больше площадь "пузырька"; чем больше процессорного времени требует процесс, тем интенсивнее движение. Несмотря на кажущуюся необязательность, lavaps -- это исключительно полезный инструмент, поддерживающий политику "превентивного администрирования" и позволяющий выявлять и устранять проблемы приложений (в первую очередь -- зацикливание и "выедание" памяти) вместо выполнения менее приятных процедур устранения последствий этих проблем.

Тулкиты: чем больше, тем...

Как уже неоднократно говорилось в этом маленьком цикле статей, X Window -- система, свободная от политик. В том числе и от политики, навязывающей единый пользовательский интерфейс. Авторы некоторых весьма удачных и функционально насыщенных программных проектов это свойство использовали "на все 100%", создав "под задачу" собственные реализации необходимых интерфейсных примитивов. Но в большинстве случаев в мире программирования для X Window действует разделение труда: кто-то разрабатывает библиотеки, реализующие примитивы пользовательского интерфейса (на программистском сленге -- тулкиты), кто-то использует тулкиты для написания прикладных программ. Естественно, технологические и идеологические изменения и просто "колебания моды" не могли не сказаться на этой организационной схеме, и тулкитов для X Window за время существования системы создано множество. Даже не пытаясь точно классифицировать все это инструментальное изобилие, бегло познакомимся с несколькими разработками, с которыми пользователю или программисту X Window непременно придется столкнуться по ряду очевидных причин. Во-первых, все они являются основой очень хороших программ, во-вторых -- популярны, в-третьих -- активно развиваются.

Начнем с "настоящих X-тулкитов", полноценно использующих возможности X Window. И здесь пора напомнить читателю об обещанном обсуждении спорности и сожаления, оставленном без внимания при рассмотрении утилиты editres. Уникальная особенность X Window -- механизм ресурсов -- сегодня настолько не в чести, что тулкитам, ее поддерживающим, автор решился присвоить титул "настоящих" (хотя бы потому, что игнорирование механизма X-ресурсов вынуждает разработчиков тулкитов "создавать сущности без необходимости" -- повторять уже имеющуюся функциональность, но в более убогой реализации).

Перечня, увы, в данном случае не получится. Единственный достойный представитель "настоящих тулкитов" -- знаменитый Motif -- даже после частичного "освобождения" и доступности остается в расхожем представлении больше жертвой "ошибок юности" (медленным, уродливым, тяжеловесным), чем тем, что он есть на самом деле сегодня. И очень жаль -- после продолжительного периода массовой интенсивной эксплуатации и развития обновленный Motif (точнее, OpenMotif) версии 2.2, анонсированный буквально на днях, является Непревзойденным и Настоящим. Впрочем, судите сами: функциональность его растет от версии к версии, но программы, написанные еще при царе Горохе, не требуют модификации даже строчки кода и работают все лучше и лучше. Качество и доступность документации, даже по мнению ярых оппонентов, вне критики, инструментальная поддержка образцовая, нейтральность по отношению к характеристикам платформы -- давно решенная проблема. Разработанный на языке C Motif гарантированно освобождает от политики использования программистов -- для него существует множество "искривителей" (wrappers), отображающих программные интерфейсы C в адекватные конструкции самых разных языков программирования -- от C++ до Lisp. И, что главное, Motif остается "полноценно настоящим" -- любое хорошее Motif-приложение в исполняемом виде можно детально "разобрать по косточкам" с помощью editres, тонко настроить и даже изменить его функциональность (если такая возможность, естественно, предусмотрена разработчиком).

Независимость от политик технологии X Window обеспечивает абсолютно мирное сосуществование на одном компьютере программ из самых разных времен -- от "древних" разработок на основе Motif до совершенно новых с использованием Qt
Второго "героя" нашего повествования можно назвать "почти настоящим". Он поддерживает механизм X-ресурсов, но не протокол editres. Конечно, жаль, но специфика "героя" такое "усекновение функциональности" оправдывает, о нем вообще редко говорят как о самостоятельной единице (еще один пример негативного влияния расхожего мнения). Речь идет о Tk -- графической подсистеме программного комплекса Tcl/Tk. Это исключительно функционально насыщенный тулкит, богатством реализованных интерфейсных примитивов затмевающий многие неплохие разработки. Очень хорошее качество документации, доступность и кросс-платформенность Tk также свидетельствуют в пользу удачности и перспективности этой разработки, несмотря на недавние заявления маркетологов о гибели Tcl/Tk. Впрочем, о Tcl/Tk достаточно сказать коротко: это программная система, отмеченная премией сообщества ACM (Advanced Computer Machinery) и тем самым занявшая место в скромном перечне имен наряду с ОС Unix, протоколом Tcp/Ip, электронной таблицей VisiCalc, системой подготовки документов TeX и языком программирования SmallTalk.

На этом перечень "нестоящих X-тулкитов" завершается. И Motif, и Tcl/Tk -- разработки очень старые, проверенные временем. Представители же молодого поколения тулкитов практически поголовно игнорируют лучшие особенности своей целевой платформы, что неуклюже оправдывается стремлением к "мобильности".

Однако и в "новой волне" есть вполне достойные программы. Наиболее функциональными сейчас являются тулкиты Qt и Fox, повторяющие процессом разработки истории Motif и Tk: за всеми этими пакетами стоят начальный период разработки коммерческими компаниями-идеологами и последующий период совершенствования открытых исходных текстов большим сообществом пользователей и программистов. Qt -- прекрасно документированный тулкит (качество документации сопоставимо разве что с Motif), с отличной функциональностью, активно развивающийся и популярный. Единственное "но" заключается в... языке программирования: Qt написан на C++, что уже формирует политику использования тулкита программистом (C++ куда менее "дружелюбен" к другим языкам по сравнению с C). Впрочем, в больших проектах эту проблему решают созданием специальных сервисов, обеспечивающих нейтральность по отношению к языку разработки или применением "тяжелого" инструментария -- объектных брокеров и языков описания интерфейсов. Все сказанное о Qt можно смело повторить и о тулките Fox, за исключением, пожалуй, качества документации -- она несоизмеримо слабее.

Последний "герой" нашего короткого обзора занимает очень спорную позицию благодаря, скорее, своей популярности, чем выдающимся качествам. "Эрзац-Motif" -- тулкит GTK, созданный несомненно талантливыми программистами, авторами знаменитого графического пакета Gimp для замены тогда еще коммерческого Motif, является типичным представителем категории тулкитов, сделанных "под приложение". Низкое качество документации -- первое тому свидетельство. А в сочетании с хорошим качеством кода (это у GTK не отнять) и популярностью отсутствие документации приводит к образованию весьма интересного "коктейля": с одной стороны, тулкит развивается, с другой -- его развитие подчинено эзотерическим правилам. Программные интерфейсы GTK уже трижды (за весьма короткую по сравнению с Motif историю) изменялись, вынуждая прикладных программистов каждый раз повторять процедуру адаптации своих программ к новому окружению. Последняя стабильная версия GTK с "замороженными" программными интерфейсами не модифицировалась фактически год, все силы разработчиков направлены на создание новой версии -- с очередными изменениями интерфейсов и улучшенной интернационализацией. Если последнюю использовать в качестве критерия оценки, то в нашем коротком обзоре можно смело раздать "призовые" места следующим образом: наилучшую интернационализацию обеспечивают тулкит Qt (сквозная поддержка Unicode) и FoxUnicode (отдельная ветвь разработки тулкита Fox), второе место заслуженно делят Motif и Tk, GTK же пока грешит множеством недоработок.
Источник - http://itc.ua/node/9078.
25.07.2002 21:11 (GMT+2)