headermask image

Notice: Undefined variable: t in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15

Notice: Undefined variable: r in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15
Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

LPI 101: X Window System. Настройка менеджера экрана. Часть 2

Менеджеры окон

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

Вы можете подумать, что без задания пользовательского интерфейса фантазия разработчиков приведет к множеству различных стилей окон, которые борются за экранное пространство и все имеют разные сочетания клавиш, действия мыши и стили для кнопок, диалоговых окон и т.д. Для привнесения некоторого порядка в этот хаос были созданы высокоуровневые наборы инструментов. Они породили менеджеры окон типа twm, fvwm, и fvwm2 и в конечном итоге привели к графическим оболочкам KDE и GNOME.

Графические оболочки предоставляют целостную схему поведения пользователя, но также потребляют значительные ресурсы центрального процессора и памяти. До того как компьютеры стали достаточно мощными для работы с KDE или GNOME менеджеры окон были популярны и многие пользователи до сих пор любят их за лёгкость и быстродействие.

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

На самом деле команда startx представляет внешнюю оболочку для xinit запускающей процесс X-сервера и некоторые клиенты. Обычно она располагается в каталоге /usr/X11R6/bin также как xinit и многие другие X утилиты. X приложения могут брать настройки из базы данных ресурсов X также как и из командной строки. Таблица 6 резюмирует имена и назначения каждого файла конфигурации, который используется startx либо xinit. Обратите внимание на то, что некоторые или все эти файлы могут отсутствовать в конкретном системном и домашнем каталоге.

Таблица 6. Файлы конфигурации для startx и xinit Файл Описание

$HOME/.xinitrc Определяемый пользователем скрипт, объединяющий файлы ресурсов и запускающий клиентские приложения.
$HOME/.xserverrc Задаваемый пользователем скрипт, позволяющий переопределить конфигурацию X-сервера по умолчанию.
/usr/X11R6/lib/X11/xinit/xinitrc Системный скрипт, объединяющий файлы ресурсов и запускающий клиентские приложения.
/usr/X11R6/lib/X11/xinit/xserverrc Системный скрипт, предоставляющий возможность переопределить конфигурацию X-сервера по умолчанию.
$HOME/.Xresources Задаваемый пользователем файл ресурсов для X-приложений.
$HOME/.Xmodmap Пользовательский файл, определяющий настройки мыши и клавиатуры.
/usr/X11R6/lib/X11/xinit/.Xresources Системный файл ресурсов X- приложений.
/usr/X11R6/lib/X11/xinit/.Xmodmap Системный файл настроек мыши и клавиатуры.

Обратите внимание на то, что системные файлы xinitrc и xserverrc не имеют точки перед именем, а у всех остальных она есть.

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

В листинге 19 приведён файл xinit поставляемый с XFree86 4.5.0

Листинг 19. Пример файла xinit – /usr/X11R6/lib/X11/xinit/xinitrc

#!/bin/sh
# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f $userresources ]; then
xrdb -merge $userresources
fi
if [ -f $usermodmap ]; then
xmodmap $usermodmap
fi
# start some nice programs
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login

Заметьте, что команда xrdb используется для объединения ресурсов, а xmodmap для обновления определений мыши и клавиатуры. Наконец, несколько программ запускаются в фоновом режиме, а последняя в обычном, с использованием команды exec которая прерывает выполнение текущего скрипта (xinitrc) и передаёт управление окну xterm с геометрией 80×66+0+0. Это окно регистрации в системе, его закрытие приведет к остановке X-сервера. Должно быть только одно такое приложение, хотя некоторые пользователи предпочитают, чтобы эту роль выполнял менеджер окон. Все остальные приложения должны запускаться в фоновом режиме, чтобы скрипт мог завершиться.

Первые два значения в определении геометрии задают размер окна. Для часов размер указан в пикселях, а для окон xterm в количестве строк и столбцов. Следующие два значения (если заданы) определяют расположение окна. Если первое значение – «плюс», то позиция отсчитывается относительно левого края экрана, а если «минус» – относительно правого. Аналогично следующие «плюс» и «минус» обозначают соответственно верх и низ экрана.

Допустим, вы хотите увеличить размер часов, изменить их цвет и поместить их правый нижний угол экрана вместо правого верхнего. Если вы хотите сделать это только для одного пользователя скопируйте приведенный выше файл под именем .xinitrc (не забудьте точку) в домашний каталог пользователя и измените определение часов так, как показано в листинге 20. Названия всех цветов находятся в файле rgb.txt в дереве каталогов вашей установки X (например /usr/X11R6/lib/X11/rgb.txt).

Листинг 20. Изменение параметров запуска xclock в xinitrc

xclock -background mistyrose -geometry 100x100-1-1 &

Если вы желаете изменить настройки по умолчанию для всей системы, вы должны обновить файлы /usr/X11R6/lib/X11/xinit/Xresources и /usr/X11R6/lib/X11/xinit/Xmodmap, а не пользовательские файлы.

Вот несколько средств, которые помогут вам настроить окна и сочетания клавиш.

xrdb
Объединяет ресурсы из файла ресурсов в базу данных ресурсов для работающего X-сервера. По умолчанию программа прогоняет файлы через компилятор C++. Если у вас этого компилятора нет, то укажите параметр -nocpp.
xmodmap
Задаёт настройки клавиатуры и мыши. Например, вы можете перенастроить мышь для левши или задать привычное для вас поведение для клавиш delete и backspace.
xwininfo
Выдаёт вам информацию об окне, включая его геометрию.
editres
Позволяет настраивать ресурсы для окон на вашем экране, просматривать и сохранять изменения в файле, который вы в дальнейшем можете использовать с xrdb.
xev
Запускает окно и перехватывает X-события, которые отображаются в окне эмулятора терминала xterm. Используйте эту возможность при настройке клавиатуры или проверки событий мыши.

За дополнительной информацией по каждой из этих команд обращайтесь к интерактивной документации.

Кроме окон можно настраивать и сам оконный менеджер. Например, меню на рисунке 5 сконфигурировано в файле настройки twm. Этот файл по умолчанию расположен в дереве каталогов установки X (/usr/X11R6/lib/X11/twm/system.twmrc), а каждый пользователь может иметь собственный .twmrc файл. Если у пользователя имеется несколько дисплеев, то могут быть файлы (например .twmrc.0 или .twmrc.1) для каждого номера дисплея. В листинге 21 показана часть файла system.twmrc, определяющего меню, показанное на рисунке 5.

Листинг 21. Настройка меню в twm

menu "defops"
{
"Twm" f.title
"Iconify" f.iconify
"Resize" f.resize
"Move" f.move
"Raise" f.raise
"Lower" f.lower
"" f.nop
"Focus" f.focus
"Unfocus" f.unfocus
"Show Iconmgr" f.showiconmgr
"Hide Iconmgr" f.hideiconmgr
"" f.nop
"Xterm" f.exec "exec xterm &"
"" f.nop
"Kill" f.destroy
"Delete" f.delete
"" f.nop
"Restart" f.restart
"Exit" f.quit
}

За дополнительной информацией по twm или предпочитаемому вами менеджеру окон обращайтесь к интерактивной справке.

Графические оболочки

Если вы используете менеджер экрана или графическую оболочку, вы обнаружите, что это также можно настраивать. Конечно, вы уже видели файл Xsetup_0 для XDM в предыдущем разделе. Настройки графической оболочки, как и только что виденные вами настройки менеджера окон, могут быть общесистемными или пользовательскими.

Настройка GNOME

GNOME конфигурируется, в основном, посредством XML файлов. Системные настройки по умолчанию находятся в /etc например /etc/gconf, /etc/gnome, и /etc/gnome-vfs2..0 вместе с другими каталогами для конкретных GNOME приложений. Пользовательские настройки обычно располагаются в подкаталогах домашнего каталога пользователя, имена которых начинаются с .g. В листинге 22 показаны некоторые из возможных мест расположения конфигурационной информации.

Листинг 22. Расположение настроек GNOME

[ian@lyrebird ian]$ ls -d /etc/g[cn]*
/etc/gconf /etc/gnome /etc/gnome-vfs-2.0 /etc/gnome-vfs-mime-magic
[ian@lyrebird ian]$ find . -maxdepth 1 -type d -name ".g[nc]*"
./.gnome2
./.gconfd
./.gconf
./.gnome
./.gnome2_private
./.gnome-desktop
./.gnome_private

Вместо громоздких страниц интерактивного руководства GNOME имеет online руководство до которого можно добраться командой gnome-help или выбором пункта меню такого как Desktop > Help. В момент написания этого материала руководство имело три основных раздела: Desktop (Рабочий стол), Applications (Приложения) и Other Documentation (Другая документация). Содержание раздела Desktop показано на рисунке 7.

Рисунок 7. Информация об окнах и настройках
fig7.gif

Информацию по средствам конфигурирования вы найдёте в подразделе System Administration Guide (Руководство по системному администрированию) раздела Desktop, а также в Configuration Editor Manual (руководство по редактору настроек) в теме приложений раздела Desktop.

Вы можете запустить графический редактор конфигурации командой gconf-editor или выбором пункта Configuration Editor в меню Applications > System Tools. Конфигурация gnome-терминала показана на рисунке 8.

Рисунок 8. Информация об окнах и настройках
fig8.gif

Кроме графических средств существует также программа командной строки gconftool-2 для получения и обновления настроек GNOME. За подробностями обращайтесь к упомянутому выше System Administration Guide.

Настройка KDE

KDE настраивается посредством простых текстовых файлов, использующих UTF-8 для представления символов не входящих в ASCII. Как и в GNOME можеть быть множество различных конфигурационных файлов. Если в дереве конфигурации присутствуют несколько файлов с одинаковыми именами информация из них объединяется.

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

Листинг 23. Файл конфигурации KDE для броузера konqueror

[HTML Settings]
[Java/JavaScript Settings]
ECMADomainSettings=localhost::Accept
JavaPath=/usr/lib/java2/jre/bin/java
EnableJava=true
EnableJavaScript=true
[EmbedSettings]
embed-text=true
embed-audio=false
embed-video=false
[Reusing]
MaxPreloadCount=1
PreloadOnStartup=true

Конфигурационные файлы можно редактировать вручную. Большинство систем включают графические средства редактирования, такие как KConfigEditor или настроенные под конкретный дистрибутив как SUSE Control Center.

Различные виртуальные терминалы

Обычный эмулятор терминала xterm, устанавливаемый с графическими оболочками, обладает хорошими функциональными возможностями, но также потребляет значительные системные ресурсы. Если вы работаете с множеством клиентов X терминала, функционирующего на одном процессоре, вы можете захотеть использовать более легковесный терминал. Два примера rxvt и aterm (созданный как надстройка над rxvt). Это эмуляторы VT102 обычно не устанавливаются по умолчанию, так что вам придется установить их.

Необходимые библиотеки

К этому моменту вы можете себе представить, что для X-приложений существует множество библиотек и наборов инструментов. Как же убедиться что, вы используете правильные библиотеки? Команда ldd выводит список зависимостей для любого приложения. В простейшей форме, она получает название программы и печатает список необходимых библиотек. Заметьте, ldd не просматривает автоматически переменную окружения PATH, так что обычно вам придётся кроме имени программы задавать относительный или абсолютный путь (за исключение случая, когда программа находится в текущем каталоге). В листинге 24 показаны зависимости для трёх эмуляторов терминала, обсуждавшихся ранее. Количество зависимостей для каждого, даёт вам общее представление об их системных требованиях.

Листинг 24. Библиотечные зависимости для xterm, aterm, и rxvt

root@pinguino:~# ldd `which xterm`
linux-gate.so.1 => (0xffffe000)
libXft.so.2 => /usr/X11R6/lib/libXft.so.2 (0xb7fab000)
libfontconfig.so.1 => /usr/X11R6/lib/libfontconfig.so.1 (0xb7f88000)
libfreetype.so.6 => /usr/X11R6/lib/libfreetype.so.6 (0xb7f22000)
libexpat.so.0 => /usr/X11R6/lib/libexpat.so.0 (0xb7f06000)
libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0xb7eff000)
libXaw.so.7 => /usr/X11R6/lib/libXaw.so.7 (0xb7ead000)
libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0xb7e99000)
libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0xb7e4f000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0xb7e46000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0xb7e30000)
libXpm.so.4 => /usr/X11R6/lib/libXpm.so.4 (0xb7e22000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0xb7e15000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb7d56000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7d15000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7be6000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7be3000)
/lib/ld-linux.so.2 (0xb7fc3000)
root@pinguino:~# ldd `which aterm`
linux-gate.so.1 => (0xffffe000)
libXpm.so.4 => /usr/X11R6/lib/libXpm.so.4 (0xb7f81000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb7ec1000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0xb7eb9000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0xb7ea3000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d75000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d72000)
/lib/ld-linux.so.2 (0x80000000)
root@pinguino:~# ldd `which rxvt`
linux-gate.so.1 => (0xffffe000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb7eb0000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d81000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d7e000)
/lib/ld-linux.so.2 (0x80000000)

Экспорт дисплея

X дисплей определяется по имени в форме имя_хоста:номер_дисплея.номер_экрана. Для Linux, работающей на рабочей станции типа ПК обычно имеется только единственный дисплей с одним экраном. В этом случае имя_экрана может быть опущено (обычно так и делается) и имя дисплея принимает вид :0.0. Переменная окружения DISPLAY обычно хранит имя экрана, поэтому его можно посмотреть командой echo $DISPLAY. В зависимости от вашей системы эта переменная может быть, а может не быть установлена при переключении пользователя командой su -. В таком случае вам необходимо задать и экспортировать переменную DISPLAY как показано в листинге 25. В этом листинге вы видите попытку запуска приложения xclock после переключения пользователя на root. Попытка заканчивается неудачей, поскольку переменная DISPLAY не задана. Даже если эта переменная установлена, вы не можете использовать экран без авторизации.

Листинг 25. Попытка запуска xclock

ian@lyrebird:~> whoami
ian
ian@lyrebird:~> echo $DISPLAY
:0.0
ian@lyrebird:~> su -
Password:
lyrebird:~ # echo $DISPLAY
lyrebird:~ # xclock
Error: Can't open display:
lyrebird:~ # export DISPLAY=:0.0
lyrebird:~ # echo $DISPLAY
:0.0
lyrebird:~ # xclock
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Error: Can't open display: :0.0
lyrebird:~ # export XAUTHORITY=~ian/.Xauthority
lyrebird:~ # xclock
lyrebird:~ # ls -l ~ian/.Xauthority
-rw------- 1 ian users 206 Feb 18 16:20 /home/ian/.Xauthority

Давайте посмотрим на происходящее здесь. Пользователь ian зарегистрироан в системе и переменная DISPLAY установлена в :0.0 как ожидалось. Когда ian переключился на root, переменная DISPLAY не была установлена и попытка запуска xclock не увенчалась успехом, поскольку приложение не знало о том, какой дисплей необходимо использовать.

Пользователь root устанавливает переменную DISPLAY и экспортирует её, чтобы она была доступна для других оболочек, которые могут быть запущены из этого окна терминала. Заметьте, что для установки и экспорта переменной окружения не указывается символ $ как при отображении или других вариантах её использования. Обратите внимание так же на то, что выполнение команды su без знака минус приведёт к установке значения переменной DISPLAY таким, каким оно было для пользователя ian. Тем не менее, даже при заданном значении переменной DISPLAY запуск xclock не удаётся.

Причина второй неудачи кроется в клиент/серверной природе Х. Хотя пользователь root работает в окне одного (и единственного!) дисплея системы, дисплей фактически находится в распоряжении пользователя, который изначально зарегистрировался в системе, в нашем случае это ian. Давайте обратимся к процедуре авторизации Х.

Методы авторизации

Для локального дисплея авторизация в Linux обычно основана на MIT-MAGIC-COOKIE-1, которая обычно обновляется при перезапуске X-сервера. Пользователь может извлечь «магическое» cookie из файла .Xauthority в его домашнем каталоге (используя команду xauth extract) и передать это значение другому пользователя для включения в файл .Xauthority текущего пользователя командой xauth merge. Альтернативным способом предоставления пользователям полномочий на доступ к локальной системе является команда xhost +local:.

XAUTHORITY

Ещё одной альтернативой является задание переменной окружения XAUTHORITY на файл, содержащий необходимое значение MIT-MAGIC-COOKIE-1. При переключении на root это просто сделать, поскольку root имеет возможность читать файлы других пользователей, что и было сделано нами в листинге 25. Таким образом, после установки и экспорта переменной XAUTHORITY на ~ian/.Xauthority, root может открывать графические окна на рабочем столе. Ранее мы отмечали отличие систем Red Hat. Команда su в Red Hat немного отличается от SUSE систем, в которых установка экрана производится автоматически.

А что делать, если переключаемся на пользователя отличного от root? Из листинга 25 вы заметили, что файл .Xauthority пользователя ian позволяет доступ только для него. Даже члены группы не могут его прочесть. Это то, что надо, если только вы не хотите, чтобы кто-то выполнил приложение на вашем экране и лишил вас возможности что-либо делать. Так что если вы извлекли MIT-MAGIC- COOKIE-1 из .Xauthority, вам необходимо отыскать безопасный способ его передачи другому пользователю. Другой подход состоит в использовании команды xhost для предоставления полномочий любому пользователю конкретного хоста.

Команда xhost

В связи с трудностями безопасной передачи значения MIT-MAGIC-COOKIE-1 другому пользователю в Linux системах с одним пользователем использовать xhost проще несмотря на то, что в общем случае xauth предпочтительнее. Не забывайте сетевое наследие X Window System и не предоставьте случайно больше полномочий, чем хотите и не откройте таким образом вашу систему для случайных сетевых пользователей.

Для предоставления полномочий работы с приложениями на дисплее (:0.0) пользователь ian может использовать команду xhost. Для этого откройте окно эмулятора терминала и введите команду:

xhost +local:

Обратите внимание на завершающее двоеточие. Оно позволяет другим пользователям системы подключаться к X-серверу и открывать окна. Для однопользовательской системы это означает, что вы можете переключаться на любого не root пользователя и запустить теперь xclock или другое X приложение.

Вы можете использовать xhost для авторизации удаленных хостов. Обычно это плохая идея, за исключением ограниченных сетей. Если вы используете эту возможность вам потребуется открыть соответствующие порты в межсетевом экране (если вы его используете).

Другой возможностью использования X приложений с другой системы является подключение через secure secure shell (ssh) (безопасная оболочка). Если по умолчанию ваш ssh клиент не поддерживает X, то может потребоваться параметр -X для команды ssh. На сервере ssh также должна быть включена поддержка X. В общем случае это более безопасный способ удаленной работы с X чем использование xhost.

Для получения подробной информации об использовании команд xauth и xhost, можете воспользоваться командами info xauth, man xauth, info xhost или man xhost. Если вас заинтересовал вопрос о безопасности X соединений начните с изучения документации по Xsecure.

Источник: ibm developerworks