Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Назад Содержание Вперед

Введение в POSIX'ивизм

(C) Алексей Федорчук, 2005
Опубликовано на сайте LinuxCenter

Глава 17. Икс - он и в Африке X

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

Содержание

Кто Вы, мистер Икс?

Иксы часто воспринимаются как неотъемлемая часть Linux - благодаря юзер-ориентированным дистрибутивам этой ОС. Однако на самом деле к Linux'у они не имеют никакого отношения, за исключением того, что могут быть запущены (в том числе и) поверх него. Как, впрочем, поверх Free- или OpenBSD, а также любого Unix'а и Unix-подобной системы. И не только: помнится, в своё время Иксы были портированы на OS/2. А еще приходилось слышать, что существует и Windows-реализация каких-то X-серверов. Потому что, вообще говоря, Иксы изначально были разработаны для того, чтобы запускаться на любом железе и в любой операционке, способных поддерживать растровую графику (и немного - на том, что к поддержке графики органически не способно:-)).

К слову - о названии. Со всем известным именем Самой Великой Операционной Системы (не к ночи будь помянута) оно никак не связано. В оригинале, то есть по-английски, система эта называется X Window System, наиболее точным переводом чего будет - Оконная Система Икс. Ну, что это - Система, интуитивно понятно. Прилагательное "Оконная" призвано отличать её от полноэкранных графических сред (были ведь и такие; в начале 90-х каждая уважающая себя DOS-программа считала своим долгом обзавестись собственным графическим интерфейсом, функционирующим, как правило, именно в полноэкранном режиме).

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

История Иксов уходит в седую древность - 1984 год, и у истоков ее - трое разработчиков, Роберт Шейфлер (Robert Sheifler), Джим Геттис (Jim Gettys) и Рон Ньюмен (Ron Newman). В дальнейшем разработкой Иксов занимался Массачуссетский технологический институт (MIT) и фирма DEC. В 1987 году разработчики Иксов, при участии ряда компьютерных фирм, создали организацию под названием X Consortium, которая приступила к распространению оконной системы X открыто и свободно, под собственной лицензией, сходной с GPL и, особенно, BSD.

За время жизни оконная система X сменила множество версий, из которых последней на долгие годы (и по сей день) стала 11-я. Видоизменения внутри которой получали статус релизов, нынешний из которых - 6-й, почему вся система сокращенно и называется X11R6 - также отличается далеко не юным возрастом. Наконец, внутрирелизные вариации также нумеруются - и потому на сей момент последний вариант Иксов носит такой, весьма запутанный, титул: X11R6.8.2.

Сами по себе Иксы - это не какая-либо конкретная программа, и даже не графический интерфейс как таковой, а лишь набор спецификаций, которым этот самый графический интерфейс (точнее, даже метаинтерфейс - как скоро станет ясно, никаких средств взаимодействия с пользователем сами по себе Иксы не содержат) должен соответствовать. Конкретная же их реализация - целиком на откупе (и на совести) разработчиков конкретных же систем. И потому на базе Иксов было построено множество самостоятельных графических метаинтерфейсов, большинство из которых - проприетарные, закрытые и распространяются за деньги (подчас немалые). Среди таких реализаций мне известны Metro-X и Accelerated-X - они использовались в проприетарных же Unix-системах. Хотя и подборки Linux, выпускавшиеся известной компанией Walnut Creek, одно время комплектовались некоторыми версиями коммерческих серверов.

Однако пользователь Linux, FreeBSD и любой другой свободной операционки имеет дело, как правило, только со свободными реализациями же X-спецификаций. До недавнего времени здесь следовало употребить единственное число, потому что такая реализация существовала в единственном экземпляре. И имя ей было (да и по сей день есть) - XFree86, что, как несложно догадаться означало: свободные Иксы для платформы x86, разрабатывающиеся в рамках одноименного проекта (http://www.xfree86.org). Она также имеет собственную лицензию, которую адепты FSF до недавнего времени полагали "правильной". Однако выход релиза XFree86 4.4 в начале 2004 года, сопровождавшийся сменой лицензионной политики, изменил ситуацию: теперь она полагается злостным порождением (ну, не знаю чего - мирового империализма, вероятно) и в звании GPL-совместимой ей отказано.

В связи с этим в народе возник новый проект, именуемый Xorg. Он основывается на последней бета-версии XFree86 4.39, которая имела еще "правильную" лицензию и, в общем и целом, соответствует этой версии по содержанию.

Похоже, однако, что отделение проекта Xorg всем пошло на пользу. В том числе и проекту XFree86, который активизировал свою деятельность, выпустив весной 2005 г. версию 4.5, содержащую множество усовершенствований. Впрочем, как официальный компонент дистрибутива она вошла только в NetBSD.

Таким образом, на данный момент мы имеем несколько неопределенную ситуацию, а именно - сосуществование трех свободных реализаций Иксов:

  • "неправильной" XFree86 4.5, которую, тем не менее, многие разработчики как Linux-дистрибутивов, так и BSD-систем включают, в той или иной форме, в свои поставки;
  • "правильной" Xorg (последняя версия на момент данного сочинения - X11R6.8.1), которая медленно, но верно внедряется в качестве "Иксов по умолчанию";
  • старой доброй (хотя на счет последнего существуют и иные мнения) XFree86 4.3, сохраняемой как компонент здорово-консервативных систем (FreeBSD - пример которых).

Мне не хотелось бы заморачиваться юридическим крючкотворством. Хотя новую лицензию XFree86 4.4, в меру своего понимания вопроса, прочел, и ни малейшей крамолы в ней не обнаружил (кроме требования об упоминании, напомнившее оговорку о рекламе в старой BSD-лицензии, вокруг которой столько ломали копий еще несколько лет назад). И по поводу чего не могу не вспомнить одну из своих любимых аналогий - со спорами либералов, социал-демократов и прочих анархистов: как известно, у большевиков в лагерях и расстрельных подвалах место для всех нашлось...

Так что далее речь пойдет о неких абстрактных Свободных Иксах (или Иксах просто) - тем паче, что, по моим наблюдениям, принципиальных различий между XFree86 и Xorg не просматривается. Если не считать, конечно, разных названий исполняемых и конфигурационных файлов - так что в необходимых местах я буду делать соответствующие оговорки.

Иксы предназначены для установки на любой из свободных Unix-клонов (и не только свободных - те же самые Иксы используются в Solaris для платформы Intel, возможно - и в других проприетарных Unix). Важно понимать, что когда речь идёт об Иксах в каком-либо дистрибутиве Linux или любой ОС из клана BSD. мы имеем дело с одним и тем же исходным кодом одной из двух их свободных той же реализаций, а мелкие различия между ними обусловлены либо номером версии, либо именем реализации, либо особенностями сборки под конкретную платформу, либо, наконец, предпочтениями майнтайнеров конкретного дистрибутива. И потому установка и настройка Иксов в любой из этих систем осуществляется одними и теми же методами.

Вернее, может успешно осуществляться - потому что майнтайнеры систем часто придумывают собственные инструменты для конфигурирования графического режима. Однако повторяю: если инструменты эти почему-либо не позволяют добиться оптимального результата, пользователь любого дистрибутива Linux, Free-, Net- или любой иной BSD всегда может обратиться к универсальным, собственно Иксовым, средствам. О них-то в первую очередь и пойдет разговор в последующих разделах этой главы.

Иксы: принципы организации

Что же представляют собой Иксы? Одно из определений (заимствованное из статьи Андрея Зубинского гласит, что это - не зависящая от платформы растровая графическая оконная система, обеспечивающая прозрачное использование ее ресурсов с помощью сетевых соединений. Определение верное, но вызывающее больше вопросов, чем дающее ответов. Которые мы и попробуем наметить.

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

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

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

Впрочем, для персонального компьютера это не принципиально. Более важным здесь оказывается другое базовое понятие - дисплей. Под которым в данном случае понимается отнюдь не экран монитора - вернее, не только он один, но его комбинация с устройствами ввода и позиционирования, сиречь клавиатурой и мышью. В случае персонального компьютера такой физический X-дисплей представляет собой просто нашу наличную машину. Хотя, теоретически рассуждая, к одной машине можно прикрутить несколько дисплеев - благо двухмониторные карты нынче не редкость, и USB-разъемов для подключения дополнительных клавиатур и мышей обычно также в достатке.

Маленькое отступление. Очевидно, что для открытия дисплея - то есть запуска на нем X-сервера, - последний должен взаимодействовать с аппаратурой, его составляющей, то есть быть совместимым с нею. И если мыши и особенно клавиатуры давно стандартизированы, и сложностей здесь обычно не бывает, то многообразие видеокарт до недавнего времени часто оказывалось камнем преткновения при использовании Иксов. Именно в области поддержки видеоадаптеров и различаются между собой в первую очередь отдельные их реализации. И сильной стороной коммерческих X-серверов был как раз широкий спектр поддерживаемого видеооборудования. Ныне многообразие видеокарт в прошлом, а все существующие практически одинаково хорошо поддерживаются всеми X-серверами, в том числе и свободными. Тем не менее, нужно понимать: когда говорят о поддержке, например, в Linux (или даже в конкретном его дистрибутиве) той или иной видеокарты, имеется ввиду именно ее совместимость с Иксами, а не с операционной системой как таковой.

Один и тот же физический X-дисплей в состоянии воспроизводить некоторое количество дисплеев виртуальных - аналогов виртуальных консолей текстового режима. Каждый из них целиком занимает собственную виртуальную консоль - поэтому для запуска запуска Иксов необходимо, чтобы хотя бы одна из таковых была доступна (для ядра ОС) и неактивизирована (процессом типа getty). Общее количество X-дисплеев для 32-разрядных компьютеров составит 232, нумеруемых с 0.

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

Между окнами возможен обмен данными через буферы памяти - в отличие от консольного режима (и, добавлю, в отличие от Windows), Иксах таких буферов задействовано несколько. Один из них - обычный экранный буфер, подобный консольному: информация в него помещается при выделении мышью или стрелками клавиатуры, и вставляется нажатием средней кнопки мыши. Остальные буферы памяти требуют принудительного копирования в них выделенного фрагмента - например, привычной по Windows комбинацией клавиш Control+C или Control+X, после чего вставляется также каким-либо специальным способом (например, через Control+V). Однако это уже зависит от реализации в конкретных программах (хотя все больше приложений поддерживает "подоконные" сочетания "горячих клавиш"). К сожалению, способов обмена данными между X-дисплеем и текстовыми консолями не существует (по крайней мере, я никаких указаний на этот счет не нашел)

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

Функции X-сервера осуществляются за счет специальной библиотеки - Xlib. Она обеспечивает открытие дисплея и взаимодействие с ним любой клиентской программы, создание и уничтожение окон, а также их отображение вместе с некоторыми простыми атрибутами.

Важно, что сам по себе X-сервер (вместе с Xlib) ни коим образом не способен управлять элементами пользовательского интерфейса - даже собственными окнами, которые он воспроизводит. Забегая вперед, замечу: чтобы получить представление о возможностях чистых Иксов (точнее, отсутствии таковых), можно для пробы запустить голимый X-сервер. Делается это командой (из текстовой консоли)

$ X

каковая представляет собой символическую ссылку на исполняемый файл X-сервера - /usr/X11R6/bin/XFree86 или /usr/X11R6/bin/Xorg (для соответствующих реализаций). После чего можно наблюдать за перемещением крестообразного курсора по серо-решетчатому фону - и ничего более. Правда, есть еще и возможность прервать X-сеанс - комбинацией клавиш Alt+Control+BackSpace; к слову сказать, это универсальный способ выхода из графического режима, к которому приходится прибегать, если штатные средства выхода почему-либо не работают.

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

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

Позволяет терминал запускать и программы графического режима, специально предназначенные для работы в оконной системе X. Такие программы, в отличие от консольных, будут исполняться в собственном, отдельном от терминального, окне. А поскольку Иксы наследуют многозадачный режим, поддерживаемый операционкой, на которую они наложены (а любая операционка POSIX-семейства - многозадачна), то таких программ можно запустить много - пользуясь, например, средствами запуска в фоновом режиме командной оболочки. И каждая запущенная программа будет исполняться в отдельном окне. Однако средств управления окнами ни сами Иксы, ни тем более терминал не предоставляют - так что даже переключаться между такими задачами окажется затруднительно.

Таким образом, чтобы в полной мере воспользоваться возможностями, предоставляемыми Иксами совместно с базовой ОС, потребуется еще одна программа, которая осуществляет управление окнами - их открытием, закрытием, представлением на экране, масштабированием, перемещением, фокусировкой и так далее. Почему она и называется - менеджер окон. И которая уже и являет графический интерфейс пользователя (GUI - Graphic User Interface) в полном смысле слова: вид всех управляющих элементов (рамок окон и их заголовков, полос прокрутки, меню, кнопок и пиктограмм определяется именно оконным менеджером.

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

Кроме этого, в комплект Иксов входит еще множество клиентских программ - утилит и приложений. Одни из них (xvidtune, xfontsel) широко используются в настроечных целях, другие (например, текстовый редактор xedit) давно вытеснены из обихода более совершенными аналогами и сохраняются в качестве реликтов.

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

Мощные интегрированные среды, такие, как KDE, и сложные комплексные приложения, типа OpenOffice, Mozilla, GIMP и так далее, начинают более-менее шевелиться при объемах физической памяти от 256 Мбайт. Правда, с увеличение объема памяти сверх этого и быстродействие "тяжелых" приложений возрастает, достигая оптимума при 512 Мбайт (правда, по современным масштабам это не кажется чем-то из ряда вон выходящим).

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

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

И тем не менее Иксы использовались, используются и будут использоваться во всех POSIX-системах еще долгое время (возможно, вечно). По двум причинам. Во-первых, как сказал бы товарищ Сталин, другой графической системы у нас, POSIX'ивистов, нет. А во-вторых, многочисленные недостатки Иксов компенсируются полной изоляцией графической среды от базовой ОС и ее системного окружения, с одной стороны, и клиентских программ от X-сервера - с другой. В результате чего ошибки исполнении пользовательских приложений крайне редко приводят к краху самих Иксов и практически никогда - всей операционной системы. И потому Иксы в сочетании с операционками POSIX-семейства применяются и будут применяться везде, где критичной оказывается бессбойная работа системы. А это - все машины производственного назначения, не так ли?

Иксы: сборка из исходников

Знакомство с Иксами начинается с их установки. Собственно, никто не понуждает пользователя выполнять эту процедуру вручную - в большинстве пакетных дистрибутивов они устанавливаются автоматически, да ещё обычно по умолчанию, при первичной инсталляции. Однако при этом они подчас тянут за собой столько разного и непонятного, что возникает резонное желание разобраться, что из этого приблудного софта действительно необходимо, а что относится к архитектурным излишествам. А для этого необходимо хоть раз установить Иксы самому.

Сделать это можно из прекомпилированных пакетов - таковые входят в состав любого полнофункционального дистрибутива, - руководствуясь методами принятого в данной системе пакетного менеджмента (rpm там, apt-get, порты FreeBSD или портежи Gentoo, и так далее). Если версия из дистрибутива окажется недостаточно свежей - для многих распространённых дериватов Linux (Red Hat, Suse, Mandrake, Slackware, Debian), FreeBSD, OpenBSD, NetBSD более свежую бинарную сборку XFree86 можно получить с сервера проекта: ftp://ftp.xfree86.org/pub. В частности, нынче это основной способ получения XFree86 для тех систем, которые официально от этой реализации Иксов отказались.

Однако самый охмуреж - это собрать Иксы из исходников, да ещё в соответствие с собственными представлениями об оптимизации. Тем более что это - единственный пока способ ознакомиться с новейшими версиями "правильных" Иксов от Xorg, если они не успели попасть в дистрибутив - в бинарном виде эта реализация на сайте проекта недоступна, распространяясь только в виде исходных текстов.

Так вот, оказывается, что для установки Иксов необходимо и достаточно иметь архивы их исходных текстов. Ну и, конечно, Base Linux - Иксы прекрасно ставятся на чистый LFS Герарда Бикманса. Или, например, на минимальный установочный комплект FreeBSD или DragonFlyBSD.

В современном своем виде исходники Иксов разбиты на семь тарбаллов. В реализации от XFree86 они имеют вид XFree86-4.5.0-src-[1-7].tgz, в варианте от Xorg - X11R6.8.2-src[1-7].tar.gz, суммарным объемом более 50 и 70 Мбайт, соответственно. Только они и необходимы - прочее, что можно найти в каталоге src на серверах проекта (утилиты, документация и прочее) относится к категории опционального (ИМХО - очень опционального). Так что скачиваем тарбаллы, помещаем куда нужно, переходим в каталог, предназначенный для исходников и разворачиваем архивы любым удобным способом. Например, вот так:

$ find /path_to_src -name XFree86-4.5.0-src-?.tgz \
	-exec tar xzpvf {} \;

После чего все исходники оказываются в одном каталоге - xc. Переходим в него и внимательно читаем файл INSTALL-X.org (BUILD в реализации от Xorg) - по крайней мере, его начало. Из которого выясняется, что установка Иксов на самом деле очень проста, и сводится к двум основным командам:

$ make World
$ make install

И одной дополнительной (опциональной):

$ make install.man

Вывод этих команд к тому же можно перенаправить в файл, например

$ make World >& world.log

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

Возникает резонное желание, однако, предварительно задать некоторые условия оптимизации. Заметим сразу, что обычные флаги gcc, заданные в переменной CFLAGS (в командной ли строке, или в общем профильном файле) не окажут на процесс компиляции никакого влияния. Чтобы сборка проходила с оптимизацией, флаги эти нужно определить в переменной BOOTSTRAPCFLAGS:

make World BOOTSTRAPCFLAGS="значения"

Я, например, обычно определяю ее так:

BOOTSTRAPCFLAGS="$CFLAGS"

в sh-совместимых оболочках, и

setenv BOOTSTRAPCFLAGS $CFLAGS

в tcsh. А значения переменной CFLAGS заданы в профильном файле так:

export CFLAGS="-O2 -march=pentium4 -fPIC"

или

setenv CFLAGS "-O2 -march=pentium4 -fPIC"

для zsh и tcsh, соответственно. Разумеется, процессор должен соответствовать объявленному в -march. Обратим также внимание на флаг -fPIC. Он необходим только в том случае, если в дальнейшем исполняемые файлы и библиотеки предполагается подвергнуть предварительному связыванию программой prelink (в Linux). Если таковое не предвидится (или невозможно, как в BSD-системах) - его можно опустить.

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

Варианты конфигурирования

Немедленный запуск свежеустановленных Иксов стопроцентно окончится неудачей: прежде всего их необходимо скорфигурировать - то есть описать в специальном файле параметры аппаратуры - устройств ввода (мыши, клавиатуры) и вывода (видеоадаптера и монитора), а также пути к файлам шрифтов. Файл этот именуется XF86Config (в реализации от XFree86) или xorg.conf (в варианте от Xorg) и местопребыванием своим имеет каталог /etc/X11. Причем в ходе установки Иксов любым способом (из исходников ли, или из бинарников) он сам собой не возникает - перед первым запуском Иксов его необходимо каким-либо способом создать и заполнить должным содержанием.

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

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

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

Наконец, есть и четвертый способ - прибегнуть к одной из фирменных утилит конфигурирования, входящих в комплект ряда user-ориентированных дистрибутивов Linux (Mandrake, Red Hat, вероятно, и других). Но поскольку мы занимаемся настройкой сугубо кросс-платформенной системы, да еще в целях самообразования, воспользоваться им было бы просто неприлично.

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

Должен предупредить - какой способ, из двух оставшихся, настройки Иксов мы бы ни избрали, без некоторой ручной доводки обойтись все равно не получится.

Итак, запускаем диалоговый конфигуратор Иксов из текстовой консоли:

$ xf86config

Ответом будет сообщение, что

This program will create a basic XF86Config file,
based on menu selections you make...
...

и так далее, и последует два предложения:

Press enter to continue, or ctrl-c to abort.

Соглашаемся с первым - ведь это и есть наша цель, не так ли? В награду за смелость нам предложат выбрать мышиный протокол. И хотя вариантов выбора довольно много:

 1.  Auto
 2.  SysMouse
 3.  MouseSystems
 4.  PS/2
 5.  Microsoft
 6.  Busmouse
 7.  AceCad
 8.  GlidePoint
 9.  IntelliMouse
10.  Logitech
11.  MMHitTab
12.  MMSeries
13.  MouseMan
14.  ThinkingMouse

ломать над ними голову особо не стоит - большая их часть относится к устаревшим или редким сериальным и шинным моделям. А для подавляющего большинства современных (то есть - с интерфейсом PS/2 или USB) подойдет вариант Auto (FreeBSD и DragonFlyBSD он оказывается практически безальтернативным).

Следующий вопрос звучит так:

Please answer the following question with either 'y' or 'n'.
Do you want to enable Emulate3Buttons?

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

Ответ на вопрос об файле мышиного устройства

Mouse device:

во FreeBSD (и DragonFlyBSD) также безальтернативен (и должен быть вбит руками):

/dev/sysmouse

Это - виртуальное устройство, подменяющее собой любой из реальных мышиных девайсов - ни один из них под Иксами сосуществовать с драйвером консольной мыши (moused) не может. А в Linux в большинстве случаев проходит умолчальный ответ (/dev/mouse - символическая ссылка на файл всамделишнего устройства, вне зависимости от его интерфейса). Лучше, однако, впечатать руками имя последнего - это будет /dev/psaux для мыши с разъемом PS/2, и /dev/input/mice - для USB-грызунов.

Теперь предстоят ответы на вопросы о клавиатуре. Сначала - определимся с ее типом

Please select one of the following keyboard types
that is the better description of your keyboard.
If nothing really matches, choose 1 (Generic 101-key PC)

Выбор здесь обширен (около 90 позиций). Но, вопреки предложенному, в большинстве "настольных" случаев (как, впрочем, и ноутбучных) лучше всего подойдут пункты 3

Generic 104-key PC

или 4

Generic 105-key (Intl) PC

Для фирменных клавиш Cherry, Microsoft или Logitech можно попробовать подобрать соответствующие варианты, но, ИМХО, это труда не стоит. А ноутбучные клавиатуры нужно выбирать только в случае полного соответствия реалиям - при неполном лучше избрать один из стандартных настольных вариантов.

Далее следует выбрать раскладку в соответствии, как задумчиво сказано, со страной:

Enter a number to choose the country

Не поленимся пролистать список вплоть до появления России - это важно для русификации (хотя от ручной доводки все равно не избавит):

60  Russian
61  Russian (cyrillic phonetic)

Выбираем 60-й вариант (cyrillic phonetic - штука весьма странная, в стародавние времена применялась на некоторых типах терминалов, ныне - сугубо реликтовая раскладка).

Please enter a variant name for 'ru' layout.
Or just press enter for default variant

Теперь предлагается выбрать (точнее, вбить) вариант раскладки. Единственно приемлемый в современных условиях - winkeys, он соответствует фабричной маркировке ныне продаваемых клавиш. Если же нажать Enter для сохранения умолчального варианта - получим раскладку для DOS-маркированных клавиатур, коих сейчас найдешь разве что в музее.

Следующий вопрос -

Please answer the following question with either 'y' or 'n'.
Do you want to select additional XKB options (group switcher,
group indicator, etc.)?

На него очень важно ответить положительно - это позволит довести русификацию Иксовой клавиатуры почти до ума. А именно - выбрать переключатель раскладок латиница/кириллица из весьма длинного списка:

Group Shift/Lock behavior

  1  R-Alt switches group while pressed
  2  Left Win-key switches group while pressed
  3  Right Win-key switches group while pressed
  4  Both Win-keys switch group while pressed
  5  Right Alt key changes group
  6  Left Alt key changes group
  7  Caps Lock key changes group
  8  Both Shift keys together change group
  9  Both Alt keys together change group
 10  Both Ctrl keys together change group
 11  Control+Shift changes group
 12  Alt+Control changes group
 13  Alt+Shift changes group
 14  Menu key changes group
 15  Left Win-key changes group
 16  Right Win-key changes group
 17  Left Shift key changes group
 18  Right Shift key changes group
 19  Left Ctrl key changes group
 20  Right Ctrl key changes group
 

Понимаю, что в столь интимном деле рекомендации неуместны, но мой твердый (и субъективно обоснованный) выбор - 7-й, переключение по нажатию CapsLock (как и в консоли собственно фиксируемое переключение на верхний регистр при этом переходит на комбинацию Shift+CapsLock).

Следующие два вопроса

Third level choosers

и

Control Key Position

я всегда игнорирую (для меня это не актуально). А в ответ на предложение индицировать альтернативную (то есть кириллическую) раскладку

Use keyboard LED to show alternative group

  1  Num_Lock LED shows alternative group
  2  Caps_Lock LED shows alternative group
  3  Scroll_Lock LED shows alternative group

отвечаю второй позицией (Caps_Lock LED), чтобы не путаться, так как Scroll_Lock LED во FreeBSD и DragonFly задействуется в консоли для режима пролистывания буфера экранной истории.

Следующие два вопроса

CapsLock key behavior

и

Alt/Win key behavior

также игнорируем (если у вас, конечно, есть на него осмысленный ответ - отвечайте). После чего плавно переходим к настройке видеосистемы, нажатием на Enter согласившись с таким предложением

Now we want to set the specifications of the monitor.
The two critical parameters are the vertical refresh rate,
which is the rate at which the the whole screen is refreshed,
and most importantly the horizontal sync rate,
which is the rate at which scanlines are displayed.

The valid range for horizontal sync and vertical sync
should be documented in the manual of your monitor.
If in doubt, check the monitor database
/usr/X11R6/lib/X11/doc/Monitors
to see if your monitor is there.

Press enter to continue, or ctrl-c to abort.

Правда, предварительно не худо вооружиться документацией на имеющийся в наличии монитор. Потому что ответ на первый же вопрос, о частоте строчной развертки,

You must indicate the horizontal sync range of your monitor.

следует искать именно там. Или, если документация давно потеряна, согласиться с одним из предлагаемых вариантов:

1  31.5; Standard VGA, 640x480 @ 60 Hz
2  31.5 - 35.1; Super VGA, 800x600 @ 56 Hz
3  31.5, 35.5; 8514 Compatible, 1024x768 @ 87 Hz interlaced (no 800x600)
4  31.5, 35.15, 35.5; Super VGA, 1024x768 @ 87 Hz interlaced, 800x600 @ 56 Hz
5  31.5 - 37.9; Extended Super VGA, 800x600 @ 60 Hz, 640x480 @ 72 Hz
6  31.5 - 48.5; Non-Interlaced SVGA, 1024x768 @ 60 Hz, 800x600 @ 72 Hz
7  31.5 - 57.0; High Frequency SVGA, 1024x768 @ 70 Hz
8  31.5 - 64.3; Monitor that can do 1280x1024 @ 60 Hz
9  31.5 - 79.0; Monitor that can do 1280x1024 @ 74 Hz
10  31.5 - 82.0; Monitor that can do 1280x1024 @ 76 Hz
11  Enter your own horizontal sync range

Действуем по старорусскому принципу - лучше перебдеть, то есть занизить частотные характеристики, чем недобдеть, то бишь завысить их. Правда, страшные истории о сгоревших от этого мониторах - в прошлом, и худшее, что грозит при переоценке своей техники - выпадение в черный экран при старте Иксов, но все равно - приятного мало. И в любом случае нужно быть готовым к тому, что даже при строгом следовании спецификации для CRT-монитора идеальной настройки без ручного вмешательства получить не удастся. А для LCD-панели и этот, и следующий параметр рояля не играют. Потому что следующий вопрос - о частоте кадровой развертки

You must indicate the vertical sync range of your monitor.

предполагающий выбор из

 1  50-70
 2  50-90
 3  50-100
 4  40-150
 5  Enter your own vertical sync range

также получает ответ из документации.

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

Do you want to look at the card database?

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

Для наиболее, пожалуй, распространенных карт на чипах Nvidia - один из двух (хотя на самом деле это одно и то же):

18  ** NVIDIA (generic)		[nv]
349  NVIDIA GeForce		GeForce

Для современных карт ATI:

5  ** ATI (generic)		[ati]

Для встроенного чипсетного видео от Intel (это также одно и то же):

15  ** Intel i810 (generic)	[i810]
291  Intel 810

Для эстетов, сохранивших у себя Matrox от G400 и выше:

17  ** Matrox Graphics (generic)	[mga]
319  Matrox Millennium G400		mgag400

Возможно, вам доводилось слышать о фирменных драйверах от производителей видеокарт ATI, Nvidia, Matrox. Так вот, на данной стадии они недоступны: их следует скачивать с фирменных же сайтов и устанавливать в соответствие с прилагаемой к ним документацией. И при этом учитывать, что фирменные драйвера для карт Matrox G400 и выше (но не до Parhellia) действительно способствуют повышению качества изображения. Фирменные же драйвера Nvidia и ATI предназначены только для 3D-акселерации, задействованной лишь в играх. Так что если вы не игроман - никакого выигрыша в двухмерной графике они вам не дадут.

Следом идет вопрос об объеме видеопамяти. Здесь можно отвечать буквально что угодно - все равно в итоговом конфиге эта строка окажется закомментированной. Хотя аккуратности ради можно поставить и реальное значение.

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

For each depth, a list of modes (resolutions) is defined.
The default resolution that the server will start-up with 
will be the first listed mode that can be supported
by the monitor and card.
Currently it is set to:

"1280x1024" "1024x768" "800x600" "640x480" for 8-bit
"1280x1024" "1024x768" "800x600" "640x480" for 16-bit
"1280x1024" "1024x768" "800x600" "640x480" for 24-bit

Modes that cannot be supported due to monitor or
clock constraints will be automatically skipped
by the server.

 1  Change the modes for 8-bit (256 colors)
 2  Change the modes for 16-bit (32K/64K colors)
 3  Change the modes for 24-bit (24-bit color)
 4  The modes are OK, continue.
 

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

Enter your choice: 1

Select modes from the following list:

 1  "640x400"
 2  "640x480"
 3  "800x600"
 4  "1024x768"
 5  "1280x1024"
 6  "320x200"
 7  "320x240"
 8  "400x300"
 9  "1152x864"
 a  "1600x1200"
 b  "1800x1400"
 c  "512x384"
 d  "1400x1050"
 

Так что остается только сообразоваться со своими потребностями (в разрешении) и возможностями (монитора - видеопамяти в современных картах столько, что они потянут все, что угодно). Следует помнить только о двух вещах: что разрешение, выбранное первым, будет умолчальной для данной глубины цвета, и что мало-мальски комфортная работа в интегрированных средах типа KDE или Xfce начинается с разрешения 1024x768. А еще: для LCD-дисплеев, как известно, наилучшее качество изображения получается при разрешении, равном физическому количеству пикселей матрицы - так что ниже лучше не устанавливать, а больше не получится (хотя - смотри следующий вопрос). И последнее: разрешение в Иксах можно переключать на лету, причем в обе стороны, посредством клавишных комбинаций: Alt+Control+Серый плюс - в сторону увеличения, и Alt+Control+Серый минус - в сторону уменьшения.

Следующий вопрос весьма интересен:

Please answer the following question with either 'y' or 'n'.
Do you want a virtual screen that is larger than
the physical screen?

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

Теперь настало время выбрать глубину цвета по умолчанию.

Please specify which color depth you want to use by default:
  1  1 bit (monochrome)
  2  4 bits (16 colors)
  3  8 bits (256 colors)
  4  16 bits (65536 colors)
  5  24 bits (16 million colors)

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

Настройка Иксов подошла к концу. Остается только сохранить изменения, ответив положительно на последний вопрос:

I am going to write the XF86Config file now.
Make sure you don't accidently
overwrite a previously configured one.

Shall I write it to /etc/X11/XF86Config?

Результатом положительного (yes) ответа будет запись всех выбранных параметров в файл /etc/X11/XF86Config (или /etc/X11/xorg.conf) в принятом для него формате.

Вот теперь можно запускать Иксы - для пробы все той же командой

$ X

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

Я надеюсь, что из ответов на вопросы, задаваемые программой xf86config, вы поняли, что она делает (если не совсем - окончательная ясность придет при рассмотрении созданного конфигурационного файла). А также обнаружили один из двух его недостатков: при любой ошибке в ответах на вопросы единственная возможность исправить ее - оборвать выполнение программы (комбинацией Control+C и начать все сначала.

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

Самоконфигурирование Иксов начинается просто с запуска X-сервера, но - обязательно от лица суперпользователя и с соответствующей опцией (для определенности считаем, что у нас реализация от Xorg версии X11R6.8.2, но с XFree86 все то же самое, с поправкой на имена файлов):

$ Xorg -configure

Впрочем, этим оно и заканчивается: X-сервер выпадет в осадок с сообщением о невозможности сделать то-то и то-то, например, отыскать мышиное устройство. Пугаться этого не следует: перед безвременной кончиной он успевает создать создать прототип своего конфига /root/xorg.conf.new (размером менее 3 Кбайт). Остается только скопировать его куда следует:

$ cp /root/xorg.conf.new /etc/X11/xorg.conf

Теперь можно попробовать запустить Иксы, как это делалось ранее. Если X-сервер встал - все хорошо. Если нет - разбираемся в причинах, читая, какие ошибки он обнаружил. А поскольку ручная доводка самосгенерированного конфига все равно потребуется, заодно разберемся и с его устройством.

Файл /etc/X11/xorg.conf разбит на несколько секций, каждая заключена в строки

Section "Имя секции"
...
EndSection

Рассмотрим их последовательно - тем более, что в файле /etc/X11/XF86Config они будут точно такими же (различия лишь в некоторых строках, которые или очевидны, или будут оговорены явно). Первой идет секция ServerLayout. Содержание ее - указание на генератор конфига (очевидно, зависящий от реализации Иксов):

	Identifier     "X.org Configured"

и идентификаторы дисплея, мыши и клавиатуры:

 	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"

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

Следующая секция - Files. В нем перечислены пути к важным для работы Иксов файлам, в частности шрифтовым. И это - первый объект для правки: в списке каталог с кириллическими шрифтами отсутствует, хотя в умолчальном комплекте Иксов таковые (в каталоге /usr/X11R6/lib/X11/fonts/cyrillic/) имеются. Так что вносим соответствующую строку, причем - впереди всех остальных путей к шрифтовым файлам:

        FontPath     "/usr/X11R6/lib/X11/fonts/cyrillic/"

Конечно, шрифты эти - не верх совершенства, но на первое время сойдет (а вообще разговор об Иксовых шрифтах впереди.

В следующей секции - Module нужно проследить главным образом за наличием строки

	Load  "ttf"

Это - модуль, обеспечивающий вывод шрифтов True Type - лучше них пока для Иксов ничего не придумали, по крайней мере в отношении кириллической составляющей. При желании можно избавиться от лишних модулей - например, для поддержки неиспользуемых шрифтов, таких, как speedo (все равно кириллицу они не поддерживают. И хорошо бы добавить строку

	Load  "freetype"

весьма способствующую качеству рендеринга шрифтов, но - увы - это не всегда проходит.

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

	Identifier  "Keyboard0"
	Driver      "kbd"

Причем (внимание!) вторая строка в XFree86 (и в Xorg версии X11R6.7) выглядит так:

	Driver      "keyboard"

В любом случае - как можно видеть, ни малейшей возможности ввода кириллицы. И, чтобы ее получить, вписываем опции Xkb - модуля расширенного управления клавиатурой. Он включен по умолчанию, однако при конфигурировании через xf86config неплохо проследить - не слетел ли случайно символ комментария со строки

#        Option "XkbDisable"

Опции Xkb определяют а) так называемые правила описания клавиатуры (XkbRules), модель ее (XkbModel), собственно подключаемые раскладки и их варианты (XkbLayout и XkbVariant), а также способ переключения и индикации альтернативной группы (XkbOptions). Все возмозможные варианты их значений можно посмотреть в определенных файлах каталога /usr/X11R6/lib/X11/xkb/ (каких именно - легко определить, например, командой grep). В нашем же случае они таковы:

        Option "XkbRules"   "xfree86"
        Option "XkbModel"   "pc104"
        Option "XkbLayout"  "us,ru(winkeys)"
        Option "XkbOptions" "grp:caps_toggle,grp_led:caps"

С первой строкой понятно (есть еще и другие правила, для иных аппаратных архитектур, но они для нас не интересны). К выбору модели также можно подходить спокойно - pc104 или pc105 подходит почти во всех случаях (в том числе и для ноутбуков, где количество клавиш вроде бы меньше). В следующей же секции нужно проследить, чтобы имена раскладок были перечислены именно так (и в таком порядке, а вариант winkeys указан именно в скобках после ru - ведь только в этой раскладке он имеет место быть. Обычно подходит также

        Option "XkbLayout"  "us,ru"
        Option "XkbVariant"  ",winkeys"

где следует обратить внимание на запятую перед winkeys - очевидно, что в раскладке us такого варианта нет.

К слову сказать, при настройке Иксов через xf86config следует позаботиться о приведении соответствующей секции в такой же вид: этот конфигуратор полагает, что раз в нем была выбрана русская раскладка клавиатуры, то необходимости в раскладке us нет, и соответствующая строка имеет вид

        Option "XkbLayout"  "ru"

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

Секция InputDevice для мыши также требует некоторого внимания. Во-первых, в нем таится весьма частая причина ошибки при запуске X-сервера, выражающаяся в невозможности найти все то же мышиное устройство. Почему-то при самоконфигурировании в Linux ему часто приписывается имя /dev/mouse, тогда как при использовании файловой системы устройств devfs такого может и не быть. Так что тут нужно, согласившись с наличествующим строками

	Identifier  "Mouse0"
	Driver      "mouse"
	Option      "Protocol" "auto"

прописать истинное имя файла:

	Option      "Device" "/dev/input/mice"

А для мышей с колесиком еще и добавить такую строку:

	Option      "ZAxisMapping" "4 5"

обеспечивающую в современных версиях Иксов скроллинг без всяких дополнительных ухищрений (типа установки программы imwheel, требовавшейся ранее в обязательном порядке).

И, наконец, то, что традиционно считается главным при конфигурировании Иксов (и ранее вызывало наибольшие проблемы) - настройка видеорежима. Тут к автоконфигурированию претензий почти нет: X-сервер при первом старте обычно правильно опознает видеокарту (с точностью до чипа), приписывает ему соответствующий драйвер, и, по крайней мере на LCD-дисплеях, устанавливает разрешение, равное физическому разрешению матрицы и 24-битную глубину цвета. А частотные характеристики для LCD-дисплея, как уже говорилось, значения не имеют.

Конечно, в секции Device можно кое-что подретушировать, например, включить DRI (Direct Rendering Interface), сняв комментарии со строки соответствующей опции, но это относится уже к поддержке трехмерной графики, нужной почти исключительно для игр.

В итоге путем некоторых обычных манипуляций автосгенерированный конфиг доводится до удовлетворительного состояния, на котором можно и успокоиться. Сравнив только ради интереса его размер с размером конфига, полученного ранее соответствующей утилитой. Что впечатляет - размер последнего около 15 Кбайт, образованных ненужными (и не всегда понятными) комментариями.

Так что в итоге можно констатировать: с точки зрения конечного результата автоконфигурирование Иксов дает ничуть не худший результат, нежели xorg.config (или xf86config), но избавляет от скучной процедуры, позволяет сэкономить время, а в итоге генерирует компактный и, главное, удобопонятный, конфиг. Что же до ручной доводки - она требуется в обоих случаях.

Варианты запуска

Как уже говорилось, Иксы в чистом виде можно загрузить одноименной командой; впрочем, X - это лишь символическая ссылка на имя реального файла X-сервера, XFree86 или Xorg (в зависимости от исполнения), или на т.н. X-wrapper, о котором я скажу потом. Однако мы видели, что ничего доброго из этого не выходит: для использования X-сервера в мирных целях необходим его запуск совместно хотя бы с одной клиентской программой.

Благо, для этого в комплекте Иксов любой реализации существует штатное средство - специальный файл /usr/X11R6/bin/startx. Это обычный сценарий оболочки, описывающий последовательность запуска X-сервера и некоего умолчального X-клиента. А вот каким будет этот X-клиент - от века установлено в файле /usr/X11R6/lib/X11/xinit/xinitrc. По умолчанию этим клиентом является twm - единственный наличный оконный менеджер в комплекте Иксов. Вместе с ним запускается также несколько экземпляров программы xterm, что мы и видим на экране после набора команды startx в строке любой текстовой консоли. Строки, это описывающие, выглядят следующим образом:

# start some nice programs

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login

Обращаем внимание на символы амперсанда в конце всех строк, кроме последней: это значит, что twm и остальные клиенты работают в фоновом режиме. Последний же экземпляр xterm выступает в качестве своего рода login shell и является программой активной. Выход из него (например, с помощью exit в его командной строке) знаменует собой окончание данного X-сеанса.

При запуске через скрипт startx фигурирующий в нем файл /usr/X11R6/bin/X по умолчанию является символической ссылкой непосредственно на исполняемый файл X-сервера (XFree86 или Xorg), а последний для запуска от лица обычного пользователя должен иметь бит суидности:

lrwxrwxrwx /usr/X11R6/bin/X@ -> XFree86
-rwsr-xr-x /usr/X11R6/bin/XFree86*

Такое решение считается неудовлетворительным с точки зрения безопасности, и поэтому часто для запуска Иксов используется специальная программа - X-wrapper, вызывающая X-сервер опосредованно. В этом случае последний в бите суидности не нуждается - он устанавливается только на X-wrapper, и /usr/X11R6/bin/X должен симлинком на него. Именно такой способ используется при автоматическом запуске Иксов, как будет показано ниже.

Нужно заметить, что во многих дистрибутивах Linux майнтанеры модифицирует файл /usr/X11R6/lib/X11/xinit/xinitrc по своему усмотрению. В частности, нередко в ответ на команду startx запускается просто X-сервер с единственным терминальным окном. Это - своего рода безлопастный (safe) режим для Иксов: нормально работать при этом затруднительно (ввиду отсутствия средства управления окнами), но вызвать текстовый редактор и поправить файлы конфигурации - можно вполне.

Я уже говорил, что оконных менеджеров для системы X - преизрядное количество, и большая их часть и функционально, и эстетически далеко превосходят штатный twm. Как обеспечить их запуск по умолчанию вместе со стартом Иксов? Напрашивающееся решение - отредактировать /usr/X11R6/lib/X11/xinit/xinitrc, - не всегда удобно (так как требует прав суперпользователя) и вообще идеологически неправильно. Потому что штатным средством является создание соответствующего пользовательского dot-файла - ~/.xinitrc. В простейшем случае в него достаточно внести строку вроде

exec fluxbox

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

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

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

Самый простой способ - это вписать все их имена построчно, закрыв символами комментария, в файл ~/.xinitrc. И запускать по очереди, снимая ремарки с интересующего в данный момент. Нужно только учесть, что некоторые из оконных менеджеров не то чтобы требуют предварительного конфигурирования, но настоятельно проявляют такое желание - примером является WindowMaker. При этом происходит перезапись имеющегося файла ~/.xinitrc, в расчете на запуск именно сконфигурированной программы управления окнами (хотя старая копия стартового конфига и сохраняется под другим именем).

Другой способ - это все же отредактировать /usr/X11R6/lib/X11/xinit/xinitrc таким образом, чтобы в качестве умолчального X-клиента запускалось лишь одно терминальное окно:

xterm

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

Для запуска нескольких X-сессий одного и того же X-сервера следует вспомнить о понятии виртуального дисплея. X-сервер, запущенный первым, стартует на нулевом дисплее, который соответствует ближайшей доступной и свободной (то есть неактивизированной процессом типа getty) виртуальной консоли. И попытка дать команду startx (или просто X) повторно - с другого виртуального терминала, - выведет сообщение о том, что дисплей занят (и, соответственно, о невозможности связи с ним X-сервера). Чтобы этого не случилось, номер дисплея (начиная с 1) для второй сессии Иксов (всех последующих) следует задать явно:

startx -- :1

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

startx -- 0:1

но практически для персоналки в обычной конфигурации его можно опустить. Опять-таки теоретически, как говорилось ранее, можно открыть до 231 самостоятельных X-сессий, но практически, думаю, лимит оперативной памяти будет исчерпан много раньше: каждая сессия требует для себя 16 Мбайт суммарной (RAM+swap) памяти, из которых 4 Мбайт приходится на память физическую; и немало памяти отъест еще и оконный менеджер и, особенно, интегрированная среда типа KDE или Gnome.

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

В случае, если основная работа пользователя проходит в графическом режиме, возникает естественное желание - обеспечить его старт при загрузке машины. В Linux это обычно делается очень просто: нужно только открыть файл /etc/inittab, посмотреть в начале его перечень runlevels:

# Runlevels:                                                               
# 0	Halt                                                              
# 1(S)	Single-user
# 2	Not used                                                          
# 3	Multi-user                                                        
# 4	Not used                                                          
# 5	X11                                                               
# 6	Reboot

определить, какой из них соответствует в данном дистрибутиве старту в графическом режиме (в примере, относящемся к Archlinux, - 5-й), и назначить его умолчальным, изменив строку

id:3:initdefault:

таким образом:

id:5:initdefault:

Никаких дополнительных телодвижений, скорее всего, не потребуется: после перезагрузки машины перед глазами предстанет, вместо первой виртуальной консоли с предложением к авторизации, т.н. графический менеджер входа в систему - по умолчанию им будет xdm из штатного Иксового комплекта. Достаточно набрать учетное имя своего акаунта и пароль доступа - и пользователь оказывается внутри X-сессии. Под соответствующий ей X-дисплей будет задействована первая же свободная виртуальная консоль - в большинстве дистрибутивов 7-я. В отличие от X-сессии, запущенной вручную, управляющего терминала у нее не будет, все прочие виртуальные консоли остаются девственно чистыми.

Во FreeBSD и DragonFlyBSD дело обстоит ничуть не сложнее: открывается файл /etc/ttys, в нем отыскивается имеющаяся по умолчанию строка

ttyv8  "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

и в ней значение off четвертом поле заменяется на on, послед чего выполняется рестарт машины - с тем же результатом, что и в Linux.

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

lrwxr-xr-x /usr/X11R6/bin/X@ -> /usr/X11R6/bin/Xwrapper-4
-r-sr-xr-x /usr/X11R6/bin/Xwrapper-4*

Прервать такую автоматом запущенную X-сессию, то есть перезагрузить X-сервер (например, при изменении его настроек) можно - клавишами Alt+Control+Backspace или штатными средствами запущенного клиента, - но это вызовет лишь возобновление приглашения xdm. Полностью избавиться от графического режима можно только возвратом общесистемных конфигов (/etc/inittab или /etc/ttys) в исходное состояние.

Авторизовавшись в панели xdm, пользователь оказывается в X-сессии, но - не совсем в своем привычном и настроенном (через ~/.xinitrc) окружении. Ибо при автоматическом старте Иксов отработки сценария xinit (и, соответственно, считывания конфигов xinitrc и ~/.xinitrc не производится. оно будет определяться умолчаниями общесистемного xinitrc. Чтобы обеспечить запуск своего любимого оконного менеджера и сопутствующих ему программ (то, что при команде startx загружается из "домашнего" ~/.xinitrc), необходимо иметь файл ~/.xsession. Для начала его можно сделать идентичным ~/.xinitrc, ограничившись строкой с именем оконного менеджера, а дальше - сами разберетесь.

Для графической авторизации можно использовать и другие менеджеры входа в систему - например, kdm из комплекта KDE, или gdm, входящий в состав GNOME. По сравнению в xdm они предоставляют множество дополнительных возможностей. Правда, и требуют немало - соответствующих интегрированных сред в установленном виде.

Немного о раскладках

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

Для начала проверяем ввод кириллических символов - прямо в командной строке терминального окна, без запуска какого-либо иного приложения. И с удивлением обнаруживаем - не обязательно, но вполне возможно, - что ничего при этом не происходит, хотя при настройке через xf86config была выбрана русская раскладка. Почему? - спрашиваем сами себя. И сами же себе отвечаем - потому что не позаботились о правильном определении системной локали. Сама по себе локаль, как-будто бы, к Иксам отношения не имеет, но вот ее несоответствие Иксовой раскладке блокирует клавиатурный ввод напрочь. Так что, если это не было сделано ранее, перво-наперво устанавливаем правильную локаль - в соответствии со страной (ru), языком (RU) и используемым набором символов (например, KOI8-R).

Теперь, вполне возможно, что на экране при вводе мы видим сплошную абракадабру. Причина понятна - отсутствие русских шрифтов (или путей к ним в Иксовом конфиге). Однако попытка переключиться на латиницу дает тот же эффект. Вспоминаем, что это мы уже проходили несколькими разделами ранее - при настройке через xf86config выбор русской раскладки клавиатуры подразумевает почему-то, что в латинских буквах у пользователя потребности нет. И там же, в разделе о конфигурации Иксов, ищем рецепт - ручную правку соответствующей секции конфигурационного файла.

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

Определив все опции клавиатуры, как было описано ранее, получаем нормальную раскладку для win-маркированной клавиатуры (вариант winkeys), с заказанным переключателем и индикатором альтернативной группы. Однако стоит ли останавливаться на достигнутом? Меня, например, всегда просто бесили все стандартные русские раскладки - и та, что была на пишущих машинках (унаследованная dos-маркированными компьютерными клавишами), и win-модификация оной. Поневоле поверишь в то, что вообще раскладка qwerty была придумана для того, чтобы замедлить работу ремингтониста (это - мужской род от слова "машинистка", ввиду большей физической силы при чрезмерно быстрой печати они сильно амортизировали столь дорогостоящие инструменты, каковым были некогда пишущие машинки). А ее кириллические вариации дело еще усугубили - не иначе, на предмет дополнительного снижения амортизации казенной техники. По настоящему удобной представляется только умолчальная русская раскладка FreeBSD (т.н. ru.koi8-r.kbd), в которой знаки препинания находятся на нижнем регистре верхнего ряда, а цифры - на верхнем. Да только уж больно непривычна, и клавиатур, таким образом маркированных, не сыскать.

Тем не менее, я по мере сил и в минимально необходимом объеме всегда пытаюсь выправить положение. Для чего в используемой мной кириллической раскладке перемещаю запятую на нижний регистр, ввожу в нее символ прямого слэша (по умолчанию почему-то обычно имеется только обратный) и доллара (последнее - не из любви к длинному и зеленому, а для обозначения приглашения командной строки). Как это сделать в консоли - можно сообразить. А вот как быть в Иксах?

На теории этого дела останавливаться не буду - она некогда была подробно описана Иваном Паскалем в его труде об Xkb, до сих пор не утратившем своего значения. Так что только пара практических рецептов.

Расширенные возможности управления клавиатурой в Иксах обеспечиваются модулем Xkb. Все относящиеся к нему файлы собраны в каталоге /usr/X11R6/lib/X11/xkb. В данный момент нас интересует лишь один из его подкаталогов - symbols, файлы которого описывают, как можно понять из его имени, непосредственно наборы символов, привязанные к клавиатурным раскладкам различных стран. Точнее - один из вложенных в него подкаталогов - symbols/pc для одноименной архитектуры. Ну а в нем уже важен файл ru - это непосредственно символы, привязанные к нашей, родной, кириллической раскладке.

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

В данный момент перед нами (вы, конечно, резонно можете возразить - "простите, не нами, а Вами", - хорошо, лично передо мной) стоит задача внести косметические изменения в раскладку ru(winkeys). Начинаю я, однако, с секции Basic:

partial default alphanumeric_keys
               
xkb_symbols "basic" {

Ибо первый напрашивающийся кандидат на модификацию - это клавиша Left Backslash (Bar на верхнем регистре), по прямому назначению мной никогда не используемая. Отыскиваю ее код (это будет LSGT) и умолчальное значение нижнего регистра backslash заменяем на comma (сиречь запятую). За верхним же регистром резонно сохранить исходное значение - bar.

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

partial alphanumeric_keys 
               
xkb_symbols "winkeys" {

нахожу в ней нужный код (AB10) и умолчальную comma верхнего регистра меняю на slash. Остается разобраться с любимым баксиком. Его я помещаю на место нормального (правого) backslash, тогда как последний передвигаю на регистр верхний (код их клавиши - BKSL).

И в итоге все модифицированные строки выглядят таким образом (в порядке их исходного расположения в файле /usr/X11R6/lib/X11/xkb/symbols/pc/ru:

partial default alphanumeric_keys
               
xkb_symbols "basic" {

	name[Group1]= "Russian";

	...
	key <LSGT> { [ comma, bar ] };
	...
};

partial alphanumeric_keys

xkb_symbols "winkeys" {

	include "pc/ru(basic)"
	...
	key <AB10> { [ period, slash ] };
	key <BKSL> { [ dollar, backslash ] };
};

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

Разборки со шрифтами

Разборку эту следует начать с терминологии - для чего вспомним традиции отечественной полиграфической школы. В соответствие с которой набор символов определенного облика (то, что в околокомпьютерной литературе называют обычно шрифтом, а то и фонтом) носит имя гарнитура. В англоязычной литературе ему соответствует выражение Font Family. Примерами классических гарнитур являются - Times, Courier, Helvetica и многие, многие другие.

Визуальные вариации символов каждой гарнитуры описываются термином шрифтоначертание. В большинстве гарнитур вариации эти выделяются на основе насыщенности - нормальное (normal или medium) шрифтоначертание и, скажем, полужирное (bold), и прямое (regular) и курсивное (oblique или italic). Кроме того, некоторые гарнитуры имеют еще и дополнительные шрифтоначертания - такие, как подчеркнутое или перечеркнутое.

Так вот, индивидуальное имя шрифта складывается из названия его базовой гарнитуры и шрифтоначертания (или - шрифтоначертаний), например: Times полужирный курсивный, или Петергбург нормальный подчеркнутый. Строго говоря, именно к сочетанию имени гарнитуры и шрифтоначертаний и относится термин шрифт (font).

Шрифтовые гарнитуры объединяются в семейства по двум независимым признакам. С одной стороны, различают семейства моноширинных и пропорциональных гарнитур. В первом все символы занимают одно и то же место по горизонтали, вне зависимости от их относительной ширины. Это - шрифты пишущих машинок и их имитирующие - Courier, Балтика. В семействе пропорциональных гарнитур под символы, относительно более узкие (например, русское т) отводится меньшее место по горизонтали, чем под символы широкие (скажем щ).

Второй критерий разделения гарнитур на семейства - наличие или отсутствие так называемых серифов (serif), что обычно переводится как засечки, хотя в советском учебнике полиграфии дается более точное обозначение - отсечки (Б.М. Кисин. Графическое оформление книги. ГИСЛЕГПРОМ, 1946, 408 с.). Действительно, это - как бы декоративные дополнительные выступы, которые "отсекают" строку по горизонтали, способствуя фокусировке глаза вдоль нее. Так вот, гарнитуры, символы которых таковые имеют, объединяются в семейство Serif (шрифты с отсечками), прочие же - в семейство Sans Serif (иногда называемое также Гротеск). Очевидно, что как первые, так и вторые могут быть и моноширинными, и пропорциональными.

Примерами моноширинных гарнитур с отсечками являются упомянутые выше Courier и Балтика (стандартные шрифты латиницы и кириллицы для советских пишущих машинок, соответственно). Пример классических моноширинных гротесков мне на память не приходят, но в компьютерном мире они употребляются очень широко: это вариации на темы Fixed, Lucida Typewriter, Andale и им подобным.

Пропорциональные гарнитуры Serif - это подавляющее большинство гарнитур, представленных в книгах и прочей полиграфической продукции. Исторически большинство из них восходит к классическим гарнитурам Antiqua и Times, ныне же им несть числа: Книжная, Петербург, гарнитура Лазурского... Перечислять можно было бы долго. А если вспомнить про их современные компьютерные вариации - так и вообще можно сбиться со счета. Семейство пропорциональных гротесков, хотя и менее употребимо в полиграфии, но также весьма многочисленно. Это в первую очередь классическая Helvetica и ее многочисленные вариации типа Swiss, вплоть до всем известного компьютерного Arial.

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

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

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

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

Очевидно, что растровые шрифты единственно пригодны для применения в чисто текстовом режиме. Теоретически в графической (через Frame Buffer) консоли можно было бы воспроизводить и векторные шрифты, но практически это нигде и никем не реализовано. А вот в Иксах могут быть использованы как растровые, так и векторные шрифты, причем последние - во многих форматах.

Для растровых шрифтов в Иксах обычно применяется формат PCF (Portable Compiled Font). Эти шрифты по своей природе почти немасштабируемы - как и консольные шрифты для текстового режима. Конечно, в графическом режиме символ, образованный матрицей точек, можно в принципе растянуть (или сжать) по вертикали и горизонтали как угодно - но вид его при этом будет варьировать от среднепаршивого до вполне отвратительного. И потому каждая PCF-гарнитура содержит файлы шрифтов с несколькими матрицами точек - собственно, число матриц конкретного шрифта и определяет возможности его масштабирования. Но - не только: наборы растровых шрифтов предназначены для совершенно конкретных разрешений, как правило - 75 и 100 dpi (dot per inch, то есть точек на дюйм - здесь термин разрешение используется в квази-типографском смысле, а не в контексте видеосистемы). Первые используются при экранных (то есть пиксельных) разрешениях вплоть до 800x600, вторые - от 1024x768 и выше.

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

В Иксах находят себе применение как моноширинные, так и пропорциональные гарнитуры растровой формы воспроизведения. Первые используются главным образом в терминальных окнах, вторые же - для элементов интерфейса, а также вывода текстов в большинстве прикладных программ.

Штатная поставка Иксов в обязательном порядке включает в себя два шрифтовых набора растровых шрифтов общего назначения - с разрешениями 75dpi и 100dpi: именно под такими именами фигурируют содержащие их подкаталоги в сводном шрифтовом каталоге /usr/X11R6/lib/X11/fonts/. Ни тот, ни другой набор (а в их составе гарнитуры Courier, Helvetica, Times и несколько специальных) символов кириллицы не содержат ни в какой кодировке ее.

Впрочем, дискриминация русскоязычных (и кириллически-ориентированных) пользователей не столь уж выражена: испокон веку в комплекте Иксов есть и набор "нашинских" растровых шрифтов производства фирмы Cronyx, включающий гарнитуры Courier, Fixed (моноширинные), Times и Helvetica (моноширинные) - правда, только для кодировки KOI8-R. Качество их не то чтобы очень высокое, но на первое время сойдет.

Столь же обязательно наличие в комплекте Иксов так называемых misc-шрифтов, которые располагаются в каталоге /usr/X11R6/lib/X11/fonts/misc. Это - чисто моноширинные шрифты единственно гарнитуры (Fixed), которая включает набор шрифтовых файлов с разными матрицами (4x6, 5x7, 6x8 и так далее, вплоть до 10x20) и для разных наборов символов: в числе их, наряду со всеми кодировками ISO8859 (включая ISO8859-5 - ранее это называлось кодировкой ГОСТ для кириллицы), присутствует и KOI8-R. Шрифты misc-fixed предназначены в основном для терминалов, но могут использоваться и в приложениях (например, в текстовых редакторах).

В отечественные дистрибутивы Linux, а также в порты FreeBSD, включены дополнительные растровые шрифты с поддержкой кириллицы. Насколько мне известно, все они представляют собой расширения и улучшения набора Cronyx, выполненные Дмитрием Болховитяниновым, собравшим их в виде пакета cyr-rxf. Пакет этот включает, кроме стандартных гарнитур Times, Helvetica, Courier, дополнительные пропорциональные гарнитуры Lucida и Serene и моноширинные - Lucida Typewriter и Serene Typewriter, правда, только для кодировки KOI8-R. Не смотря на то, что все эти шрифты рассчитаны на разрешение 75 dpi, каждая гарнитура содержит большое количество шрифтовых файлов с разными матрицами (от 8 до 24 точек по вертикали), что позволяет использовать их при высоких разрешениях. И еще одна отличительная особенность пакета - наличие отдельных шрифтовых файлов для разных начертаний - нормального, курсивного и полужирного.

Что касается векторных шрифтов - Иксы, насколько мне известно, поддерживают все распространенные их форматы. Однако практическое значение в наших условиях имеют только Adobe Type 1 и True Type Fonts (TTF) - прочие, типа Speedo, поддержкой кириллицы не обременены. Однако и для Type 1 или TTF кириллических вариантов штатно не предусмотрено. И потому обзаведение ими для использования в Иксах - дело рук самого использователя.

Правда, отечественные дистрибутивы содержат и кириллические шрифты обоих типов, причем - для многих кодировок кириллицы, включая, кроме KOI8-R, также CP1251 и ISO8859-5. В формате Type 1 существует несколько шрифтовых наборов для кодировки KOI8-R. Однако они бедны в отношении гарнитур, качество шрифтов не всегда "на уровне", и лицензионная чистота некоторых из них не вполне ясна.

Наиболее интересны наборы Type1 и TTF, разработанные Валентином Филипповым и распространяемые в составе дистрибутивов Altlinux, но доступные в Сети и сами по себе. Гарнитуры обоих наборов - весьма многочисленны: здесь и гротески Avantgarde, Gothic, Helvetica, Nimbus Sans, и серифы Bookman, Centure Scoolbook, Nimbus Roman, Palatino, Times, и моноширинные гарнитуры Courier и Nimbus Mono. Качество шрифтов весьма высокое - хотя и не всех. Имеются отдельные файлы для различных шрифтоначертаний - нормального, "легкого", полужирного и жирного, курсивного. Шрифты Валентина изначально создавались в кодировке Unicode (UTF8), так что могут быть использованы для передачи любых наборов символов кириллицы (как KOI8, так и CP1251). В общем, учитывая их лицензионную чистоту, - вполне приемлемый выбор.

Однако наибольшее распространение в последнее время получили среди отечественных пользователей юникодные TTF-шрифты, заимствованные из Windows. Малый их джентльменский набор, включающий гарнитуры гротеска Arial, Tahoma, Verdana, сериф Times New Roman, моноширинные Andale и Coutier New, долгое время (видимо, по недосмотру) был доступен свободно на сайте Microsoft. Правда, на условиях распространения только через Сеть (то есть без права на включение в дистрибутивы) и исключительно в первозданном виде - каковой являл собой, понятное дело, cab-архивы. Теперь с сайта Microsoft эти шрифты исчезли, но явного запрещения на их использование и сетевое распространение, насколько мне известно, так и не последовало. И потому их можно (в виде пакета corefonts) скачать с одного из сайтов, где они имеют место быть, распаковать и юзать в своей POSIX-системе вполне легально. На сей предмет была даже специально придумана утилита cabextract и разработана методика ее применения.

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

Как уже говорилось, файлы любого шрифтового набора принято помещать в отдельный каталог внутри каталога /usr/X11R6/lib/X11/fonts/. Поступим так и с извлеченными из cab-архива TTF-шрифтами, создав для них подкаталог corefonts (например). Однако, чтобы Иксы были в состоянии их воспринять, шрифтовой подкаталог должен содержать еще файл fonts.dir и (для масштабируемых векторных шрифтов) fonts.scale. Это - простые списки имен шрифтовых файлов и полного описания соответствующего им шрифтоначертания, например:

Arial.TTF -monotype-Arial-medium-r-normal--0-0-0-0-p-0-koi8-ru

Эту длинную последовательность можно представить в виде подобия базы данных, в которой имя шрифтового файла (в примере - Arial.TTF) выступает в качестве идентификатора записи, а все остальное образовано отдельными полями с дефисом в качестве разделителя. Поскольку тот же формат описания шрифта используется утилитой xfontsel и в так называемых файлах X-ресурсов (речь вскоре дойдет и до того, и до другого), остановимся на смысле отдельных полей подробнее.

Первое поле в терминологии xfontsel носит название fndry - от слова foundry, одно из значений которого - литейная форма (шрифта). А его содержание - это имя фирмы-разработчика, в примере - известного разработчика шрифтов Monotype (то есть можно понимать таr - отлито Монотайпом). И маленькое отступление для тех, кто не может поступиться принципами. И кому западло использовать что бы то ни было, произведенное в "Империи зла". Так вот, все TTF-шрифты из поставки Windows разработаны именно фирмой Monotype. Более того, гарнитуры Arial, Courier New и Times New Roman - это вариации на тему классических гарнитур Helvetica, Courier и Times, соответственно, которые вообще являются общенародным достоянием, а Tahoma и Verdana созданы Monotype по мотивам гротесков середины прошлого столетия. О происхождении Andale, к сожалению, ничего сказать не могу, но полагаю - и тут ничто не ново под луной. Так что при использовании этих шрифтов поступаться принципами не приходится...

Второе поле нашей "как бы базы" (в xfontsel оно называется fmly, то есть family) - это имя гарнитуры, которую данный шрифтовой файл представляет. Третье (wght - от weight, то есть толщина) - шрифтоначертание в критериях насыщенности, в примере - нормальное (medium), другие возможные значения - "светлое" (light), полужирное (bold), и так далее. В следующем же поле (slant) описывается шрифтоначертание с точки зрения наклона - нормальное (r - от roman) или курсивное (i, o - от italic и oblique, соответственно). За этим следует поле sWdth (set Width), описывающее "компоновку" шрифта - нормальную (normal), как в примере, или сжатую (condensed). Ну а позиция между двумя дефисами - это принадлежность гарнитуры к одному из трех семейств (к традиционным serif и sans serif добавляется decorative); очевидно, что она следует из имени гарнитуры, и потому здесь это поле пустое.

Следующие четыре поля определяют: размер шрифта в пикселях (pxlsz), размер шрифта в "точках" (points, ptsz), разрешение шрифта по горизонтали (resx) и вертикали (resy) в точках на дюйм (dpi). В примере все они заполнены нулями, что свидетельствует о принадлежности рассматриваемого шрифта к категории масштабируемых (таковыми являются все векторные шрифты, как TTF, так и Type 1). Однако для растровых шрифтов здесь стояли бы соответствующие значения, характеризующие данный шрифтовой файл, например 10-100-75-75. Следующим полем (spc - от spacing) описывается принадлежность к пропорциональному (p) или моноширинному (m) семействам. А затем - поле avgWdth, в котором определяется средняя ширина символа в шрифте. Наконец, в последних двух полях указываются набор символов (rgstry - от registry, и encdng - от encoding) шрифта (например, koi8) и его вариации (например, ru и r - для KOI8-R).

Рассмотренное описание каждого шрифта может показаться несколько запутанным и непонятным (да и на самом деле таковым является; хотя, как мы вскоре увидим, некоторая сермяжная правда в таком формате есть). Тем не менее, это - объективная реальность, данная нам в ощущениях разработчиков Иксов, и с ней приходится считаться. То есть - создать файл fonts.dir в новообразованном каталоге. Благо, для этого существуют утилиты - mkfontdir для шрифтов Type 1 и ttmkfdir - для шрифтов True Type. Правда, в комплект Иксов входит лишь первая - вторая должна быть установлена самостоятельно. Однако использование обеих - элементарно просто: достаточно дать одноименную команду с именем шрифтового каталога в качестве аргумента, в нашем примере это будет выглядеть так:

$ ttmkfdir /usr/X11R6/lib/X11/fonts/corefonts

И получить в результате тот самый файл fonts.dir со всеми его зубодробительными записями, а заодно - и с количеством оных в первой строке (это - обязательный элемент файла, без него X-сервер не сможет построить таблицу доступных шрифтов). Важно также, что для юникодных шрифтов автоматически будут заполнены поля rgstry и encdng - в соответствие с реально доступными в них наборами символов.

Что же касается файла fonts.scale для масштабируемых шрифтов, то его содержание идентично таковому fonts.dir, и его можно создать простым копированием последнего (а также сделать жесткой или символической ссылкой на него).

Теперь остается совсем немногое: внести в секцию Files Иксового конфига строку вида

        FontPath     "/usr/X11R6/lib/X11/fonts/corefonts/"

и перезапустить X-сервер, чтобы наслаждаться кириллическими TTF-шрифтами. Проследив предварительно, имеет ли место быть в секции Module конфига строка

	Load  "ttf"

обеспечивающая их поддержку: с некоторых пор это штатная функция X-сервера, тогда как ранее для использования True Type требовались специальные серверы шрифтов (Fonts Server). Использование их не возбраняется и ныне, однако на настольной машине, по моему мнению, лишено смысла. Единственное, что дает Font Server - это возможность загрузки шрифтов с удаленного компьютера, что для пользовательского десктопа не актуально. А вот тормозить работу Иксов сервер шрифтов может вполне...

Теперь нужно только найти способ разбираться с наличным шрифтовым богачеством - выбирать нужные шрифты и устанавливать их. Что касается последнего - для собственно Иксовых приложений это делается либо опциями их командной строки при запуске, либо - в специальных файлах X-ресурсов, о чем речь пойдет в ближайшей интермедии. А вот выбор нужного для установки шрифта возможен на поминаемую выше утилиту xfontsel. Она позволяет через пункты меню, соответствующие описанным ранее полям в файле fonts.dir, выбрать для последних нужные значения (с визуальным контролем результата), а затем, нажатием на кнопку select, скопировать их в буфер. После чего параметры нужного шрифта могут быть либо вставлены в 4командную строку в виде значения соответствующей опции (например, опции -fn), либо вставлены в описание ресурсов приложения в файле типа ~/Xdefaults (см. следующую интермедию).

Выбирать шрифт через меню xfontsel можно в любом порядке. Например, можно сначала через два последних пункта (rgstry и encdng) отфильтровать только шрифты с поддержкой кириллицы, а затем уже определиться с гарнитурой, шрифтоначертанием и размером. Более того, для корректного представления шрифта часто нет нужды в определении всех параметров шрифта: некоторые из них (как, например, размер в пикселях и точках, горизонтальное и вертикальное разрешения) жестко сцеплены друг с другом: выбор размера шрифта 12 пунктов автоматически влечет установку значения 120 в точках. А такие параметры, как семейство гарнитур или их характер (пропорциональный и моноширинный), вообще однозначно вытекают из имени гарнитуры. Хотя шрифты можно фильтровать и по этим признакам: сначала отобрать все моноширинные гарнитуры, пригодные для использования в терминале, а потом уже детализировать свой выбор. Почему я и говорил, что формат описания шрифта содержит в себе некую сермяжную правду...

Назад Содержание Вперед

VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...