Настройка X-сервера

Структура X-сервера

Архитектура

Графическая подсистема ПСПО базируется на комплекте программных продуктов Xorg. Поверх Xorg запускается несколько приложений, необходимых для организации "рабочего стола". Взаимодействие между всеми программами Xorg описывается протоколом x.11, поэтому эту подсистему принято также называть X11 или, в разговоре, "иксами".

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

X-сервер и X-клиент вполне могут находиться на разных машинах: X-сервер -- на машине пользователя, а X-клиент -- где угодно. Принимать X-запросы от любых машин в сети небезопасно, поэтому это свойство в ПСПО отключено: сервер запускается с ключом -nolisten tcp (задаётся в файле /etc/sysconfig/xserver). На рабочей станции такое подключение смысла всё равно не имеет. Есть исключение: "Линукс Терминал", целиком построенный на том, что пользовательские машины запускают только X-серверы, а вся работа ведётся на центральном компьютере посредством X11.

Интерфейс

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

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

В "Лёгком Линуксе" используется графическая среда XFCE, в состав которой входит диспетчер xfwm, а в "Юниоре", "Мастере" и "Терминале" -- KDE и диспетчер kwin.

Рабочий стол

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

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

Использование Alterator

Запустим Центр Управления системой (он же Alterator)

../acc.png

Сам Alterator -- это некий графический интерфейс к набору утилит, диагностирующих и настраивающих ту или иную часть системы. В частности, пункт "Графический интерфейс -> Дисплей" отвечает за определение параметров видеокарты и монитора, и за внесение изменений в настройки Xorg.

../acc_display.png

Надпись "Монитор 1024х768" -- это не планируемое разрешение, а некий тип монитора по умолчанию. Такой тип который используется, если нет конкретных данных о мониторе, кроме того, что он, очевидно, поддерживает разрешение 1024 на 768 точек. Есть мониторы, о которых такие данные есть; кроме того, такие данные содержатся в т. н. "драйвере монитора", который представляет собою просто текстовый файл. Данные из этого файла можно использовать для ручной настройки Xorg.

Другие настройки достаточно очевидны. "Драйвер" -- это драйвер видеокарты; он определяется автоматически, и изменять это значение стоит только если что-то не работает (в этом случае стоит попробовать стандартный драйвер "vesa"), либо при ывборе между свободной и несвбодной реализацией драйверов AMD/ATI и nVidia. Можно также изменить планируемую глубину цветности (bits per pixel) и разрешение экрана в точках.

Файл xorg.conf

Рассмотрим содержание файла xorg.conf, расположенного в /etc/X11. Он состоит из секций, каждая секция описывает параметры какого-либо устройства, комплектацию или структуру сервера, пользующегося этими устройствами. В секции может встречаться поле "Identifier", на которое могут ссылаться другие секции.


Черновик


ModeLine

Утилита modeline выдаёт информацию о доступных режимах работы монитора.

grep -i modeline /var/log/Xorg.0.log

Как у нас устроена ЭЛТ. У нас идет луч и он рисует пиксели. Как доходит до конца он выключается и перегоняется на начало следующей строки, включается и опять рисует. Когда он доходит до конца всего кадра он в выключенном состоянии перегоняется наверх, и начинает все сначала. Вообще говоря это можно представить так: пусть у нас есть цилиндр, и луч ходит по спирали. Часть этого цилиндра мы не видим, так как экран плоский и потому меньше чем размер цилиндра. Поэтому там луч выключается. А потом это все разворачивается и мы видим наш экран.

(тут, видимо, не помешала бы картинка с тором)

Первый параметр --- dot clock(количество пикселей в секунду которое может отображать монитор), второй параметр --- ширина видимой часть в пикселах, дальше ширина в пикселах плюс одна половинка, вторая половинка и дальше --- ширина всего цилиндра. Аналогично устроена высота. Для более точной информации смотрите man XF86vidmodemodmodeline.

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

../xvidtune.png

Вот здесь есть все те параметры из modeline.

поправить на значения со скриншота

george@gear:~> xvidtune          
Vendor: (null), Model: (null)
Num hsync: 1, Num vsync: 1
hsync range 0:  31.00 -  81.00
vsync range 0:  56.00 -  75.00
"1024x768"     78.80   1024 1040 1136 1312    768  769  772  800 +hsync +vsync

Есть видеокарты и режимы, где оно настраивается. Не настраивается это в vesa и ещё некоторых. vesa просто лезет в видеокарточку и достает оттуда доступные режимы. Он не умеет ничего менять, но знает, что если установить определенные параметры, то оно должно заработать.

Изменить режим работы монитора можно также с помощью команды xrandr:

xrandr -s 832x624

Эта команда изменит разрешение на 832 на 624 точки.

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

../xev.png

Если нажать какую-то клавишу, то результатом будет сообщение вида:

ButtonPress event, serial 31, synthetic NO, window 0x2a00001,
    root 0x59, subw 0x0, time 2034270562, (42,98), root:(465,384),
    state 0x0, button 4, same_screen YES

Если подвигать мышью, то получим:

MotionNotify event, serial 31, synthetic NO, window 0x2a00001,
    root 0x59, subw 0x0, time 2034287126, (140,18), root:(563,304),
    state 0x0, is_hint 0, same_screen YES

Проверить!!!

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

../xbindkey.png


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

31

1

1

1

1

SergeyKorobkov + ПетрНикольский, FrBrGeorge, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex