Введение в POSIX'ивизм

       

Варианты запуска


Как уже говорилось, Иксы в чистом виде можно загрузить одноименной командой; впрочем, X - это лишь символическая ссылка на имя реального файла X-сервера, XFree86 или Xorg (в зависимости от исполнения), или на т.н. X-wrapper, о котором я скажу потом. Однако мы видели, что ничего доброго из этого не выходит: для использования X-сервера в мирных целях необходим его запуск совместно хотя бы с одной клиентской программой.

Благо, для этого в комплекте Иксов любой реализации существует штатное средство - специальный файл /usr/X11R6/bin/startx. Это обычный сценарий оболочки, описывающий последовательность запуска X-сервера и некоего умолчального X-клиента. А вот каким будет этот X-клиент - от века установлено в файле /usr/X11R6/lib/X11/xinit/xinitrc. По умолчанию этим клиентом является twm - единственный наличный оконный менеджер в комплекте Иксов. Вместе с ним запускается также несколько экземпляров программы xterm, что мы и видим на экране после набора команды startx в строке любой текстовой консоли. Строки, это описывающие, выглядят следующим образом:

# 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

Обращаем внимание на символы амперсанда в конце всех строк, кроме последней: это значит, что twm и остальные клиенты работают в фоновом режиме. Последний же экземпляр xterm выступает в качестве своего рода login shell и является программой активной. Выход из него (например, с помощью exit в его командной строке) знаменует собой окончание данного X-сеанса.

При запуске через скрипт startx фигурирующий в нем файл /usr/X11R6/bin/X по умолчанию является символической ссылкой непосредственно на исполняемый файл X-сервера (XFree86 или Xorg), а последний для запуска от лица обычного пользователя должен иметь бит суидности:

lrwxrwxrwx /usr/X11R6/bin/X@ -> XFree86 -rwsr-xr-x /usr/X11R6/bin/XFree86*

Такое решение считается неудовлетворительным с точки зрения безопасности, и поэтому часто для запуска Иксов используется специальная программа - X-wrapper, вызывающая X-сервер опосредованно.
В этом случае последний в бите суидности не нуждается - он устанавливается только на X-wrapper, и /usr/X11R6/bin/X должен симлинком на него. Именно такой способ используется при автоматическом запуске Иксов, как будет показано ниже.

Нужно заметить, что во многих дистрибутивах Linux майнтанеры модифицирует файл /usr/X11R6/lib/X11/xinit/xinitrc по своему усмотрению. В частности, нередко в ответ на команду startx запускается просто X-сервер с единственным терминальным окном. Это - своего рода безлопастный (safe) режим для Иксов: нормально работать при этом затруднительно (ввиду отсутствия средства управления окнами), но вызвать текстовый редактор и поправить файлы конфигурации - можно вполне.

Я уже говорил, что оконных менеджеров для системы X - преизрядное количество, и большая их часть и функционально, и эстетически далеко превосходят штатный twm. Как обеспечить их запуск по умолчанию вместе со стартом Иксов? Напрашивающееся решение - отредактировать /usr/X11R6/lib/X11/xinit/xinitrc, - не всегда удобно (так как требует прав суперпользователя) и вообще идеологически неправильно. Потому что штатным средством является создание соответствующего пользовательского dot-файла - ~/.xinitrc. В простейшем случае в него достаточно внести строку вроде

exec fluxbox



где вместо fluxbox вписать имя файла, запускающего любимый оконный менеджер или интегрированный десктоп (который,разумеется, сначала должен быть установлен в системе). При желании запускать вместе с ним еще какие-либо приложения (терминальные окна, утилиты мониторинга системы и т.д.), имена их исполняемых файлов можно поместить в ~/.xinitrc отдельными строками - до или после строки, запускающей оконный менеджер. Важно только, чтобы все строки, кроме последней, заканчивались символом амперсанда (обязывающего к фоновому исполнению соответствующей задачи).

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


А чтобы получить впечатление - нужно перепробовать их изрядное количество.

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

Самый простой способ - это вписать все их имена построчно, закрыв символами комментария, в файл ~/.xinitrc. И запускать по очереди, снимая ремарки с интересующего в данный момент. Нужно только учесть, что некоторые из оконных менеджеров не то чтобы требуют предварительного конфигурирования, но настоятельно проявляют такое желание - примером является WindowMaker. При этом происходит перезапись имеющегося файла ~/.xinitrc, в расчете на запуск именно сконфигурированной программы управления окнами (хотя старая копия стартового конфига и сохраняется под другим именем).

Другой способ - это все же отредактировать /usr/X11R6/lib/X11/xinit/xinitrc таким образом, чтобы в качестве умолчального X-клиента запускалось лишь одно терминальное окно:

xterm

А уж из его командной строки запускать подлежащий изучению менеджер окон. При этом возможно, оказывается, запустить несколько X-сессий - каждую со своим менеджером окон, стартующим из командной строки эмулятора терминала.

Для запуска нескольких X-сессий одного и того же X-сервера следует вспомнить о понятии виртуального дисплея. X-сервер, запущенный первым, стартует на нулевом дисплее, который соответствует ближайшей доступной и свободной (то есть неактивизированной процессом типа getty) виртуальной консоли. И попытка дать команду startx (или просто X) повторно - с другого виртуального терминала, - выведет сообщение о том, что дисплей занят (и, соответственно, о невозможности связи с ним X-сервера). Чтобы этого не случилось, номер дисплея (начиная с 1) для второй сессии Иксов (всех последующих) следует задать явно:



startx -- :1

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

startx -- 0:1

но практически для персоналки в обычной конфигурации его можно опустить. Опять-таки теоретически, как говорилось ранее, можно открыть до 231 самостоятельных X-сессий, но практически, думаю, лимит оперативной памяти будет исчерпан много раньше: каждая сессия требует для себя 16 Мбайт суммарной (RAM+swap) памяти, из которых 4 Мбайт приходится на память физическую; и немало памяти отъест еще и оконный менеджер и, особенно, интегрированная среда типа KDE или Gnome.

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

В случае, если основная работа пользователя проходит в графическом режиме, возникает естественное желание - обеспечить его старт при загрузке машины. В Linux это обычно делается очень просто: нужно только открыть файл /etc/inittab, посмотреть в начале его перечень runlevels:

# Runlevels: # 0 Halt # 1(S) Single-user # 2 Not used # 3 Multi-user # 4 Not used # 5 X11 # 6 Reboot

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



id:3:initdefault:

таким образом:

id:5:initdefault:

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

Во FreeBSD и DragonFlyBSD дело обстоит ничуть не сложнее: открывается файл /etc/ttys, в нем отыскивается имеющаяся по умолчанию строка

ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure

и в ней значение off четвертом поле заменяется на on, послед чего выполняется рестарт машины - с тем же результатом, что и в Linux.

В любом случае важно только проследить, чтобы X при этом был ссылкой на программу-враппер, а файл последней имел бы бит суидности:

lrwxr-xr-x /usr/X11R6/bin/X@ -> /usr/X11R6/bin/Xwrapper-4 -r-sr-xr-x /usr/X11R6/bin/Xwrapper-4*

Прервать такую автоматом запущенную X-сессию, то есть перезагрузить X-сервер (например, при изменении его настроек) можно - клавишами Alt+Control+Backspace или штатными средствами запущенного клиента, - но это вызовет лишь возобновление приглашения xdm. Полностью избавиться от графического режима можно только возвратом общесистемных конфигов (/etc/inittab или /etc/ttys) в исходное состояние.

Авторизовавшись в панели xdm, пользователь оказывается в X-сессии, но - не совсем в своем привычном и настроенном (через ~/.xinitrc) окружении. Ибо при автоматическом старте Иксов отработки сценария xinit (и, соответственно, считывания конфигов xinitrc и ~/.xinitrc не производится. оно будет определяться умолчаниями общесистемного xinitrc.Чтобы обеспечить запуск своего любимого оконного менеджера и сопутствующих ему программ (то, что при команде startx загружается из "домашнего" ~/.xinitrc), необходимо иметь файл ~/.xsession. Для начала его можно сделать идентичным ~/.xinitrc, ограничившись строкой с именем оконного менеджера, а дальше - сами разберетесь.

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


Содержание раздела