Система X Window

11.1 - Введение в X



Система X Window (иногда просто "X", иногда, неправильно называемая "X Windows") является средой, предоставляющей графические службы OpenBSD и другим системам, основанным на UNIX. Однако, сама по себе X предоставляет немного – нужен ещё менеджер окон (Window Manager), представляющий интерфейс пользователя. Большая часть «персональности» X является заслугой менеджера окон, а не самой X. OpenBSD поставляется с бесплатной версией менеджера fvwm(1), хотя, можно использовать любой менеджер окон из пакетов. Поиск по ключевым словам "window manager" даст множество доступных менеджеров окон.

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

Можно запускать X-клиенты на системах без поддержки графики вообще. Например, приложение (X-клиент) может быть запущено на mvme88k, а отображаться на графическом дисплее alpha (X-сервер). Так как X – хорошо продуманный кросс-платформенный протокол, возможно даже, что приложение, запущенное, например, под управлением Solaris, использовало машину под OpenBSD для отображения.

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


11.1.1 - Насколько мощный компьютер нужен для X?



Сама по себе, X – довольно большая программа, если планируется регулярно запускать и останавливать её, то желателен быстрый компьютер. Однако, однажды запущенная, она достаточно шустра даже на маломощных компьютерах. На некоторых платформах, для получения достаточной производительности при отображении даже текстовой информации желательно использование X. Эти платформы, такие как sparc и sparc64 проектировались под графический интерфейс и производительность алфавитно-цифровой консоли у них очень скромная. Есть мнение, что смыслом использования X является запуск X-приложений.

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


11.1.2 - Возможна ли какая-нибудь графика без X?



Предположим, что речь не идёт о ASCII-графике, которой подойдёт и framebuffer-консоль. Некоторые операционные системы это могут, но ни OpenBSD пока этого не может, ни разработчики не проявляют интереса к такой возможности.


11.2 - Настройка X



Настройка X сильно отличается от платформы к платформе. В любом случае, инструкции и платформенно-зависимая информация есть в /usr/X11R6/README установленной системы.

Некоторые платформы требуют драйвер апертур xf86(4), предоставляющий доступ к памяти и портам ввода-вывода карты VGA и регистрам конфигурации PCI, нужный X-серверам. Этот драйвер должен быть включен до его использования ответом "yes" на вопрос:


Do you expect to run the X window System [no]


во время инсталляции или изменением значения machdep.allowaperture в /etc/sysctl.conf на соответствующее платформе ненулевое, с последующей перезагрузкой машины (этот sysctl не может быть изменён после окончания процесса загрузки по требованиям безопасности). Есть предпосылки для такого запрета, так что его не стоит нарушать без необходимости.


11.2.1 - alpha



См. /usr/X11R6/README для alpha.

Установите machdep.allowaperture=1 в /etc/sysctl.conf.

Поддерживаются TGA и некоторые VGA карты. Дальнейшая настройка не требуется.


11.2.2 - amd64



См. /usr/X11R6/README для amd64.

Установите machdep.allowaperture=2 в /etc/sysctl.conf.

X на amd64 часто настраивается автоматически достаточно удачно, дальнейшая настройка в большинстве случаев не требуется. Для дальнейшей настройки используется X -configure (См. примеры ниже).

11.2.3 - armish
Нет X сервера, только X клиент.
11.2.4 - hp300
/usr/X11R6/README для hp300.
11.2.5 - hppa
Нет X сервера, только X клиент.


11.2.6 - i386



См. /usr/X11R6/README для i386.

Установите machdep.allowaperture=2 в /etc/sysctl.conf.

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

К счастью, всё не так плохо, как может показаться -- в большинстве случаев, X "просто работает" после вызова startx. В таком случае, аппаратное обеспечение было опознано и признано, X будут работать очень хорошо.


11.2.7 - landisk


Нет X сервера, только X клиент.


11.2.8 - luna88k


Нет X сервера, только X клиент.


11.2.9 - mac68k



См. /usr/X11R6/README для mac68k.

Установите machdep.allowaperture=2 in /etc/sysctl.conf.

Система Mac68k "просто работает" с X, настройка не требуется.

Мышь: Стандартная мышь Macintosh имеет только одну кнопку, что таки является проблемой, так как X Подразумевает 3-х кнопочную мышь. Некоторые сторонние производители предлагают мыши с двумя кнопками, которые будут работать под X. Если нет, то следует обратьиться к руководству по Xmac68k(1) за инструкциями по эмуляции мышиных кнопок.


11.2.10 - macppc



См. /usr/X11R6/README для macppc.

Установите machdep.allowaperture=2 in /etc/sysctl.conf.

Поддерживаемые системы Macintosh PPC могут работать в двух различных режимах - ускоренном и страничного обмена (не ускоренном)

В режиме страничного обмена, система будет работать с цветовым разрешением 8 бит на пиксель, а экранное разрешение будет под контролем среды Macintosh - скорее всего, понадобится небольшой раздел диска с MacOS для настройки этих параметров. Этот режим имеет то преимущество, что он "просто работает", хотя он туповат - например, для смены разрешения экрана нужно загружаться в MacOS.

Если видеосистема Macintosh построена на ATI, то можно запустить X сервер в ускоренном режиме, что даст большую производительность и возможности настройки в среде OpenBSD. Видеокарты NVIDIA в некоторых системах macppc работают в большинстве случаев. См. о настройке ускоренного драйвера и примеры в README.

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


11.2.11 - mvme68k



X-серверов нет, клиенты есть.


11.2.12 - mvme88k



X-серверов нет, клиенты есть.


11.2.13 - sgi



X-серверов нет, клиенты есть.


11.2.14 - sparc



См. /usr/X11R6/README для sparc.

С единственным framebuffer дополнительная настройка не нужна, для многоголовых конфигураций - см. README выше.

Разрешение задаётся встроенными средствами до загрузки OpenBSD.


11.2.15 - sparc64



См. /usr/X11R6/README для sparc64.

Есть несколько разновидностей этих машин, нужно знать, к какому именно типу относится данная (PCI или SBus), к какому порту подключена мышь (zstty, com, или USB/PS2), и какая видеокарта используется. В README есть пример файла xorg.conf, который нужно изменить сообразно имеющемуся аппаратному обеспечению.Не стоит ожидать, что неизменённый он сразу заработает!.


vax



/usr/X11R6/README для vax.

X server работает только на VAXstation 4000 models с lcg(4) или lcspx(4) framebuffer.


zaurus



См. /usr/X11R6/README для zaurus.

Настройка не требуется, X "просто работает".


11.3 - Настройка X на amd64 и i386



Разнообразие вариантов аппаратного обеспечения делает процесс настройки X мудрёным.


11.3.1 - Настройка X.Org



Было сделано множество усовершенствований чтобы серверы X.Org "просто работали". В большинстве случаев, они просто работают даже без файла конфигурации /etc/X11/xorg.conf. Но не всегда, а иногда надо подправить и то, что и так работает.

Есть пара программ, которые можно использовать для полуавтоматического создания файла конфигурации X.Org на i386. К сожалению, ни одна из них не гарантирует создания полностью работоспособного файла конфигурации.

    Xorg(1) работает в режиме "X -configure" и загружает все доступные модули видео-драйверов, пробует другое аппаратное обеспечение и, на основании найденного, составляет файл конфигурации xorg.conf. Он может работать, а, реже, и нет - в любом случае, он является хорошей отправной точкой для создания нового.
    xorgconfig(1), по идее, долежн работать как в графическом, так и в текстовом режиме, хотя графический режим не полностью функционален. По этому, его рекомендуется запускать в текстовом режиме командой "xorgcfg -textmode"
   
В дополнение к перечисленным программам, есть ещё один заслуживший признание метод - воспользовавшись поисковой системой, найти кого-нибудь, кто уже сделал это на подобной аппаратной платформе. Путь неплох, но не станем на нём останавливаться в рамках этого документа.


11.3.2 - Машина для примера



Для демонстрации процесса установки X, используем систему на базе Celeron 400 MHz с AGP-слотом. Видеокарта - что-то старенькой, указанное в dmesg как:


vga1 at pci1 dev 0 function 0 "3DFX Interactive Banshee" rev 0x03



Это когда-то крутая видеокарта с 16 MB RAM, которая в данный момент почти не поддерживается современными распространёнными операционными системами. Монитор Sony Multiscan G400 19" CRT будет неплохо работать в режиме 1280х1024 с пристойной частотой обновления и 24-битным цветом.

