Настройка графической подсистемы

Общее конфигурирование графической подсистемы и встроенных средств композиции

Особенности архитектуры
Конфигурация графической подсистемы
Настройка контроллера дисплея
Настройка мультидисплейных конфигураций
Выбор 3D стека и драйверного обеспечения сервиса композиции
Настройка сервиса поддержки драйверов Linux (io-lxdev)
Настройка менеджера композиции (io-composer)
Адресная настройка драйверного обеспечения
Настройка оконного менеджера и модулей ввода
Типичные проблемы

Особенности архитектуры

Графическая подсистема включает следующие ключевые компоненты:

Их взаимодействие упрощенно представлено на схеме:

┌───────────────────────────────────────────┐ │ │ │ Приложение │ │ │ └─────┬───────────────┬───────────────┬─────┘ │ │ │ ┌─────▾─────┐ ┌─────▾─────┐ ┌─────▾─────┐ │ │ │ │ │ │ │ FreeGLUT, ◂───▸ GLVND │ │ libgf ◂──────────┐ │ GLU, GLEW │ │ │ │ libscreen │ │ │ │ │ │ │ │ │ └───────────┘ └─────▴─────┘ └─────▴─────┘ │ │ │ │ ┌─────▾───────────────▾─────┐ ┌──────▾──────┐ ┌────────────┐ │ │ │ │ │ │ │ io-composer ◂───▸ io-display ◂───▸ io-lxdev │ │ │ │ │ │ │ └───────────────────────────┘ └─────────────┘ └────────────┘

Конфигурация графической подсистемы

Настройка графической подсистемы включает в себя несколько этапов:

  1. Выбор и настройка драйвера контроллера дисплея
  2. Настройка мультидисплейных конфигураций
  3. Настройка дополнительных модулей 2D/3D акселерации и выбор соответствующего 3D стека

Рассмотрим эти этапы подробнее.

Настройка контроллера дисплея

Обслуживание драйверного обеспечения контроллеров дисплеев является ответственностью менеджера ресурсов io-display. Выбор конкретного драйвера, и настройка io-display должны осуществляться исходя из фактического оборудования. Менеджер имеет единственный конфигурационный файл /etc/system/config/display.conf.


Caution: При настройке драйверного обеспечения рекомендуется отключить автоматический запуск Photon, поскольку некоторые эксперименты могут привести к зависанию устройства. Уже после определения финальной конфигурации эти изменения можно обратить. Если запуск Photon осуществляется из стандартного скрипта ph, то отключить его автоматическое исполнение можно через файл /etc/system/config/nophoton.

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


Стоит также отметить, что при настройке графической подсистемы рекомендуется по возможности отказаться от использования приложения phgrafx. Являясь частью оконного окружения Photon, это приложение обеспечивает лишь обратную совместимость с предшествующими версиями ЗОСРВ и не поддерживает возможность управления конфигурационными файлами драйверов, выбор и настройку 3D стеков, настройку аппаратной композиции и портированных из Linux драйверов. В общем случае применение phgrafx позволяет выполнять простейшие манипуляции, но в более сложных сценариях это является источником неочевидных проблем в конфигурации графической подсистемы.


Warning: Снятие слепков памяти процесса, использующего некоторые графические драйверы, может приводить к отказу в обслуживании графического контроллера и даже всей системы. При настройке графической подсистемы настоятельно рекомендуется отказаться от использования утилиты dumper.

Выбор драйверного обеспечения осуществляется либо по PCI идентификатором устройства, либо по платформе. Подробности рассмотрены ниже в этом параграфе.

Формат конфигурационного файла и доступные для редактирования параметры детально описаны на соответствующей странице.

В минимальном исполнении следует настроить следующие поля конфигурационного файла:

device {
photon {
driver {
drivername=skylake
modeopts=
}
}
drivername=skylake
vid=0x8086
did=0x1912
deviceindex=0x0
display {
xres=1920
yres=1080
refresh=60
pixel_format=argb8888
}
}

Краткое описание параметров

drivername – определяет имя загружаемого драйвера
Поиск драйверов менеджером io-display осуществляется в директории /lib/dll с добавлением префикса devg-* к имени загружаемой библиотеки. Выбор драйвера контроллера дисплеев может потребовать проведения некоторых несложных изысканий: В секции photon параметр drivername определяет лишь перечень доступных для данного оборудования драйверов (путем дублирования блока driver). Вне этой секции параметр drivername определяет фактически используемый драйвер.

Note: При изменении фактического драйвера через drivername требуется перезапуск менеджера io-display.

vid – определяет PCI-идентификатор производителя оборудования
did – определяет PCI-идентификатор контроллера
deviceindex – определяет PCI-индекс устройства на шине, если таких устройств несколько (по умолчанию должен быть равен 0)
Данная группа параметров позволяет ассоциировать запись в конфигурационном файле с конкретным графическим контроллером. Если контроллер дисплея является устройством на шине PCI, то его идентификаторы можно получить с помощью утилиты pci. В противном случае значения параметров vid и did могут быть произвольными, а запуск io-display принимает вид (при установке в конфигурационном файле обоих параметров в значение 0):
io-display -dvid=0,did=0
xres – определяет разрешение дисплея по оси X
yres – определяет разрешение дисплея по оси Y
refresh – определяет частоту обновления дисплея в Гц
Совокупность этих параметров позволяет графической подсистеме и соответствующему драйверу определить точные параметры modeline устанавливаемого видео-режима. io-display сопоставляет тройку параметров с содержимым файла /etc/system/config/crtc-settings и при первом точном их совпадении использует найденный modeline в качестве параметров видео-режима. Если же запись не найдена, менеджер будет пытаться подобрать настройки и с некоторой вероятностью это приведет к некорректному изображению.

Note: Ряд драйверов мобильных графических контроллеров (например, devg-imx6x.so) игнорируют файл /etc/system/config/crtc-settings при определении modeline. При этом они имеют дублирующие опции для задания таймингов редима в конфигурационном файле драйвера (см. раздел Адресная настройка драйверного обеспечения; для драйвера devg-imx6x.so таким конфигурационным файлом является /etc/system/config/imx6x.conf).


Note: Конфигурационный файл можно /etc/system/config/crtc-settings можно модифицировать. При этом могут быть полезны утилиты ddc, umc и modeline-converter.

Данную тройку параметров также использует Photon для установки конкретного разрешения монитора.
pixel_format – пиксельный формат дисплея
Доступные значения представлены на странице /etc/system/config/display.conf.

После редактирования конфигурационного файла io-display сам менеджер следует перезапустить. Если уже запущены какие-либо графические приложения, включая оконное окружение Photon, их следует терминировать перед io-display. Применение новых параметров произойдет при повторном запуске менеджера.

При этом стоит отметить, что драйвер не всегда в состоянии точно предугадать физический порт контроллера дисплея, который требуется использовать для вывода изображения на экран. Для этого в конфигурационных файлах драйверов (см. раздел Адресная настройка драйверного обеспечения) могут присутствовать конкретные опции. Например, у драйвера devg-skylake.so для этих целей имеются опции 1st, 2nd и 3rd, определяющие физические интерфейсы для вывода максимум трех независимых изображений. Перечень этих параметров и их значения полностью определяет конкретный драйвер и его конфигурационный файл.

Полезные ссылки по теме

Настройка мультидисплейных конфигураций

При настройке мультидисплейных конфигураций требуется ряд дополнительных действий.

В первую очередь следует внести в /etc/system/config/display.conf изменения вида:

device {
photon {
driver {
drivername=skylake
modeopts=
}
}
drivername=skylake
vid=0x8086
did=0x1912
deviceindex=0x0
display {
xres=1920
yres=1080
refresh=60
pixel_format=argb8888
photon {
enabled=1
xoffset=0
yoffset=0
input_group=1
}
}
display {
xres=1920
yres=1080
refresh=60
pixel_format=argb8888
photon {
enabled=1
xoffset=0
yoffset=1080
input_group=1
}
}
}

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

enabled – определяет необходимость включения данного дисплея
По умолчанию значение 1.
xoffset
yoffset
Данные параметры определяют логическю позицию дисплея на рабочем столе.
input_group
Определяет принадлежность группе драйверов ввода-вывода.

Кроме этих настроек ряд драйверов (например, devg-skylake.so) через свои конфигурационные файлы позволяют настраивать режим функционирования мультидисплейной конфигурации:

Выбор портов контроллера дисплеев в этом случае выполняется аналогично вышесказанному (также см. раздел Адресная настройка драйверного обеспечения).

Выбор 3D стека и драйверного обеспечения сервиса композиции

Выбор драйверного обеспечения сервиса композиции

Многие модули графической подсистемы идентифицируют конфигурации сервиса композиции, оконного окружения и модульных драйверов через переменную окружения GRAPHICS_ROOT. Она должна указывать на директорию, содержащую конфигурационные файлы и драйверный набор для конкретной платформы. Обычно целевая директория располагается по адресу /usr/lib/graphics/<platform>.

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

export GRAPHICS_ROOT=/usr/lib/graphics/iMX6X
export LD_LIBRARY_PATH=$GRAPHICS_ROOT:$LD_LIBRARY_PATH

Данные системные переменные должны быть установлены для процесса io-display (при использовании совместно с devg-screen.so), а также для каждого клиента графической подсистемы, включая Photon. Для io-display сложно однозначно указать способ установки переменных, поскольку он может запускаться как из загрузочного образа (тогда переменные нужно устанавливать прямо в файле построения загрузочного образа), так и из загрузочных скриптов /etc/system/sysinit или /etc/rc.d/rc.* (переменные ы этом случае должны устанавливаться в этих же скриптах). Кроме того io-display может быть запущен вручную из консоли. Для клиентских же приложений удачным способом установки переменных является файл profile.

Выбор 3D стека

Данный вопрос включает следующие аспекты:

Поиск и подгрузку конкретной реализации 3D стека обеспечивает загрузчик GLVND. Идентификация библиотек производится также через переменную окружения GRAPHICS_ROOT, рассмотренной выше. В соответствии с содержимым конфигурационного файла $GRAPHICS_ROOT/graphics.conf загрузчик подгружает перечисленные в нем библиотеки и позволяет прикладному коду работать единообразно даже при переключении на другие стеки (для этого требуется перезапуск приложения с переназначенными переменными окружения).

В настоящий момент поддерживаются следующие стеки:

  1. Проект Mesa – открытый стек для устройств различных производителей (также поддерживает программный рендеринг)
  2. Screen/vivante – стек 3D ускорителей Vivante, функционирующий только в композитном режиме


Note: Все стеки представляют собой библиотеки акселерации OpenGL/OpenCL со вспомогающими компонентами. Они размещаются в директориях вида /usr/lib/graphics/<platform>, где <platform> соответствует целевой системе.

Выбор стека следует производить согласно их описанию и перечню поддерживаемых устройств. Если GLVND не может найти стек, соответствующий установленным переменным окружения, то будет произведена попытка загрузить библиотеки проекта Mesa, которые на поддерживаемых платформах размещаются по адресу /usr/lib/graphics/mesa.

Настройка сервиса поддержки драйверов Linux (io-lxdev)

Настройка менеджера композиции (io-composer)

Основные настройки сервиса доступны в конфигурационном файле $GRAPHICS_ROOT/screen.conf. Подробнее см. статью Композитная оконная подсистема и менеджер окон.

Адресная настройка драйверного обеспечения

Многие драйверы (особенно драйверы контроллеров дисплеев) имеют собственные конфигурационные файлы, которые располагаются в директории /etc/system/config/. Общее правило таково, что конфигурационный файл должен называться по имени драйвера, но без префикса. Например, драйверу devg-chips.so соответствует конфигурационный файл /etc/system/config/chips.conf. Однако, ряд драйверов поддерживает несколько принципиально разных семейств контроллеров, что требует наличия нескольких конфигурационных файлов. такая ситуация, например, у драйвера devg-skylake.so. Выяснить точное назначение и имена конфигурационных файлов можно только на странице с описанием драйвера.

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

Конфигурационный файл драйвера определяется через параметр modeopts в /etc/system/config/display.conf:

device {
photon {
driver {
drivername=skylake
modeopts=
}
}
drivername=skylake
modeopts=/etc/system/config/skylake.conf
...
}

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

Настройка оконного менеджера и модулей ввода

Модули ввода для композитного окружения, а также соответствующее оконное окружение могут быть настроены в соответствии с параметрами, перечисленными в $GRAPHICS_ROOT/screen.conf. Настройка оконного менеджера детально описана в разделе Настройка оконной подсистемы.

Типичные проблемы

При запуске Photon/переходе в графический режим система зависает
В подавляющем большинстве случаев зависания не происходит, поскольку система продолжает функционировать и быть доступной по сети. Скорее всего в этом случае речь идет о недонастроенности графической подсистемы. Рассмотрим ряд сценариев, включая действительно связанных с зависанием:
  1. Поведение: При переходе в графику нет изображения, но система доступна по сети.
    Причина: Ряд драйверов не имеют возможности (иногда по аппаратным причинам) гарантированно определить активный порт подключения и полагаются лишь на то, что указано в своем конфигурационном файле, включая порты "по умолчанию". Примером такого драйвера является devg-skylake.so.
    Решение: Обратиться к документации на драйвер → определить по документации конфигурационный файл драйвера → по документации на конфигурационный файл драйвера или по комментариям в нем настроить режим функционирования и порты.

    Note: Для контроллеров дисплеев, производства Intel, может быть полезна утилита intel_detect_config.

  2. Поведение: При переходе в графику наблюдается черный экран с курсором посередине, но курсор не реагирует на перемещение мыши (система доступна по сети).
    Поведение: При переходе в графику запускается Photon, но курсор не реагирует на перемещение мыши (система доступна по сети). Характерной особенностью является то, что часы в панели менеджера shelf продолжают обновляться.
    Причина: В стартовых скриптах Photon сразу за инициализацией графического режима следует инициализация устройств ввода. Появление указателя или обновление часов в панели shelf говорят о том, что в первом приближении графическая подсистема отработала должным образом, но возникли проблемы с устройствами ввода. Иногда такие проблемы проявляются сразу же и препятствуют функционированию скрипта ph – в этом случае не запускаются отдельные сервисы Photon. В других случаях проблемы приводят лишь к неработоспособности собственно ввода.
    Решение: Настроить подсистему ввода.

    Note: В некоторых случаях причиной проблем является драйвер devi-hirun (подробнее см. на странице с его описанием). Если в выводе pidin ar присутствует данный драйвер, то можно попробовать его переименовать/удалить из системы.

  3. Поведение: При переходе в графику нет изображения и система недоступна по сети.
    Причина: Скорее всего произошло зависание при запуске в графику.
    Решение: Точное решение тут предложить сложно. Ряд общих рекомендаций:
    • Отключить менеджер dumper. Если при запуске графической подсистемы ее менеджер или любой из ее клиентских процессов упадет, то dumper попытается сделать слепок процесса, использующего драйвер. Многие драйвера, что указано на страницах с их описанием, с этой процедурой не совместимы – в этом случае система действительно может зависнуть. Отключение dumper позволит это предположение проверить и пронаблюдать падение того или иного процесса. Данное наблюдение является основанием для ображения в техническую поддержку.
    • Проверить не запускается ли драйвер devg-svga.so. Как уже отмечалось, данный драйвер в новых системах может приводить к их зависанию. Релиз ЗОСРВ «Нейтрино» редакции 2020 является последним, в котором этот драйвер присутствует.
    • Если драйвер графического контроллера содержит серьезные ошибки, то они могут приводить к зависанию всей системы. Ориентироваться нужно на падения того или иного процесса или момент, когда происходит зависание. При диагностике рекомендуетсчя предельно упростить конфигурацию системы и отключить максимальное число слубж, сервисов и драйверов. При отсутствии других кандидатов на локализацию проблемы, следует изложить свои наблюдения в запросе в техническую поддержку.
При переходе из графического режима в текстовый происходит зависание
При переходе из в текстовый режим не отображается консоль
Скорее всего не настроен драйвер контроллера дисплеев. Поскольку портов у контроллера в общем случае несколько, то текстовый режим может быть заведен на порту, который не подключен к дисплею. Ряд драйверов настраивают текстовый режим на том, порту, который указан в конфигурационном файле, другие пробуют предугадать ожидания пользователя (и далеко ен всегда успешно). Зависанием это не является и система продолжает быть доступной по сети. Следует обратиться к докумнтации на используемый драйвер и его конфигурационный файл. При наличии настроек, связанных с текстовым режимом, следует их опробовать. Так, например, следует обратить внимание на опцию vga драйвера devg-skylake.so.

Caution: В режиме UEFI возвращение в текстовый режим сейчас не реализовано. Способ имеется, но он связан с написанием собственных скриптов пользовтаеля. Причиной проблемы является то, что собственно текстового режима с честным символьным генератором UEFT загрузчики не предоставляют, включая по умолчанию графический режим и выводя символы попиксельно.

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




Предыдущий раздел: Руководство пользователя