Спецкурс по Linux, весна 2007, 11 лекция (от 04 мая)

Материал из eSyr's wiki.

(Различия между версиями)
Перейти к: навигация, поиск
(черновая версия)
м (1 версий)

Версия 14:45, 13 ноября 2007

Предыдущая лекция | Следующая лекция

Авторский вариант:

Остались только плохие темы, например, организация хостинга с апачем. Осталась локализация, но надо тащить программистов. Родилась тема, как устроен X Window. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике


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


Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разьерёмся с первой частью.


Для начала напишам список задач, которые делаются рабочим столом:

  • Эмулятор текстовой консоли --- терминал
  • Несколько рабочих областей на экране --- если раньше мы имели дело с ситеацией один экран – одна раб область, то теперь их несколько. Это требование опасно, ибо надо видеть не все сразу, а тольео т, что хочется, посему:
  • Ограничение контекста
  • Вот мы рещили две задачи --- у нас в разных местах разные программы и ими можно как-то управлять. От ГК: постоянное наличие информационных областей, например, уведомления, часы (даж терминалы это умели)
  • Бвстрый доступ
    • К пограммам, к инструментам
    • К ресурсам
  • “Эстетические” соображения --- должно быть красиво
  • Управление рабочими областями


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


Что же по поводу остального, то там способы рещения могут быть разные. В нашем мире мы ограничены идеями окна, но мы не можем сказать, что ьы разраьотаеим некоторое рещение, и оно всем понрпаится. Например, ГК не лубит иконки и когда на них что-то шевелится.

Паша: А часы?

ГК: А они раз в минуту шевелятся

- А если с секундной стрелкой?

- А если на шкаф влезть?


Х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, который выдаёт терминал, и потом пишете программу, которая одним концом смотрит на PTMx, а другим на х-сервер.
  • Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть z-буффер и возможность превращения в иконку или иметь состояние быть не нарисованным нигде (unmap)
  • Ограничение контекста. Виртуальные экраны. У некоторых их до 20, работает это месяцами и зовут их Никита.
  • Информационные области.
    • Менюшки, иконки. Это такие организаторы быстрого доступа
    • Есть такие щтуки, панели. Это такие полоски, которые всегда на экране и на которых что-то нарисовано. Она рещает задачу информ областей и быстрого запуска


Соверщенно необязательно это одна и та же программа.


Остались две задачи: Если есть окна, то нужен механизм для их управления. Сам х-сервер ничего делать не будет. Вывод: есть окновод, который позволяет управлять окнами. Из консоли окнами упралять неудобно, хотя такие программы есть (wmctrl, xwit). Окновод – это клиент.


Почему панель это не window manager. Задача окновода это управлять окнами, у панели другая задача. Это могут быть вообще разные программы, например, 9wm. а есть монолитные среды.


Интегрированные, однородные среды. Рабочие столы: KDE, Gnome, xfce, rocks. идея в том, чобы под каждую из этих задач предложить своё рещения. Идея грома и кед дополнительно в том, что предлагается единый интерфейс. Плюс единство настроек. Всё настраивается в одном месте (правда жто места до ужаса большое и напоминает одно место), с помощью гуёвой настроечной программы. Ну и всякие мелочи вроде драг-н-дропов... Какую цену мы платим: там одна падаигма на всех виндузообразная, и её не поменяешь. Ещё это начинает жрать безумное количество ресурсов.


Осталось: .xdefaults и .xinitrc


Спецкурс по Linux, весна 2007


01 02 03 04 05 06 07 08 09 10 11 12


Календарь

Февраль
16
Март
02 09 16 23 30
Апрель
06 13 20 27
Май
04 11

18 мая 2007 года прошёл экзамен по курсу. Краткий конспект экзамена.
22 мая 2007 года прошёл экзамен по курсу для студентов 3 курса и тех, кто не сдал экзамен 18 мая. Подробности здесь.
12 июня 2007 года (вторник) пройдёт экзамен по курсу. Информация об экзамене отсюда.


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы