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

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

Архитектура

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

Если бы не борьба компании ALT с изобретательными дураками, то можно было бы заставить работать все машины на одной или одной машиной принимать все соединения, но в альте иксы запускаются с -nolisten tcp. Это сделано так, поскольку в большинстве случаев это рабочая станция, к которой лучше ограничить доступ из сети и которой такой функционал не нужен.

Интерфейс

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

То, с чем мы имеем дело сейчас (в дистрибуитиве Lite) --- рабочий стол xfce с диспетчером окон xfwm, в юниоре, терминал сервере и мастере есть рабочий стол kde, диспетчером окон там является kwin (м.б. вставить скриншот?)

Экран

Оставим протокол X11, и вспомним про то, как устроен экран. Тут мы говорим, что виртуальных экранов может быть несколько, есть приятные интерфейсные штуки, которые связаны не с окнами, а с управлением программными продуктами, и так далее. Например управление менюшками, кнопочками. Эти все функции может взять из себя диспетчер окон, а может и не брать. В графических средах типа kde/xfce запускается куча приложений, каждое из которых занимается отдельным делом (например иконки на рабочем столе).

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

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

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

../acc.png

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

../acc_display.png

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

Файл xorg.conf

Рассмотрим содержание файла xorg.conf, расположенного в /etc/X11. Он состоит из секций, каждая отвечает либо за устройство, либо за синтетическое понятие (комплект устройств для общения с пользователем, или наоборот их части)(например, layout), или за некоторые файлы (секция Module --- загружает модули).

Section "ServerLayout"
        Identifier     "Minimal layout"
        Screen         "Screen0" 0 0
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "ImPS/2 Logitech Wheel Mouse|0" "CorePointer"
EndSection

Section "Module"
        Load  "type1"
        Load  "freetype"
        Load  "glx"
        Load  "dri"
        Load  "dbe"
        SubSection "extmod"
                Option      "omit xfree86-dga"
        EndSubSection
EndSection

Section "ServerFlags"
        Option      "AllowMouseOpenFail" "true"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
EndSection

Section "InputDevice"
        Identifier  "ImPS/2 Logitech Wheel Mouse|0"
        Driver      "mouse"
        Option      "Device" "/dev/input/mice"
        Option      "Protocol" "IMPS/2"
        Option      "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
        Identifier   "Monitor 1024x768|0"
        HorizSync    31.5 - 57.0
        VertRefresh  50.0 - 70.0
EndSection

Section "Device"
        Identifier  "Card0|0"
        Driver      "intel"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0|0"
        Monitor    "Monitor 1024x768|0"
        DefaultDepth     16
        SubSection "Display"
                Depth     8
        EndSubSection
        SubSection "Display"
                Depth     15
        EndSubSection
        SubSection "Display"
                Depth     16
        EndSubSection
        SubSection "Display"
                Depth     24
        EndSubSection
        SubSection "Display"
                Depth     32
        EndSubSection
EndSection

xrandr -s 832x624

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

ModeLine

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

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

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

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

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

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

../xvidtune.png

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

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

Существует программа 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

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

Для включения дополнительных трёх кнопок на клавиатуре надо выбрать в настройках клавиатуры (в центре управления системой) "клавиатура acpi", при этом меняется содержимое файла /etc/X11/xinit/Xkbmap. В какой-то момент появился setxkbmap, который повторяет синтаксис xorg.conf, и позволяет каждому пользователю настраивать клавиатуру по-своему.

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

../xbindkey.png


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

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

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

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

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

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

Level

Maintainer

Start date

End date

20

1

1

1

1

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


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex