Опубликован: 13.05.2011 | Уровень: для всех | Доступ: платный
Лекция 13:

Система X Window

< Лекция 12 || Лекция 13 || Лекция 14 >
Аннотация: Система X Window. Демон X. Запуск X. Скрипт startx . 5-й уровень инициализации.

Ход занятия

1. Давайте для начала окунемся в само понятие X Window (или как его еще называют – X11, X). X11 – это протокол графического интерфейса, основанный на сетевой модели "клиент-сервер".

В качестве сервера может выступать несколько программ, как коммерческих, так и открытых. Долгое время стандартом X-сервера для Linux был XFree86 (о котором мы с вами и поговорим), однако сейчас довольно популярным X-сервером становится XOrg, обладающим намного большими возможностями.

Программы с графическим интерфейсом выступают в качестве клиентов для Х-сервера.

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

Х-сервер может обслуживать несколько клиентов одновременно. Так каждое открытое на вашем экране окно – отдельный Х-клиент.

Однако Х-сервер предоставляет окружению верхнего уровня полную свободу в отношении оформления окон, точнее сказать Х-сервер просто их не прорисовывает. Всем этим управляют особые программы - оконные менеджеры, которых существует бесчисленное множество. Наиболее популярными оконными менеджерами для Linux являются kwm (используется в KDE), metacity (используется в GNOME), twm (стандартный для XFree86), icewm, fluxbox, openbox, fvwm , WindowMaker, Enlightenment и другие. Каждая из этих программ предоставляет различные внешние виды, удобства использования и конфигурации, и каждый из пользователей волен выбирать их на свой вкус.

Основными свойствами оконного менеджера можно считать:

  • возможность изменения размера окна
  • перемещения окон
  • переключение между приложениями
  • сворачивание приложения (в заголовок, значок или на какую-либо панель)

Другой важной возможностью оконного менеджера является управление фокусировкой мыши – каждый из них должен иметь способ выбора активного окна, а также визуально выделить такое окно. Самым популярным является метод "фокус по щелчку". При использовании этого метода фокус получает то окно, по которому был произведен щелчок мыши. Подобный метод используется в Microsoft® Windows®. Его так же поддерживают большинство оконных менеджеров для X.

Другим распространенным методом является "фокус, следующий за мышью". При использовании этого метода, активным считается то окно, над которым находится мышь. При этом, если мышь попадает на пустое место на экране, то фокус теряют все окна.

Еще один из методов называется "нечеткий фокус". Он аналогичен "фокусу, следующему за мышью" за исключением того, что окно потеряет фокус только тогда, когда фокус получит другое окно.

Однако оконными менеджерами не обеспечивается инструментальная база для построения приложений. В Х эта инструментальная база называется "widget". Это непереводимый термин Х, который составлен из двух слов – window (окно) и gadget (приспособление). Виджеты – это кнопки, менюшки, выпадающие списки и т.п. Обычно виджеты собраны в библиотеки. Наиболее часто используемые из них такие:

  • OpenMotif – библиотека, аналог известнейшей библиотеки Motif® на которой построена культовая графическая среда для Unix. Набор виджетов из библиотеки Motif® стал прародителем интерфейса для Microsoft® Windows®.
  • Xlib – базовая библиотека виджетов для Х. Примером приложений для этой библиотеки могут служить приложения xcalc, xterm, xfontsel.
  • GTK/GTK2/GTK+(GIMP ToolKit) – набор библиотек для интерфейса среды окружения рабочего стола GNOME. Эти библиотеки созданы и поддерживаются проектом GNU. Примером приложений, написанных для GTK могут служить Xchat, Gimp и многие другие.
  • Qt(v1, 2, 3, 4) – кроссплатформенная (Linux/FreeBSD/OpenBSD/MacOS/Windows, а также большинство коммерческих версий Unix) графическая библиотека, написанная компанией Trolltech. Сейчас библиотека Qt распространяется на правах GPL. На основе этой библиотеки построена среда окружения рабочего стола KDE, а также множество независимых приложений. Примером приложений на Qt могут служить QtDesigner, kcalc, kate и другие.

    В Linux-системе XWindow обслуживает демон Х (/usr/bin/X11/X). В случае с XFree86 он использует конфигурационный файл /etc/X11/XF86Config.

Формат файла имеет следующий вид:

Section "ServerLayout"
        Identifier     "XFree86 Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
       InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Эта часть конфигурационного файла описывает, дисплей с каким номером должен использовать сервер, а также используемые устройства ввода.

Section "Files"
        RgbPath      "/usr/X11R6/lib/X11/rgb"
        FontPath     "unix/:7100"
