Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
- | [[Спецкурс по Linux, весна 2007, 10 лекция (от 27 апреля)|Предыдущая лекция]] | [[Спецкурс по Linux, весна 2007, 12 лекция (от 11 мая)|Следующая лекция]]
| + | == From Ebaums Inc to MurkLoar. == |
- | | + | We at EbaumsWorld consider you as disgrace of human race. |
- | Остались только плохие темы, например, организация хостинга с апачем. Осталась локализация, но надо тащить программистов. Родилась тема, как устроен X Window. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике.
| + | Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated. |
- | | + | Dig yourself a grave - you will need it. |
- | Надо начать сначала. Была лекция о 4-уровневом представлении информации. Надо сказать, что linux и unix-подобные системы не нуждаются в графической оболочке. В отличие от Windows. Она не работает без графической оболочки. В случае линуха это вполне нормально, с другой стороны, для организации нормального рабочего стола нужна графика.
| + | |
- | | + | |
- | Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разберёмся с первой частью.
| + | |
- | | + | |
- | Для начала напишем список задач, которые делаются рабочим столом:
| + | |
- | | + | |
- | * Эмулятор текстовой консоли — терминал
| + | |
- | * Несколько рабочих областей на экране — если раньше мы имели дело с ситуацией один экран – одна раб область, то теперь их несколько. Это требование опасно, ибо надо видеть не все сразу, а только то, что хочется, посему:
| + | |
- | * Ограничение контекста
| + | |
- | * Вот мы решили две задачи — у нас в разных местах разные программы и ими можно как-то управлять. От ГК: постоянное наличие информационных областей, например, уведомления, часы (даже терминалы это умели)
| + | |
- | * Быстрый доступ
| + | |
- | ** К программам, к инструментам
| + | |
- | ** К ресурсам
| + | |
- | * “Эстетические” соображения — должно быть красиво
| + | |
- | * Управление рабочими областями
| + | |
- | | + | |
- | Только самые конкретные из этих задач могут быть решены так, чтобы всем нравилось, например, эмулятор терминала, хотя даже их несколько штук.
| + | |
- | | + | |
- | Что же по поводу остального, то там способы решения могут быть разные. В нашем мире мы ограничены идеями окна, но мы не можем сказать, что мы разработаем некоторое решение, и оно всем понравится. Например, ГК не любит иконки и когда на них что-то шевелится.
| + | |
- | | + | |
- | <div class="comment">
| + | |
- | : ''Паша'': А часы?
| + | |
- | : ''ГК'': А они раз в минуту шевелятся
| + | |
- | : ''Паша'': А если с секундной стрелкой?
| + | |
- | : ''ГК'': А если на шкаф влезть?
| + | |
- | </div>
| + | |
- | | + | |
- | Х11 — протокол клиент-серверного взаимодействия, где сервер что-то может, а клиент что-то хочет. Сервер — программа умеет рисовать и принимать события от устройств ввода, а клиент — программа, которая хочет рисовать и передаёт команды. Раньше можно было встретить X11R6, последний X11R7. Существует несколько реализаций этого протокола: X.org, Xfree86. Получившиеся реализации в запущенном виде это X Window System. Единственное, чего нет — X Windows, кроме, разве что, расшифровывать X WindowS как X Window System (Паша).
| + | |
- | | + | |
- | Раньше была The System, у ней была The W System, потом её оторвали и назвали The X Sysztem.
| + | |
- | | + | |
- | Очень много в эту систему вложено мозгов, она живёт и развивается до сих пор, особенно с появлением Хорг.
| + | |
- | | + | |
- | Архитектура: взаимодействие между клиентом и сервером. Клиент — наша программа, которая хочет рисовать и обрабатывать события.
| + | |
- | | + | |
- | Программа должна только знать, где находится сервер. Он может находиться на другом компьютере. Программа серверная — программа, которая запускается на компьютере с хорошей графкартой и устройствами ввода, и она обрабатывает команды клиентов и пересылает события.
| + | |
- | | + | |
- | Х сервер довольно универсальная программа, она может работать практически с любым устройством вывода и умеет различать всевозможные виды устройств ввода. Поэтому в его настройках довольно много пунктов.
| + | |
- | | + | |
- | Как клиент узнает, где у него сервер, и как сервер узнаёт, что клиент может управлять им?
| + | |
- | * Существует переменная окружения DISPLAY, которая состоит из трёх частей: адрес:номер_сервера.номер_экрана. Несколько серверов бывают если воткнуты две видеокарты или в другом случае. Несколько дисплеев бывает, если карточка двухголовая.
| + | |
- | * Как сервер узнаёт о том, что клиенту можно подсоединяться? Если бы это была передача данных, то можно было бы вводить пароль. Но при каждом старте программы вводить пароль это бред. Поэтому можно например, вводит пароль и генерить ключ. Осталось забыть про пароль и сказать, что сервер генерирует ключик, а коннектиться к нему могут все программы, которым этот ключик доступен.
| + | |
- | ** xhost — несекьюрный способ — разрешить ходить всем с определённых ip
| + | |
- | ** xauth — геренируется магическая печенька MIT, и теперь на него могут все ходить с печенькой. При запуске сервера говориться xauth, он геренирует ключ, кладёт его в файл, на который смотрят потом клиенты. Если клиент на другой машине, то на сервере ключ экспортируется, а на клиенте импортируется и всё хорошо.
| + | |
- | | + | |
- | == Окно ==
| + | |
- | | + | |
- | Каждый клиент может иметь несколько прямоугольных областей, внутренностями которого он может рулить. Область — понятие не аппаратное, ибо окна могут наслаиваться. Окно — прямоугольник, который зарегистрирован за определённой программой. На окна можно выводить, и содержимое окон можно читать. Второе свойство — если происходит событие, и оно связано с этим окном, то программа получает его себе. Раньше это было так: возили мышкой по экрану, и над каким окном мышь, того и события. Потом придумали фокус, и правила его передачи есть не наша проблема.
| + | |
- | | + | |
- | События: их очень много, и ими заведует xev. События могут быть не только от сервера, но и друг от друга. Есть даже специальная программа xse, которая может посылать события другим окнам.
| + | |
- | | + | |
- | Существуют некие не только события, но и они сами могут говорить Х-серверу, чего они хотят, например, свою геометрию. Существует некоторый специальный список свойств окна, которые можно задавать, например:
| + | |
- | | + | |
- | * Геометрия
| + | |
- | * Позиция
| + | |
- | * Z-ордер
| + | |
- | * Хочет ли окно получать все события (является ли модальным)
| + | |
- | и так далее.
| + | |
- | | + | |
- | Шрифты. Существует два подхода к тому, что собой представляют шрифты. Сначала был разработан подход серверный: приложение шрифтов не несёт, и просто говорит серверу “хочу такой” сервер говорит “нет такого, есть похожий”. Или “хочу шрифт 10 пикселов высотой, моноширинный, ...” сервер говорит: “есть 20 таких, вот тебе первый”. Чем идея хороша? Необязательно хранить шрифты на каждом клиенте. И получится такая забавная штука: в зависимости от того, на каком Х-сервере клиент запущен, программа видит по разному, и там, и там сносно довольно. Эта идея может быть развита дальше: совершенно необязательно шрифты хранить на той же машине, где и Х-сервер. Можно заиметь себе font-server, xfs, который их всем даёт. И тогда получается стройная картина.
| + | |
- | | + | |
- | В чём недостаток: недостаток первый — если вы используете очень дохлую машину, например, если используете LTSP (Linux terminal server Project), то каждый шрифт регистрируется и загружается в память сервера. И если один хочет выводить Хельветикой, другой Курьером (список шрифтов можно увидеть при помощи xfontsel, xlsfonts; в линуксе совершенно спокойно можно иметь 10000 шрифтов, в NT тоже) но если всеми шрифтами вывести хотя бы по одному символу, то память быстро сожрётся. Можно рендерить шрифты на стороне клиента и рисовать их как картинки. Например, xft так работает. Недостаток: при каждом клиенте должен быть свой набор шрифтов.
| + | |
- | | + | |
- | Откуда берутся сервера с номером больше 0:
| + | |
- | * Несколько граф устройств вывода, например, две видеокарты
| + | |
- | * Программы: xprint (вывод на принтер), xnest (программа, которая говорит, что она xserser), xvnc (X virtual network connection)
| + | |
- | * Прокси. Можно установить секьюрное соединение и сказать “большая машина в шкафу, выводи все свои иксовые команды в сервер с номером 10”, но это не х-сервер, а прокси, который перекидывает команды с одной машины на другую. Это почти тоже самое, что указание адреса, но в качестве протокола можно использовать не голую пересылку команд, а ssh. короче, ssh -X
| + | |
- | | + | |
- | если речь идёт об архитектуре Х11, то на этом можно остановиться. Никакого рабочего стола эти возможности не дают.
| + | |
- | | + | |
- | Рабочий стол это не программа, это такие настройки.
| + | |
- | | + | |
- | Попробуем эти задачи решить:
| + | |
- | * как сделать терминал? Достаточно воспользоваться любым PTMX, который выдаёт терминал, и потом пишете программу, которая одним концом смотрит на PTMХ, а другим на х-сервер.
| + | |
- | * Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть z-буффер и возможность превращения в иконку, или иметь состояние быть не нарисованным нигде (unmap)
| + | |
- | * Ограничение контекста. Виртуальные экраны. У некоторых их до 20, работает это месяцами и зовут их Никита.
| + | |
- | * Информационные области.
| + | |
- | ** Менюшки, иконки. Это такие организаторы быстрого доступа.
| + | |
- | ** Есть такие штуки, панели. Это такие полоски, которые всегда на экране и на которых что-то нарисовано. Она решает задачу информ областей и быстрого запуска.
| + | |
- | | + | |
- | Совершенно необязательно это одна и та же программа.
| + | |
- | | + | |
- | Остались две задачи: Если есть окна, то нужен механизм для их управления. Сам х-сервер ничего делать не будет. Вывод: есть окновод, который позволяет управлять окнами. Из консоли окнами управлять неудобно, хотя такие программы есть (wmctrl, xwit). Окновод – это клиент.
| + | |
- | | + | |
- | Почему панель это не window manager. Задача окновода это управлять окнами, у панели другая задача. Это могут быть вообще разные программы, например, 9wm. а есть монолитные среды.
| + | |
- | | + | |
- | Интегрированные, однородные среды. Рабочие столы: KDE, Gnome, xfce, rocks. Идея в том, чтобы под каждую из этих задач предложить своё решение. Идея гнома и кед дополнительно в том, что предлагается единый интерфейс. Плюс единство настроек. Всё настраивается в одном месте (правда это места до ужаса большое и напоминает одно место), с помощью гуёвой настроечной программы. Ну и всякие мелочи вроде драг-н-дропов... Какую цену мы платим: там одна парадигма на всех виндузообразная, и её не поменяешь. Ещё это начинает жрать безумное количество ресурсов.
| + | |
- | | + | |
- | Осталось: .xdefaults и .xinitrc
| + | |
- | | + | |
- | {{Спецкурс по Linux, весна 2007}}
| + | |
- | {{Lection-stub}}
| + | |