Сначала, после установки OpenBSD с поддержкой X (не забыть убедиться, что драйвер апертур разрешён ядром), посмотрим, не повезёт ли нам - вдруг X.Org сам всё определит и настроит... Просто войдём и используем команду startx(1). Экран чернеет на какое-то время, потом появляется "шахматный" фон, курсор X и окно x-терминала.

Заработало!

Более-менее... Система функциональна, но не похоже, что использованы все возможности монитора - он работает с разрешением 640х480. Попытаемя сделать что-то получше. Намного лучше, если честно - для этого понадобится создать свой файл конфигурации xorg.conf.

Используем "X -configure" для создания изначального файла конфигурации - от лица root сделаем следующее:


# X -configure
[...]
Your xorg.conf file is /root/xorg.conf.new


     Для проверки сервера, запустим 'X -config /root/xorg.conf.new'

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

Надолго это не задержит, но лучше сделать так, как советуют...


# X -config /root/xorg.conf.new


Теперь - просто чёрный экран, а как всё хорошо начиналось...

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

    CTRL-ALT-Backspace: обычно вызывает немедленную остановку X вместе со всеми запущенными X-приложениями. Конечно, в режиме настройки, толком ничего не запущено и проблем не будет (в действительности, в данном случае, это лучший способ выйти из Х)
    Войти через SSH, и "pkill Xorg", что должно убить процесс X и вернуть нас к нормальной консоли.
    Войти через SSH и перезапустить систему.
    Перезагрузиться на холодную или горячую. Иногда, дела настолько плохи. Хорошо, если X заработала до того как были запущены ответственные приложения. Иногда, неправильная конфигурация Х может подвесить всю систему так, что спасёт только холодная перезагрузка.

К счастью, в нашем случае, CTRL-ALT-Backspace сработало и мы вернулись в консоль. Теперь нужно выяснить, что не так. Сначала, посмотрим, что по этому поводу думает Xorg - это записано в файле /var/log/Xorg.0.log. В данном случае, выясняется, что Х считала, что всё в порядке, в журнале не отображено ни одной значительной ошибки (строки, начинающиеся с "(EE)" относятся к ошибкам).

Здесь пригодится знание аппаратного обеспечения. Подключив систему к другому монитору, получаем на чёрном экране сообщение о превышении частоты синхронизации ("Sync. Out of Range"). Получается, что созданная конфигурация X не будет работать с этим монитором, а может быть, и ни с каким другим, если выбранный видеорежим не поддерживается видеокартой (X принимает во внимание потенциальные возможности микросхем, а не на то, что из них сделал производитель). Другие мониторы ведут себя по-другому в подобной ситуации - некоторые пытаются отобразить что могут, другие переходят в режим энергосбережения, третьи издают пугающие звуки, четвёрнтые выводят на экран диагностические сообщения. Этот мониотор, по видимому, не делает ничего. Принимаем решение не использовать его больше для начальной настройки X.

Просматривая полученный файл конфигурации xorg.conf.new, можно увидеть:


Section "Monitor"
      #DisplaySize      370   270     # mm
      Identifier   "Monitor0"
      VendorName   "SNY"
      ModelName    "SONY CPD-G400"
### Comment all HorizSync and VertSync values to use DDC:
      HorizSync    30.0 - 107.0
      VertRefresh  48.0 - 120.0
      Option      "DPMS"
EndSection


Для проверки, попробуем задействовать DDC ("Data Display Channel", канал отображения данных - способ, которім монитор может сказать видеокарте, на что он способен) и посмотрим, что получится. На этот раз мы видим движущийся курсор на сетчатом фоне - приходится выходить опять через CTRL-ALT-Backspace. Опять мы получили очень низкое разрешение, но всё работало - теперь ясно, что проблема в разрешении и частоте синхронизации. Восстановим значения горизонтальной синхронизации "HorizSync" и вертикальной развёртки "VertRefresh" согласно найденным в Интернете характеристикам нашего монитора.

Попытаемся заставить работать с заданным разрешением. В разделе "Screen" файла конфигурации xorg.conf добавим несколько строчек - добавленные строки выделены  знаком "# <---":


