Конфигурирование X-сервера в Linux

Администраторы, да и некоторые продвинутые пользователи систем UNIX и Linux нередко сталкиваются с проблемами, касающимися работы X-сервера или просто Xorg. Это происходит по разным причинам: восстановление сломанной системы, установка нового оборудования, конфигурация, сборка и задействование нового ядра системы и т. д. Для того, чтобы успешно решать подобные проблемы, необходимо понимать как устроена, во-первых система X Window, а во-вторых уверенно ориентироваться в особенностях конфигурации самого сервера Xorg.

Способы конфигурирования Xorg

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

Вообще, сервер Xorg способен работать без использования файлов конфигурации, благодаря специализированным KMS-модулям ядра. Однако это далеко не самый распространённый и гибкий вариант эксплуатации Xorg. Куда лучше использование других вариантов:

  • работа с конфигурационными файлами;
  • использование утилит конфигурации Xorg (таких как xrandr).

Конечно же, вариант с использованием утилиты предпочтительнее, однако следует уметь работать и непосредственно с объектами конфигурации, одним из которых для сервера Xorg является файл xorg.conf.

Конфигурационный файл Xorg и его разделы

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

Для того, чтобы как-то представить себе, что являет собой конфигурация Xorg, можно выполнить следующую команду:

$ Xorg -probeonly

Однако в настоящее время во многих системах опция -probeonly является устаревшей и вместо неё можно использовать -showconfig, но она менее информативна. Следующая команда:

$ Xorg -configure

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

Структура и формат файла xorg.conf основаны на специфических разделах конфигурации, заключаемых между ключевыми словами Section  и EndSection. В следующей таблице приведены самые основные разделы конфигурации файла xorg.conf:

Раздел Описание
Device Содержит параметры конфигурации о видеоплате, её драйвере и другом оборудовании
Monitor Определяет параметры для используемого монитора, такие как синхронизация, разрешения дисплеев и т. д.
InputDevice Описывает устройства ввода —  клавиатуры и мыши
ServerLayout Задаёт параметры связывания устройства ввода с экранами и определяет позиционирование экранов относительно друг друга
Module Задаёт динамически загружаемые модули для ускоренной графики, визуализаторов шрифтов и т. д.
ServerFlags Хранит главные конфигурационные параметры Х-сервера
Screen Связывает используемый монитор с видеоплатой (Device), а также определяет значения разрешений и глубину цвета, доступные в данной конфигурации

Разделы файла xorg.conf подчинены иерархии по уровню использования в системе. Так например, раздел Device является самым «нижним» уровнем, далее следуют Monitor, затем Screen и на самой вершине — ServerLayout. Этот принцип удобно использовать в задании конфигурации Xorg, поскольку данный подход легко адаптировать для разных систем с разным аппаратным обеспечением. Суть подхода заключается в том, чтобы начинать задание конфигурации с самых «нижних» разделов, постепенно продвигаясь наверх.

На следующем рисунке изображена схема иерархии разделов конфигурации файла xorg.conf, из которой видно как из комбинации физического дисплея Monitor и видеоплаты Device формируются экраны Screen. А совокупность экранов и устройств ввода образуют единую структуру SrverLayout, которых может быть несколько. Однако использоваться для одного экземпляра X-сервера может только одна.

Следует заметить, что некоторые из разделов xorg.conf являются стандартными и даже универсальными для разных систем и оборудования. В свою очередь разделы Device, Monitor, Screen, InputDevice, а также ServerLayout требуют задания эксклюзивной конфигурации.

Раздел Device

В этом разделе указываются видеоустройство (видеокарта), а также соответствующий видеоустройству драйвер. Каждая запись (настроййка) делается отдельной строкой и выглядит примерно так:

Section “Device”
Identifier “vega64”
Driver “amdgpu”
. . .
EndSection

Следует обратить внимание на то, что драйвер будет подключен только в том случае, если в соответствующем разделе Screen имеется корректная ссылка на соответствующее видеоустройство.

Не лишним будет ознакомиться с информацией из справочного руководства для драйвера. В данном примере команда man amdgpu выведет основную информацию о поддерживаемых драйвером amdgpu устройствах, а также список и описание опций для настройки и управления режимами работы (отключение/включение аппаратного ускорения, вертикальной синхронизации, режима FreeSync и т. д.) видеокарты AMD Vega 64.

Раздел Monitor

Для того, чтобы X-сервер корректно управлял мониторами, подключенными к системе, ему необходима некоторая информация о них, а именно:

  • идентификатор монитора;
  • опции управления;
  • частоты горизонтальной и вертикальной развертки (для CRT-мониторов).

Хотя последний пункт и необязателен для современных мониторов, однако и для них он может быть полезным. Пример записи из секции Monitor:

Section "Monitor"
Identifier  "SyncMaster"
Option  "DPMS"
HorizSync  30-60
VertRefresh  60-120
EndSection

Строка Identifier определяет имя, по которому диспетчер дисплеев будет ссылаться на данный монитор. Опция «DPMS» позволяет X-серверу автоматически отключать питание монитора используя для этого сигналы управления питанием для лучшего энергосбережения.

Значения для параметров  HorizSync и  VertRefresh стоит брать из руководства по эксплуатации монитора. Обычно здесь указываются диапазоны частот.

Раздел Screen

В данном разделе формируются доступные дисплеи из связки видеоустройства и монитора, описанных в предыдущих разделах более «низкого» уровня, согласно вышеупомянутой иерархии разделов файла xorg.conf. Также в этом разделе приводятся несколько записей, каждая из которых связывает в единый дисплей (которым потом и управляет менеджер дисплеев) видеокарту и монитор при определённой глубине цвета. Пример раздела Screen:

Section "Screen"
Identifier "Screen0"
Device "vega64"
Monitor "SyncMaster"
DefaultDepth 24
Subsection "Display"
Depth 8
Modes "640x400"
EndSubsection
Subsection "Display"
Depth 16
Modes "640x400" "640x480" "800x600" "1024x768"
EndSubsection
Subsection "Display"
Depth 24
Modes "1280x1024" "1024x768" "800x600" "640x400" "640x480"
EndSubsection
EndSection

Как можно видеть, в данном примере имеются подразделы — для каждой глубины цвета отдельно. А значение по-умолчанию задаётся опцией DefaultDepth.

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

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

Раздел InputDevice

В этом разделе описываются устройства ввода, например клавиатура и мышь. Каждое устройство описывается в собственном разделе InputDevice, в котором, как и по аналогии с другими разделами задаётся идентификатор устройства. Пример описания клавиатуры:

Section "InputDevice"
Identifier "Generic Keyboard"
Driver  "Keyboard"
Option  "AutoRepeat" "500 30"
Option  "XkbModel" "pc104"
Option  "XkbLayout" "us"
EndSection

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

Типичная запись раздела InputDevice для мыши может выглядеть так:

Section "InputDevice"
Identifier "Generic Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "IMPS/2"
Option "Emulate3Buttons" "off"
Option "ZAxisMapping" "4 5"
EndSection

Файл устройства мыши задаётся опцией Device. Для указания системе, что данная мышь используется как основное указывающее устройство определяется значение CorePointer. Для указания протокола связи с мышью (который зависит от конкретной модели и производителя) существует параметр Protocol – в данном случае IMPS/2. Если после задания конфигурации для мыши с ней возникают проблемы, то необходимо в первую очередь попробовать использовать другие протоколы связи: ExplorerPS/2 (для мышей с 3-мя и более кнопками), а также VUID. Если вместо значения Protocol задать значение auto, то X-серевер самостоятельно попытается определить оптимальный протокол для используемой мыши.

Для эмуляции работы 3-й кнопки мыши (нажатие двух кнопок интерпретируется как нажатие 3-й) существует параметр Emulate3Buttons. Для улучшенной поддержки колёсика, а также для работы джойстиков применяется параметр ZaxisMapping.

Раздел ServerLayout

Как уже ранее отмечалось, раздел ServerLayout объединяет в единую компоновку параметры из других разделов файла xorg.conf. Компоновок ServerLayout может быть определено несколько — для каждой аппаратной платформы своя, которая определяет дисплей (не путать с мониторами) конкретного экземпляра X-серевера. Компоновка идентифицируется опцией Identifier:

Section "ServerLayout"
Identifier "Simple Layout"
Screen  "Screen 1" LeftOf "Screen 2"
Screen  "Screen 2" RightOf "Screen 1"
InputDevice "Generic Mouse" "CorePointer"
InputDevice "Generic Keyboard" "CoreKeyboard"
Option  "BlankTime" "10" # Погасить экран через 10 минут
Option  "StandbyTime" "20" # Отключить экран через 20 минут (DPMS)
Option  "SuspendTime" "60" # Полное засыпание через 60 минут (DPMS)
Option  "OffTime" "120"# Отключить DPMS-монитор через 2 часа
EndSection

Когда к видеокарте подключено несколько мониторов, то они должны связываться с определённым направлением относительно друг друга. Например, как в приведённом примере экран «Screen 1» расположен левее экрана «Screen 2». Опциями InputDevice определяются, как видно, устройства ввода, используемые для данной компоновки.

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

Конфигурирование утилитой xrandr

Для сервера Xorg существуют функциональные модули расширений, упрощающие конфигурирование. Одним из таких расширений является утилита xrandr. Она позволяет без ручного копания в файле xorg.conf задать требуемую компоновку X-сервера, выполнив всю рутинную работу. При выполнении без аргументов утилита xrandr выводит информацию о текущей компоновке, включающей в себя данные о подключенных мониторах и доступных им разрешениях и режимах работы:

$ xrandr

Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
HDMI-A-1 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 459mm x 296mm
1680x1050     59.88*+
1920x1080     60.00    59.94
1280x1024     75.02    60.02
1440x900      74.98    59.90
1280x960      60.00
1280x800      59.91
1152x864      75.00
1280x720      60.00    59.94
1024x768      75.03    70.07    60.00
832x624       74.55
800x600       72.19    75.00    60.32    56.25
720x480       60.00    59.94
640x480       75.00    72.81    66.67    60.00    59.94
720x400       70.08

Как видно из этого вывода, в системе активным является (обозначено символом звёздочки «*») разрешение 1680×1050.

Для задания произвольной конфигурации можно использовать команду xrandr, например со следующими аргументами:

$ xrandr --auto --output VGA-0 --mode 800x600 --right-of DVI-0

Здесь опция —auto включит все доступные мониторы. Опции —output и —mode указывают всем мониторам с матрицей VGA задействовать разрешение 800×600 точек. А опция —right-of определяет расположение VGA-монитора справа от монитора, подключенного через DVI-разъём.

Утилиту xrandr можно запускать автоматически во время запуска X-сервера. Для этого соответствующую команду нужно поместить в файл ~/.xprofile.

Какие здесь можно сделать выводы? Конфигурирование X-сервера — задача довольно сложная, но ещё сложнее вручную копаться в синтаксисе и формате файла xorg.conf. Поэтому для облегчения и экономии времени по настройке Xorg стоит использовать только утилиту xrandr или подобные ей. Вместе с тем, однако, нужно обязательно разобраться в основах работы конфигурации X-сервера, вручную настроив хотя бы пару компоновок. В дальнейшем это позволит смело и уверенно использовать такие утилиты как xrandr, при этом понимая, что и как они делают и, таким образом, более полно контролировать ситуацию.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: