Графическая оболочка X- Window — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Графическая оболочка X- Window

2019-09-26 228
Графическая оболочка X- Window 0.00 из 5.00 0 оценок
Заказать работу

X-сервер. Программа, которая написана специально подконкретное физическое устройство (имеется в виду - монитор,графконтроллер,  мышь и клавиатура), умеет на нем рисовать, иумеет понимать команды рисования по протоколу X Window System.

    X-клиент. Прикладная программа, обеспечивающая графическийинтерфейс с пользователем. Команды для рисования на экранепередает X серверу по протоколу X Window System.

X-терминал. Ящик (монитор, графконтроллер, мышь,клавиатура, ну и, естественно, процессор и оперативная память),на котором запущена программа X-сервер. X-терминалом можетслужить самая обыкновенная графическая Unix-рабочая станция, накоторой X сервер выполняется, как одна из многих прикладныхзадач. Специализированный X-terminal - ящик, на которомзапускается только X сервер, и ничего кроме. Можно использоватьPC под MS-DOSом, на котором запущена DOSовская программа,реализующая X сервер.

Xlib - библиотека C-ишных функций, реализующих протокол X Window System. С помощью этой библиотеки можно писатьграфические программы - X-клиенты.

Мы получаем универсальный GAPI - (Graphical ApplicationProgramming Interface) - средство программирования графическихприложений. Пользовательские графические программы при этомполностью отвязаны от железа, от конкретного графконтроллера.О железе пусть беспокоится X-сервер.

Протокол X Window умеет "ездить" по сети: например по TCP/IP,или по DEC-net. Поэтому Xсервер может крутиться на одноймашине, а X-клиент - на другой. То есть, картинка рисуется наодной машине, а программа, которая ее обеспечивает - крутитсяна другой.

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

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

Окно "Find" в Netscape
Дерево объектов окна "Find" программы NXterm

Причем само окно поиска также является объектом, в который вложены те самые кнопочки. Иерархия объектов может быть и более сложной. Так, окно "Find", в свою очередь, принадлежит окну просмотра Netscape. Другой пример -- система меню: пункты меню расположены внутри объекта "выпадающее меню", тот принадлежит полоске меню в верхней части окна, а она -- самому окну.

Понятие ресурсов

У каждого объекта есть набор свойств: цвет символов, цвет фона, шрифт и т.д. Конкретный перечень свойств определяется типом объекта -- кнопка, переключатель, строка ввода и т.д. (для обозначения типа используется термин класс объекта). Вот эти свойства объектов и называются ресурсами.

Некоторые свойства, такие, как состояние включено/выключено у объекта "переключатель", определяются и меняются в процессе работы программы.

Другие же, такие, как цвета, шрифты и надписи (например, названия пунктов меню), можно настраивать.

Ресурсы -- это одна из самых базовых концепций X-Window, придающая системе большую гибкость, но одновременно, несмотря на элегантность, и одна из самых трудных для понимания. С понятием ресурсов также тесно связаны понятия "Actions" и "Translations" ("действия" и "соответствия"), часто встречающиеся в man-страницах, но мы их затрагивать не будем.

 

Отличие от MS Windows

По своему назначению ресурсы в X-Window очень похожи на то, что обозначается тем же термином "ресурсы" в MS Windows. Но вся идеология работы с ресурсами в X в корне отличается.

В частности, в MS Windows ресурсы являются частью бинарного исполняемого файла (например, winword.exe), и могут указываться или при компиляции программы, или меняться при помощи специальных редакторов, которые позволяют модифицировать бинарный файл (что, вообще говоря, является работой для квалифицированного программиста, и зачастую противоречит законам об авторских правах).

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

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

 

Как сослаться на ресурс

Для того, чтобы изменить значение какого-либо ресурса, надо как-то на него "сослаться". Для этого надо указать объект, ресурс которого модифицируется, и название этого ресурса.

Полной ссылкой на объект является полный "путь" к нему в "дереве" объектов -- список имен всех объектов от основного окна, которому принадлежит объект, до него самого, разделенных точками.

Сокращенное дерево объектов программы NXterm
Меню выбора шрифтов программы NXterm

К примеру, последний пункт меню "VT Fonts" программы NXterm (это пункт "Selection") называется "fontsel", он содержится в меню "fontMenu", которое принадлежит окну "nxterm". Таким образом, полное имя этого объекта --

nxterm.fontMenu.fontsel

Ресурс, содержащий текст "Selection" в данном случае называется "Label". Таким образом, полная ссылка на ресурс в объекте --

nxterm.fontMenu.fontsel.Label

 

Чтобы указать значение ресурса, надо после ссылки на ресурс указать через двоеточие его значение (пробел после двоеточия необязателен и служит только для читаемости):

nxterm.fontMenu.fontsel.Label: Current selection

Поскольку при помощи текста можно указать далеко не все (например, как можно было бы закодировать в строке картинку или ссылку на функцию?), то возможность модификации ресурсов ограничивается в основном цветами, шрифтами, названиями (тексты меток и т.д), числами (координаты, размеры и т.д.), булевскими значениями (True/False) и геометрией. Впрочем, в практически всегда этого вполне достаточно (а реально есть возможность указывать почти все ресурсы).

Шаблоны

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

В понятие "шаблон" входит два компонента.

Во-первых, вместо имени конкретного объекта можно указать имя класса, к которому принадлежит этот объект. К примеру, все объекты-пункты меню в NXterm (как, впрочем, и во всех программах на основе библиотеки Athena Widgets) принадлежат к классу "SmeBSB". Таким образом, чтобы поменять шрифт, которым отображаются все пункты меню в "VT Fonts" на "fixed", можно воспользоваться указанием ресурса

nxterm.fontMenu.SmeBSB.font: fixed

Во-вторых, вместо имени объекта или класса в качестве одного из компонентов ссылки на объект можно указать "*". Например, спецификация

nxterm.*.SmeBSB.font: fixed

сменит шрифт во всех трех меню NXterm.

Символ "*" можно указывать и вместо нескольких компонентов сразу, опуская точки: спецификация

nxterm*SmeBSB.font: fixed

сменит шрифт во всех объектах класса "SmeBSB", к какой бы цепочке объектов они не принадлежали (впрочем, в NXterm других цепочек просто нет:).

Другой пример -- спецификация

nxterm*font: fixed

позволяет изменить шрифт во всех объектах программы.

В большинстве программ (к сожалению, в их число не входит NXterm) можно использовать еще более короткое указание:

*font: fixed

При использовании шаблонов может возникнуть ситуация, когда к одному и тому же ресурсу подходят несколько шаблонов. К примеру,

nxterm*SmeBSB.font:     7x14

nxterm.fontMenu.SmeBSB.font: fixed

В таких ситуациях действует правило: используется та спецификация, которая наиболее точно ссылается на объект. В приведенном выше примере во всех меню, кроме меню "fontMenu" ("VT Fonts"), используется шрифт "7x14", а в "fontMenu" -- шрифт "fixed".

Как узнать имена объектов и названия ресурсов

Названия ресурсов, вообще говоря, зависят от библиотеки объектов, на основе которой создана конкретная программа. Имена же объектов -- от конкретной программы.

Поскольку редко когда требуется поменять значение "какого-нибудь" ресурса, то самое простое -- посмотреть так называемый app-defaults-файл для данной программы (см. ниже), в нем обычно перечислено большинство "интересных" ресурсов.

Кроме того, в таблице ниже приведены самые часто используемые имена ресурсов для библиотек Athena Widgets и Motif.

Часто используемые ресурсы

Ресурс Назначение
foreground Цвет букв ("цвет переднего плана")
background Цвет фона
font Шрифт (Athena Widgets)
fontList Шрифт (Motif)
label Метка -- текст на кнопке, на пункте меню и т.д. (Athena Widgets)
labelString Метка (Motif)

Откуда берутся значения ресурсов

Мы довольно подробно рассмотрели синтаксис спецификации ресурсов, но остался вопрос -- а как и где, собственно, можно изменить значение ресурса для конкретной программы?

Для ответа на этот вопрос приведем список источников (по мере уменьшения приоритета), из которых программа узнает значения ресурсов при запуске.

Программа может установить значение ресурса при создании объекта.

Ресурс можно указать в командной строке при помощи ключа "-xrm".

Спецификации ресурсов могут быть загружены в память X-сервера (это делается автоматически при старте X-Window скриптом xinitrc из содержимого файлов /etc/xinit/.Xresources и ~/.Xresources).

Если (и только если) в памяти X-сервера ресурсы отсутствуют, то просматривается файл ~/.Xdefaults. Поскольку.Xdefaults в большинстве реализаций прекращает поиск (и все дальнейшие пункты просто не используются), лучше его никогда не заводить, а если уже есть -- избавляться от него.

Если есть файл ~/имя-класса-программы, то просматривается он, а затем, если есть, одноименный файл из директории

/usr/X11R6/lib/X11/app-defaults/

Эти файлы содержат "настройки по умолчанию" (app-defaults).

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

ls /usr/X11R6/lib/X11/app-defaults/ | grep -i имя-программы

Если (и только если) не найден ни один из app-defaults-файлов, то используется список ресурсов, "вшитый" в программу (т.н. "fallback resources"). Если заглянуть внутрь программы, к примеру, командой

strings /usr/X11R6/bin/xman | less

то можно увидеть строки, очень похожие на содержимое файла /usr/X11R6/lib/X11/app-defaults/Xman.

"Ручное" изменение ресурсов: ключ "-xrm"

Самый простой способ изменить значение ресурса -- воспользоваться ключом "-xrm", которому указывается в качестве параметра спецификация ресурса. Поскольку она обычно содержит пробелы и/или символы "*", лучше указывать ее в одинарных кавычках:

nxterm -xrm 'nxterm*SmeBSB.font: fixed'

Ключ "-xrm" можно указывать несколько раз:

nxterm -xrm 'nxterm*SmeBSB.font: fixed' -xrm 'nxterm*background:red'

Естественно, значение ресурса меняется только для данного экземпляра программы.

Общие рекомендации -- как же все-таки настраивать ресурсы

Как видно из приведенного выше списка, значения ресурсов можно менять в огромном количестве мест. Поэтому для большей определенности приведем один из сценариев.

Первым делом следует отладить спецификацию ресурса "методом проб и ошибок" при помощи ключа "-xrm".

Если ресурс -- общий для многих программ (например, цвет фона), то следует поместить его спецификацию в файл.Xresources. При настройке для всех пользователей -- в общесистемный /etc/xinit/.Xresources, а любой пользователь может изменить свой личный ~/.Xresources.

При настройке ресурсов конкретной программы следует поменять ее app-defaults-файл. Аналогично, при настройке для всех пользователей -- файл из /usr/X11R6/.../app-defaults/, а при персональной настройке любой пользователь может скопировать файл из.../app-defaults/ к себе в home-директорию и поправить под свой вкус; поскольку, хотя просматриваются оба файла, приоритет отдается настройкам из персонального.

Где еще брать информацию

Базовые понятия и определения ресурсов имеются в man-странице по X (см. подраздел "RESOURCES").

Кроме того, подробное описание синтаксиса указания ресурсов и порядка, в котором они берутся из разных источников, есть в разделе 10.2 книги "X Toolkit Intrinsics Programming Manual" от O'Reilly & Associates (имеется в электронном виде в системе insight на компьютерах Silicon



Поделиться с друзьями:

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.