Section "Screen"
      Identifier "Screen0"
      Device     "Card0"
      Monitor    "Monitor0"
      DefaultDepth   24      # <---      
      SubSection "Display"
              Viewport   0 0
              Depth     1
      EndSubSection
      SubSection "Display"
              Viewport   0 0
              Depth     4
      EndSubSection
      SubSection "Display"
              Viewport   0 0
              Depth     8
      EndSubSection
      SubSection "Display"
              Viewport   0 0
              Depth     15
      EndSubSection
      SubSection "Display"
              Viewport   0 0
              Depth     16
      EndSubSection
      SubSection "Display"
              Viewport   0 0
              Depth     24
              Modes      "1280x1024"  # <---
      EndSubSection
EndSection


Эти два изменения заставляют X использовать глубину цвета в 24 бита при разрешении 1280х1024. Так как для этой глубины цвета не указано других разрешений, у системы не будет другого выхода.

Проверяем - таки РАБОТАЕТ! Получили неплохой результат - дисплей высокого разрешения. На данном этапе это всего лишь сетчатый фон (очень хороший чтобы убедиться в высоком качестве монитора и калибрования жидкокристаллических мониторов, так называемый, "root weave") и движущийся курсор. На этом этапе другой функциональности и не планировалось.

Теперь, установим этот файл конфигурации таким образом, чтобы он использовался по умолчанию и насладимся удобством использования X.


# cp xorg.conf.new /etc/X11/xorg.conf


Теперь X можно запускать стандартной командой startx(1). Не помешает убедиться, что разрешение и глубина цвета соответствуют желаемым и что частота обновления тоже на приличном уровне. Это делается командами xrandr(1) и xdpyinfo(1). Кроме всего остального, xdpyinfo(1) отвечает, что:


  [...]
screen #0:
print screen:    no
dimensions:    1280x1024 pixels (433x347 millimeters)
resolution:    75x75 dots per inch
depths (7):    24, 1, 4, 8, 15, 16, 32
root window id:    0x44
depth of root window:    24 planes
  [...]


Значит мы таки используем 1280x1024 с глубиной 24 бита. xrandr(4) отвечает, что:


SZ:    Pixels          Physical       Refresh
*0   1280 x 1024   ( 433mm x 347mm )  *85   75   60  
1   1280 x 960    ( 433mm x 347mm )   85   60  
  [...]


что означает, что частота обновления составляет 85 Гц, что должно быть комфортабельно для большинства пользователей.


11.3.3 - Что если не всё так "просто"?



Иногда не всё срастается... Вот несколько подсказок.

    Почитать руководство к используемому Х-серверу. В рассмотренном примере, в файле /var/log/Xorg.0.log записано, что используется драйвер TDFX, что означает, что нужно читать man tdfx(4). Часто там можно найти подсказки, ограничения и опции для настройки имеющейся видеокарты. Это меняется от драйвера к драйверу, так что не стоит пренебрегать чтением руководства к данному драйверу лишь потому, что вы читали когда-то о другом.
    Попробовать разные мониторы. Как выяснилось из приведённого примера, разные мониторы часто дают подсказки если что не так.
    Попробовать драйвер vesa(4). Это, определённо, последний выбор в плане производительности, но он работает почти на всех видеокартах, включая и те, для которых лучшего драйвера не подобрать.
    Использовать другое аппаратное обеспечение - если есть выбор, то можно попробовать другую видеокарту.



11.4 - Запуск X



Есть два варианта запуска X.


11.4.1 - По требованию:



После авторизации в консоли наберите команду startx(1).


11.4.2 - Загрузка X автоматически:



Это делается с помощью xdm(1), менеджера дисплеев X. xdm(1) запускается с привилегиями root, обычно из rc и выдаёт приглашение к входу в систему. После успешной авторизации, он запускает X-сессию для соответствующего пользователя. Когда сессия завершается, (включая использование CTRL-ALT-Backspace), xdm(1) снова выдаёт приглашение ко входу в систему. Поэтому, не запускайте xdm(1) из /etc/rc.conf.local, не убедившись в том, что X работает должным образом. Иначе, ситуацию будет достаточно сложно исправить (в худшем случае, придётся загрузиться в однопользовательском режиме, как если утерян пароль, и исправить параметр xdm_flags в файле /etc/rc.conf.local)

На некоторых платформах, для запуска xdm(1) придётся запретить консоль getty(8).

Перевод соответствует $OpenBSD: faq11.html,v 1.74 2007/12/27 01:42:47 nick Exp $