Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает. |
Графическая подсистема X11
Аутентификация
Было бы странно, если бы X-сервер принимал и выполнял запросы ото всех клиентов подряд. Это, конечно, не так. Однако производить аутентификацию пользователя столь же строго, как это делает UNIX, довольно бессмысленно. Допустим, мы хотим дать доступ к системным ресурсам (в нашем случае к X-серверу ) некоторому пользователю некоторой удаленной системы. На каком основании мы можем этот доступ открывать? Если того, что пользователь уже зарегистрирован в удаленной системе, нам достаточно, нет смысла регистрировать его еще раз в системе с X-сервером. Нужно только предусмотреть механизм разрешения доступа с определенных компьютеров. Этим и занимается утилита xhost, управляющая списком адресов, с которых разрешен доступ к X-серверу.
Если же мы не доверяем каждому пользователю удаленного компьютера, которому тот разрешил запускать X-клиент, значит, мы вообще не доверяем никакой ОС на удаленном компьютере. А вот собственной системе мы доверять должны, так что и обязанность отличать пользователя от пользователя можем спокойно переложить на нее. Авторизованному пользователю сообщается ключ сеанса, с которым его программы должны подступаться к X-серверу, если хотят, чтобы их обслужили. Как пользователь будет передавать это ключ на другие системы, X-сервера не касается. Нужно воспользоваться утилитой xauth, она как раз и манипулирует этими ключами, которых у пользователя может быть более одного.
X11 авторизует не пользователя, а каждое отдельное обращение к серверу с X-запросом. Обращения, использующие один и тот же ключ, принадлежат одному сеансу доступа (см. главу 10). ключ сеанса выдается пользователю, запустившему X-сервер, что подходит для естественной последовательности действий: войти в систему, запустить X-сервер, запустить несколько X-клиентов в рамках одного сеанса.
Однако часто встречается и другая ситуация: X-сервер запущен всегда, а работают с ним разные пользователи по очереди. Для этого при старте запускается специальный X-клиент, который заменяет (или просто вызывает) системную утилиту login: вводит (с графического устройства ввода) входное имя и пароль, отдает системе, та аутентифицирует пользователя и запускает нужные ему X-клиенты. Программа эта ( xdm – X Display Manager – и его аналоги) запускается, конечно, от лица суперпользователя, причем с удаленного компьютера, а не с машины X-сервера. X-сервер можно запустить с указанием опрашивать по специальному протоколу XDMCP некоторый удаленный компьютер на предмет того, не хочет ли его xdm выдать аутентификационное окошко.
Виртуальный сервер
Одно из многих достоинств X-протокола – в том, что X-сервером может служить любая программа, исполняющая X-запросы, а работает ли она на самом деле с каким-нибудь графическим устройством или только притворяется – неважно. Протоколом X11R6 пользуется сервер печати Xprt, который выводит на принтер все X-запросы, или Xvnc – X-сервер, управлять которым по специальному протоколу можно с нескольких машин. С помощью Xvnc можно устраивать показ работы какого-нибудь X-клиента по сети, при этом все пользователи одновременно смогут гонять по экрану один и тот же указатель мыши (что, конечно, можно и запретить).
Виртуальный X-сервер может вообще никаких действий не выполнять, а только передавать X-запросы куда-нибудь дальше, например "настоящему" X-серверу. Так поступает демон Secure Shell (программы терминального доступа, упомянутой нами в лекции 8). Этим свойством sshd можно воспользоваться, если сообщение по X-протоколу между двумя компьютерами невозможно (запрещено межсетевым экраном) или вы считаете такое соединение небезопасным (в некоторых случаях ключ сеанса можно подсмотреть среди передаваемых по сети данных). Демон SSH заводит виртуальный X-сервер на удаленной машине: сервер принимает все запросы с того же компьютера и передает их – в зашифрованном виде – на компьютер, где запущен ssh и невиртуальный X-сервер. Здесь все X-запросы вынимаются из SSH-"водопровода" и передаются местному серверу, как если бы они исходили от местного X-клиента (так оно и есть: этот клиент – ssh ).
XFree86. Модули и расширения
Наиболее распространенная версия реализации X11R6 называется XFree86. Эта графическая подсистема изначально проектировалась как реализация X11R5 для машин архитектуры i386 – самых распространенных на сегодня персональных компьютеров. Главная особенность этой архитектуры – бесчисленное множество устройств графического вывода (так называемых видеокарт) и непрестанное нарушение их разработчиками всех мыслимых стандартов. Поэтому главной задачей создателей XFree86 было организовать гибкую структуру компоновки и настройки X-сервера в соответствии с подвернувшимся под руку устройством графического вывода, а заодно и ввода, потому что клавиатур, мышей и заменяющих их устройств на свете тоже немало. Сегодня XFree86 существует для многих архитектур и многих операционных систем.
Требование гибкости привело к тому, что XFree86 стала совсем уже похожа на ОС. Сам сервер XFree86 играет роль ядра. Запускаясь, сервер подгружает драйверы – специальные компоненты, работающие с выбранной видеокартой, и модули – компоненты, расширяющие функциональные возможности сервера. Драйверы и модули загружаются не все: X-сервер работает с одной видеокартой и может делать только то, о чем его попросили. Есть весьма полезные расширения, вроде Xinput (работа с устройствами ввода), glx (высокоуровневые функции трехмерной графики) или freetype (поддержка шрифтов TrueType), а есть экзотические, которые иногда могут понадобиться, например RECORD, позволяющее записывать, а после – "проигрывать" все происходящие с сервером события.
Расширения называются так еще и потому, что их возможности расширяют сам протокол X11R6. Вместо того чтобы изменять протокол всякий раз, когда в голову придет очередная еще не реализованная в нем возможность, создатели X11 предусмотрели стандартный способ дополнения этого протокола. При этом X-клиент, желающий воспользоваться определенным расширением, всегда может спросить у X-сервера, поддерживается ли оно, и действовать по обстановке.
В X11/ XFree86 появились даже собственные демоны! С одним из них мы уже знакомы – это xdm, занимающийся аутентификацией. Подобно демону, он постоянно находится в памяти, пока пользователь неактивен, и, подобно демону, обладает многими привилегиями по сравнению с пользовательскими процессами. Настоящий демон (притом сетевой) – xfs, сервер шрифтов для X11. Он особенно удобен для X-терминалов и вообще для централизованной настройки шрифтов. Смысл сервера шрифтов в том, чтобы X-сервер брал необходимые ему шрифты не из файлов на собственной машине (они еще и места занимают немало), а по сети, обращаясь к единственному на всю локальную сеть xfs.
Как полагается, в XFree86 есть и утилиты, причем и системные – для настройки самого X-сервера, и пользовательские – для решения мелких, но популярных задач. Пример системной утилиты – xvidtune, с помощью которой можно подобрать наилучший режим работы сервера с имеющимися видеокартой и монитором, или xf86cfg – утилита начальной настройки всей XFree86. Конечно, пользоваться системными утилитами должен только человек, разбирающийся в устройстве XFree86. Многие дистрибутивы UNIX включают в себя собственные полуавтоматические утилиты настройки X11. Эти утилиты имеют процедурную природу, и ими можно создать более или менее подходящий профиль, не вникая в тонкости. Для того чтобы работать с XFree86 как с проективной системой, рекомендуется изучить руководства по X, Xserver, XFree86 и, конечно, по структуре настроечного файла XF86Config.
Пользовательские утилиты либо повторяют функциональность утилит UNIX ( xkill, xman ), либо привязаны к определенным сторонам X-сервера: выдают информацию об окнах ( xwininfo и ей подобные), настраивают сервер ( xset ), показывают шрифты ( xfd и xfontsel ) и т. п. Есть также простейшие программы, типичные для графической среды, вроде xcalc, xedit, xmag и других. Ими вполне можно пользоваться, но стоит иметь в виду, что графическая подсистема в UNIX рассчитана на то, что решения пользовательских задач для нее будет создавать все прогрессивное человечество. Поэтому самые сложные и многофункциональные программы не входят в состав XFree86, это пакеты UNIX.
Как и полагается проективной системе, UNIX включает богатый инструментарий для работы с X11: библиотеки процедур, решающие различные классы задач, специализированные языки программирования, системы разработки. Так что все прогрессивное человечество не обделило X11 вниманием: существует масса программных продуктов, использующих X11R6. Так, в дистрибутиве FreeBSD 5.2.1 их более 600 (при этом официально работающих FreeBSD пакетов под X11 – более 4000), а в дистрибутиве ALT Linux Master 2.2 – более 450 одних только пакетов, использующих X11 напрямую.