EndSection

Здесь описывается путь к набору палитр для вывода информации (RgbPath), а также путь к каталогам со шрифтами (FontPath). Строка "unix/:7100" говорит о том, что запущен сервер шрифтов X (xfs) и он будет доступен по локальному unix-сокету с номером 7100.

Section "Module"
        Load  "GLcore"
        Load  "dbe"
        Load  "dri"
        Load  "extmod"
        Load  "fbdevhw"
        Load  "glx"
        Load  "pex5"
        Load  "record"
        Load  "xie"
        Load  "v4l"
        Load  "type1"
EndSection

В разделе Module описываются расширения, которые будет использовать сервер.

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"
        Option      "Protocol" "Standard"
        Option      "XkbModel" "pc104"
        Option      "XkbRules" "xfree86"
        Option      "XkbLayout" "us,ru(winkeys)"
        Option      "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll"
EndSection
Section "InputDevice"

        Identifier  "DevInputMice"
        Driver      "mouse"
        Option      "Protocol" "IMPS/2"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5"
        Option      "Emulate3Buttons" "no"
EndSection

Секция InputDevice (устройство ввода) описывает клавиатуру, раскладку, а также тип и свойства мыши. Мышь и клавиатуру необходимо описывать в разных секциях.

Section "Monitor"
#1024x768 @ 70.1 Hz, 56.5 kHz hsync
 Identifier   "Monitor"
 VendorName   "SAM"
 ModelName    "Samsung SyncMaster 550(M)s"
 HorizSync    30.0 - 62.0
 VertRefresh  50.0 - 121.0
 ModeLine    "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
 ModeLine     "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync
 ModeLine     "640x480" 31.5 640 680 720 864 480 488 491 521
EndSection

В разделе описания свойств монитора описываются поддерживаемые монитором режимы, а также название монитора и производитель.

Section "Device"
        Identifier  "nVidia Corporation|NV4 [RIVA TNT]"
        Driver      "nvidia"
        BoardName   "RIVA TNT"
        BusID       "PCI:1:0:0"
EndSection

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

Section "Screen"
        Identifier "Screen0"
        Device     "nVidia Corporation|NV4 [RIVA TNT]"
        Monitor    "Monitor"
        DefaultDepth     24
        SubSection "Display"
                Depth     16
                Modes    "1024x768" "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth     24
                Modes    "1024x768" "800x600" "640x480"
        EndSubSection
EndSection

А вот секция Screen как раз описывает выбранный пользователем режим. Сначала указываются используемые видеоадаптер и монитор, а также глубину цветовой палитры (DefaultDepth). При запуске сервер Х будет пытаться инициализировать работу в режимах (Modes), указанных в подсекциях (subsection) Display начиная с наибольшего.

2. Для запуска Х в Linux могут быть использованы два разных метода. Первый из них используется в пятом уровне инициализации – скрипт prefdm (/etc/X11/prefdm). При этом будет использоваться какой-либо менеджер входа в систему (xdm, kdm, gdm или другой), с помощью которого вы сможете выбрать используемую рабочую среду или оконный менеджер. Однако существует и другой способ запуска системы. Если Вы загрузитесь с уровнем инициализации, не использующим графический вход в систему (например 3 или 2), то запустить Х можно будет скриптом startx (/usr/bin/X11/startx). Используемый по умолчанию менеджер окон (или среда окружения рабочего стола) описываются в файле Xclients (/etc/X11/xinit/Xclients). Для установки своего клиента, установите переменную скрипта PREFERRED в значение, которое описывает строку запуска оконного менеджера (среды окружения рабочего стола), например:

PREFERRED=startkde		#запуск KDE

или

PREFERRED=gnome-session		#запуск GNOME

или

PREFERRED=icewm			#запуск оконного менеджера icewm
< Лекция 12 || Лекция 13 || Лекция 14 >
Ярослав Горлов
Ярослав Горлов

Было бы хорошо если бы изучая Ленкцию можно было скачать файлы, используемые для тренировки в терминале. (lesson6_st.txt и т.п.)

Max Akt
Max Akt

Начиная с восьмого урока резко возросла сложность. Почему? Если первые семь уроком у нас было ознакомление с базовыми функциями, а с восьмого начались сценарии, переменные, функции. Как так? Неужели человек, который только начал изучать Linux, будет в курсе того, о чем говорится уже на восьмом уроке?
 

Михаил Байков
Михаил Байков
Россия, Москва, Московский Авиационный Институт, 2009
Александр Арчибасов
Александр Арчибасов
Россия, Магнитогорск, Школа №67, 2012