Операционная система Linux

Как догадался Мефодий, команда startx


Как догадался Мефодий, команда startx делает несколько больше, чем просто запуск X-сервера; она, помимо того, запускает несколько X-приложений. Для удобной работы в X11 пользователю прямо при запуске графической подсистемы потребуется сразу несколько приложений. Во-первых, нужно запустить приложение, которое позволит управлять окнами (как минимум перемещать их), чего не делает сам X-сервер, такие приложения называются диспетчерами окон и будут обсуждаться немного позднее. Кроме того, полезно сразу запустить разные мелкие программки, вроде индикатора загрузки системы xload или экранных часов xclock. Сам X-сервер не мешает настроить с помощью xset (можно поменять курсор, звуковой сигнал, переименовать кнопки мыши). Одним словом, пользователю, как правило, нужен небольшой стартовый сценарий, который запускался бы вместе с X-сервером.

С другой стороны, сервер хорошо бы останавливать, когда он больше не используется. Это, конечно, относится к схеме без диспетчера экрана (xdm): пользователь работает с терминала, потом запускает X-сервер для выполнения графических программ, выполняет их и останавливает сервер, чтобы графическим устройством мог воспользоваться кто-нибудь другой. Стандартный способ аварийного завершения работы XFree86 (Ctrl+Alt+Backspace), во-первых, доступен только на XFree86, во-вторых, его можно отключить, а в-третьих, все запущенные приложения получат в этом случае сообщение о внезапной кончине сервера и тоже завершатся аварийно.

Если запускать не сам X-сервер, а некоторую оболочку вокруг него, называемую startx, то алгоритм работы будет такой. Сначала запустится X-сервер и сформируется значение переменной окружения DISPLAY. Затем запустится сценарий .xinitrc, находящийся в домашнем каталоге пользователя, а если такого нет – системный стартовый сценарий /usr/X11R6/lib/X11/xinit/xinitrc. Предполагается, что X-сервер будет работать до тех пор, пока выполняется .xinitrc. Когда все команды из .xinitrc отработают, его выполнение завершится, а вместе с ним завершится и работа сервера. Поэтому рекомендуется все X-приложения из .xinitrc, кроме последнего, запускать в фоне, чтобы командный интерпретатор не дожидался окончания их работы. В этом случае с завершением работы последнего приложения из .xinitrc завершится и сам X-сервер. Последней программой в стартовом сценарии может быть xterm, как это сделано в стандартном xinitrc, или диспетчер окон. Для завершения xterm (а с ним и всего сеанса работы X11) достаточно послать "^D" запущенному в нем shell, а окновод обычно имеет какую-нибудь кнопочку или менюшку "Exit". Программа, с завершением которой завершается сеанс X11, называется лидером сеанса (session leader).

Лидер сеанса может быть указан и в качестве параметра startx в командной строке, например, по команде startx /usr/X11R6/bin/xterm будет открыт сеанс X11, лидером которого станет xterm – его окно откроется при запуске на экране X-сервера.

Диспетчер экрана организует сеанс работы с X11 сходным образом. Единственное отличие – в том, что ко времени запуска startx вручную пользователь уже имеет настроенное окружение (этим занимается стартовый командный интерпретатор), а после регистрации в диспетчере экрана – нет. Поэтому стартовый сценарий нужно запускать другой – .xsession. На самом деле, и сам X-сервер необходимо перезапускать при использовании xdm. Несмотря на то, что пользователи взаимодействуют только с X-сервером, не используя виртуальные консоли, было бы неудобно и небезопасно сохранять какие бы то ни было настройки, сделанные одним пользователем, ко времени работы другого. Самое неприятное – это так называемый "клавиатурный вор" (keyboard grabber), программа, притворяющаяся окноводом – для того лишь, чтобы запоминать все, что пользователь ввел с клавиатуры (злоумышленников интересуют, как правило, пароли).

Нарушения безопасности легко избежать, если не использовать xhost (авторизацию на основе адреса) и не доверять X-серверу, запущенному не при вас. Можно доверять автоматически запускаемой в сеансе программе xauth, которая связывается с X-сервером и записывает в файл ~/.Xauthority специальный ключ доступа. Все X-приложения пользуются библиотекой libX11, которая обязательно обращается к этому файлу. Таким образом, X-приложение может воспользоваться X-сервером, если оно знает его адрес (указанный в переменной окружения DISPLAY или переданный ключом -display) и авторизовано сервером (по адресу компьютера или по ключу доступа в ~/.Xauthority).


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