Было бы хорошо если бы изучая Ленкцию можно было скачать файлы, используемые для тренировки в терминале. (lesson6_st.txt и т.п.) |
Система X Window
Ход занятия
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