Редактирование: Спецкурс по Linux, весна 2007, 11 лекция (от 04 мая)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
[[Спецкурс по Linux, весна 2007, 10 лекция (от 27 апреля)|Предыдущая лекция]] | [[Спецкурс по Linux, весна 2007, 12 лекция (от 11 мая)|Следующая лекция]] | [[Спецкурс по Linux, весна 2007, 10 лекция (от 27 апреля)|Предыдущая лекция]] | [[Спецкурс по Linux, весна 2007, 12 лекция (от 11 мая)|Следующая лекция]] | ||
+ | |||
+ | '''Авторский вариант:''' | ||
Остались только плохие темы, например, организация хостинга с апачем. Осталась локализация, но надо тащить программистов. Родилась тема, как устроен X Window. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике. | Остались только плохие темы, например, организация хостинга с апачем. Осталась локализация, но надо тащить программистов. Родилась тема, как устроен X Window. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике. | ||
+ | |||
Надо начать сначала. Была лекция о 4-уровневом представлении информации. Надо сказать, что linux и unix-подобные системы не нуждаются в графической оболочке. В отличие от Windows. Она не работает без графической оболочки. В случае линуха это вполне нормально, с другой стороны, для организации нормального рабочего стола нужна графика. | Надо начать сначала. Была лекция о 4-уровневом представлении информации. Надо сказать, что linux и unix-подобные системы не нуждаются в графической оболочке. В отличие от Windows. Она не работает без графической оболочки. В случае линуха это вполне нормально, с другой стороны, для организации нормального рабочего стола нужна графика. | ||
+ | |||
Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разберёмся с первой частью. | Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разберёмся с первой частью. | ||
+ | |||
Для начала напишем список задач, которые делаются рабочим столом: | Для начала напишем список задач, которые делаются рабочим столом: | ||
- | * Эмулятор текстовой консоли | + | * Эмулятор текстовой консоли --- терминал |
- | * Несколько рабочих областей на экране | + | |
+ | * Несколько рабочих областей на экране --- если раньше мы имели дело с ситуацией один экран – одна раб область, то теперь их несколько. Это требование опасно, ибо надо видеть не все сразу, а только то, что хочется, посему: | ||
+ | |||
* Ограничение контекста | * Ограничение контекста | ||
- | * Вот мы решили две задачи | + | |
+ | * Вот мы решили две задачи --- у нас в разных местах разные программы и ими можно как-то управлять. От ГК: постоянное наличие информационных областей, например, уведомления, часы (даже терминалы это умели) | ||
+ | |||
* Быстрый доступ | * Быстрый доступ | ||
+ | |||
** К программам, к инструментам | ** К программам, к инструментам | ||
+ | |||
** К ресурсам | ** К ресурсам | ||
- | * “Эстетические” соображения | + | |
+ | * “Эстетические” соображения --- должно быть красиво | ||
+ | |||
* Управление рабочими областями | * Управление рабочими областями | ||
+ | |||
Только самые конкретные из этих задач могут быть решены так, чтобы всем нравилось, например, эмулятор терминала, хотя даже их несколько штук. | Только самые конкретные из этих задач могут быть решены так, чтобы всем нравилось, например, эмулятор терминала, хотя даже их несколько штук. | ||
+ | |||
Что же по поводу остального, то там способы решения могут быть разные. В нашем мире мы ограничены идеями окна, но мы не можем сказать, что мы разработаем некоторое решение, и оно всем понравится. Например, ГК не любит иконки и когда на них что-то шевелится. | Что же по поводу остального, то там способы решения могут быть разные. В нашем мире мы ограничены идеями окна, но мы не можем сказать, что мы разработаем некоторое решение, и оно всем понравится. Например, ГК не любит иконки и когда на них что-то шевелится. | ||
- | + | Паша: А часы? | |
- | + | ||
- | + | ГК: А они раз в минуту шевелятся | |
- | + | ||
- | + | - А если с секундной стрелкой? | |
- | + | ||
+ | - А если на шкаф влезть? | ||
+ | |||
+ | |||
+ | Х11 --- протокол клиент-серверного взаимодействия, где сервер что-то может, а клиент что-то хочет. Сервер --- программа умеет рисовать и принимать события от устройств ввода, а клиент --- программа, которая хочет рисовать и передаёт команды. Раньше можно было встретить X11R6, последний X11R7. Существует несколько реализаций этого протокола: X.org, Xfree86. Получившиеся реализации в запущенном виде это X Window System. Единственное, чего нет --- X Windows, кроме, разве что, расшифровывать X WindowS как X Window System (Паша). | ||
- | Х11 — протокол клиент-серверного взаимодействия, где сервер что-то может, а клиент что-то хочет. Сервер — программа умеет рисовать и принимать события от устройств ввода, а клиент — программа, которая хочет рисовать и передаёт команды. Раньше можно было встретить X11R6, последний X11R7. Существует несколько реализаций этого протокола: X.org, Xfree86. Получившиеся реализации в запущенном виде это X Window System. Единственное, чего нет — X Windows, кроме, разве что, расшифровывать X WindowS как X Window System (Паша). | ||
Раньше была The System, у ней была The W System, потом её оторвали и назвали The X Sysztem. | Раньше была The System, у ней была The W System, потом её оторвали и назвали The X Sysztem. | ||
+ | |||
Очень много в эту систему вложено мозгов, она живёт и развивается до сих пор, особенно с появлением Хорг. | Очень много в эту систему вложено мозгов, она живёт и развивается до сих пор, особенно с появлением Хорг. | ||
- | Архитектура: взаимодействие между клиентом и сервером. Клиент — наша программа, которая хочет рисовать и обрабатывать события. | ||
- | Программа должна только знать, где находится сервер. Он может находиться на другом компьютере. Программа серверная | + | Архитектура: взаимодействие между клиентом и сервером. Клиент --- наша программа, которая хочет рисовать и обрабатывать события. |
+ | |||
+ | Программа должна только знать, где находится сервер. Он может находиться на другом компьютере. Программа серверная --- программа, которая запускается на компьютере с хорошей графкартой и устройствами ввода, и она обрабатывает команды клиентов и пересылает события. | ||
+ | |||
Х сервер довольно универсальная программа, она может работать практически с любым устройством вывода и умеет различать всевозможные виды устройств ввода. Поэтому в его настройках довольно много пунктов. | Х сервер довольно универсальная программа, она может работать практически с любым устройством вывода и умеет различать всевозможные виды устройств ввода. Поэтому в его настройках довольно много пунктов. | ||
+ | |||
Как клиент узнает, где у него сервер, и как сервер узнаёт, что клиент может управлять им? | Как клиент узнает, где у него сервер, и как сервер узнаёт, что клиент может управлять им? | ||
+ | |||
* Существует переменная окружения DISPLAY, которая состоит из трёх частей: адрес:номер_сервера.номер_экрана. Несколько серверов бывают если воткнуты две видеокарты или в другом случае. Несколько дисплеев бывает, если карточка двухголовая. | * Существует переменная окружения DISPLAY, которая состоит из трёх частей: адрес:номер_сервера.номер_экрана. Несколько серверов бывают если воткнуты две видеокарты или в другом случае. Несколько дисплеев бывает, если карточка двухголовая. | ||
+ | |||
* Как сервер узнаёт о том, что клиенту можно подсоединяться? Если бы это была передача данных, то можно было бы вводить пароль. Но при каждом старте программы вводить пароль это бред. Поэтому можно например, вводит пароль и генерить ключ. Осталось забыть про пароль и сказать, что сервер генерирует ключик, а коннектиться к нему могут все программы, которым этот ключик доступен. | * Как сервер узнаёт о том, что клиенту можно подсоединяться? Если бы это была передача данных, то можно было бы вводить пароль. Но при каждом старте программы вводить пароль это бред. Поэтому можно например, вводит пароль и генерить ключ. Осталось забыть про пароль и сказать, что сервер генерирует ключик, а коннектиться к нему могут все программы, которым этот ключик доступен. | ||
- | ** xhost | + | |
- | ** xauth | + | ** xhost --- несекьюрный способ --- разрешить ходить всем с определённых ip |
+ | |||
+ | ** xauth --- геренируется магическая печенька MIT, и теперь на него могут все ходить с печенькой. При запуске сервера говориться xauth, он геренирует ключ, кладёт его в файл, на который смотрят потом клиенты. Если клиент на другой машине, то на сервере ключ экспортируется, а на клиенте импортируется и всё хорошо. | ||
+ | |||
== Окно == | == Окно == | ||
- | Каждый клиент может иметь несколько прямоугольных областей, внутренностями которого он может рулить. Область | + | Каждый клиент может иметь несколько прямоугольных областей, внутренностями которого он может рулить. Область --- понятие не аппаратное, ибо окна могут наслаиваться. Окно --- прямоугольник, который зарегистрирован за определённой программой. На окна можно выводить, и содержимое окон можно читать. Второе свойство --- если происходит событие, и оно связано с этим окном, то программа получает его себе. Раньше это было так: возили мышкой по экрану, и над каким окном мышь, того и события. Потом придумали фокус, и правила его передачи есть не наша проблема. |
+ | |||
События: их очень много, и ими заведует xev. События могут быть не только от сервера, но и друг от друга. Есть даже специальная программа xse, которая может посылать события другим окнам. | События: их очень много, и ими заведует xev. События могут быть не только от сервера, но и друг от друга. Есть даже специальная программа xse, которая может посылать события другим окнам. | ||
+ | |||
Существуют некие не только события, но и они сами могут говорить Х-серверу, чего они хотят, например, свою геометрию. Существует некоторый специальный список свойств окна, которые можно задавать, например: | Существуют некие не только события, но и они сами могут говорить Х-серверу, чего они хотят, например, свою геометрию. Существует некоторый специальный список свойств окна, которые можно задавать, например: | ||
* Геометрия | * Геометрия | ||
+ | |||
* Позиция | * Позиция | ||
+ | |||
* Z-ордер | * Z-ордер | ||
+ | |||
* Хочет ли окно получать все события (является ли модальным) | * Хочет ли окно получать все события (является ли модальным) | ||
+ | |||
и так далее. | и так далее. | ||
+ | |||
Шрифты. Существует два подхода к тому, что собой представляют шрифты. Сначала был разработан подход серверный: приложение шрифтов не несёт, и просто говорит серверу “хочу такой” сервер говорит “нет такого, есть похожий”. Или “хочу шрифт 10 пикселов высотой, моноширинный, ...” сервер говорит: “есть 20 таких, вот тебе первый”. Чем идея хороша? Необязательно хранить шрифты на каждом клиенте. И получится такая забавная штука: в зависимости от того, на каком Х-сервере клиент запущен, программа видит по разному, и там, и там сносно довольно. Эта идея может быть развита дальше: совершенно необязательно шрифты хранить на той же машине, где и Х-сервер. Можно заиметь себе font-server, xfs, который их всем даёт. И тогда получается стройная картина. | Шрифты. Существует два подхода к тому, что собой представляют шрифты. Сначала был разработан подход серверный: приложение шрифтов не несёт, и просто говорит серверу “хочу такой” сервер говорит “нет такого, есть похожий”. Или “хочу шрифт 10 пикселов высотой, моноширинный, ...” сервер говорит: “есть 20 таких, вот тебе первый”. Чем идея хороша? Необязательно хранить шрифты на каждом клиенте. И получится такая забавная штука: в зависимости от того, на каком Х-сервере клиент запущен, программа видит по разному, и там, и там сносно довольно. Эта идея может быть развита дальше: совершенно необязательно шрифты хранить на той же машине, где и Х-сервер. Можно заиметь себе font-server, xfs, который их всем даёт. И тогда получается стройная картина. | ||
- | В чём недостаток: недостаток первый | + | |
+ | В чём недостаток: недостаток первый --- если вы используете очень дохлую машину, например, если используете LTSP (Linux terminal server Project), то каждый шрифт регистрируется и загружается в память сервера. И если один хочет выводить Хельветикой, другой Курьером (список шрифтов можно увидеть при помощи xfontsel, xlsfonts; в линуксе совершенно спокойно можно иметь 10000 шрифтов, в NT тоже) но если всеми шрифтами вывести хотя бы по одному символу, то память быстро сожрётся. Можно рендерить шрифты на стороне клиента и рисовать их как картинки. Например, xft так работает. Недостаток: при каждом клиенте должен быть свой набор шрифтов. | ||
+ | |||
Откуда берутся сервера с номером больше 0: | Откуда берутся сервера с номером больше 0: | ||
+ | |||
* Несколько граф устройств вывода, например, две видеокарты | * Несколько граф устройств вывода, например, две видеокарты | ||
+ | |||
* Программы: xprint (вывод на принтер), xnest (программа, которая говорит, что она xserser), xvnc (X virtual network connection) | * Программы: xprint (вывод на принтер), xnest (программа, которая говорит, что она xserser), xvnc (X virtual network connection) | ||
+ | |||
* Прокси. Можно установить секьюрное соединение и сказать “большая машина в шкафу, выводи все свои иксовые команды в сервер с номером 10”, но это не х-сервер, а прокси, который перекидывает команды с одной машины на другую. Это почти тоже самое, что указание адреса, но в качестве протокола можно использовать не голую пересылку команд, а ssh. короче, ssh -X | * Прокси. Можно установить секьюрное соединение и сказать “большая машина в шкафу, выводи все свои иксовые команды в сервер с номером 10”, но это не х-сервер, а прокси, который перекидывает команды с одной машины на другую. Это почти тоже самое, что указание адреса, но в качестве протокола можно использовать не голую пересылку команд, а ssh. короче, ssh -X | ||
+ | |||
если речь идёт об архитектуре Х11, то на этом можно остановиться. Никакого рабочего стола эти возможности не дают. | если речь идёт об архитектуре Х11, то на этом можно остановиться. Никакого рабочего стола эти возможности не дают. | ||
+ | |||
Рабочий стол это не программа, это такие настройки. | Рабочий стол это не программа, это такие настройки. | ||
+ | |||
Попробуем эти задачи решить: | Попробуем эти задачи решить: | ||
+ | |||
* как сделать терминал? Достаточно воспользоваться любым PTMX, который выдаёт терминал, и потом пишете программу, которая одним концом смотрит на PTMХ, а другим на х-сервер. | * как сделать терминал? Достаточно воспользоваться любым PTMX, который выдаёт терминал, и потом пишете программу, которая одним концом смотрит на PTMХ, а другим на х-сервер. | ||
+ | |||
* Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть z-буффер и возможность превращения в иконку, или иметь состояние быть не нарисованным нигде (unmap) | * Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть z-буффер и возможность превращения в иконку, или иметь состояние быть не нарисованным нигде (unmap) | ||
+ | |||
* Ограничение контекста. Виртуальные экраны. У некоторых их до 20, работает это месяцами и зовут их Никита. | * Ограничение контекста. Виртуальные экраны. У некоторых их до 20, работает это месяцами и зовут их Никита. | ||
+ | |||
* Информационные области. | * Информационные области. | ||
+ | |||
** Менюшки, иконки. Это такие организаторы быстрого доступа. | ** Менюшки, иконки. Это такие организаторы быстрого доступа. | ||
+ | |||
** Есть такие штуки, панели. Это такие полоски, которые всегда на экране и на которых что-то нарисовано. Она решает задачу информ областей и быстрого запуска. | ** Есть такие штуки, панели. Это такие полоски, которые всегда на экране и на которых что-то нарисовано. Она решает задачу информ областей и быстрого запуска. | ||
+ | |||
Совершенно необязательно это одна и та же программа. | Совершенно необязательно это одна и та же программа. | ||
+ | |||
Остались две задачи: Если есть окна, то нужен механизм для их управления. Сам х-сервер ничего делать не будет. Вывод: есть окновод, который позволяет управлять окнами. Из консоли окнами управлять неудобно, хотя такие программы есть (wmctrl, xwit). Окновод – это клиент. | Остались две задачи: Если есть окна, то нужен механизм для их управления. Сам х-сервер ничего делать не будет. Вывод: есть окновод, который позволяет управлять окнами. Из консоли окнами управлять неудобно, хотя такие программы есть (wmctrl, xwit). Окновод – это клиент. | ||
+ | |||
Почему панель это не window manager. Задача окновода это управлять окнами, у панели другая задача. Это могут быть вообще разные программы, например, 9wm. а есть монолитные среды. | Почему панель это не window manager. Задача окновода это управлять окнами, у панели другая задача. Это могут быть вообще разные программы, например, 9wm. а есть монолитные среды. | ||
+ | |||
Интегрированные, однородные среды. Рабочие столы: KDE, Gnome, xfce, rocks. Идея в том, чтобы под каждую из этих задач предложить своё решение. Идея гнома и кед дополнительно в том, что предлагается единый интерфейс. Плюс единство настроек. Всё настраивается в одном месте (правда это места до ужаса большое и напоминает одно место), с помощью гуёвой настроечной программы. Ну и всякие мелочи вроде драг-н-дропов... Какую цену мы платим: там одна парадигма на всех виндузообразная, и её не поменяешь. Ещё это начинает жрать безумное количество ресурсов. | Интегрированные, однородные среды. Рабочие столы: KDE, Gnome, xfce, rocks. Идея в том, чтобы под каждую из этих задач предложить своё решение. Идея гнома и кед дополнительно в том, что предлагается единый интерфейс. Плюс единство настроек. Всё настраивается в одном месте (правда это места до ужаса большое и напоминает одно место), с помощью гуёвой настроечной программы. Ну и всякие мелочи вроде драг-н-дропов... Какую цену мы платим: там одна парадигма на всех виндузообразная, и её не поменяешь. Ещё это начинает жрать безумное количество ресурсов. | ||
+ | |||
Осталось: .xdefaults и .xinitrc | Осталось: .xdefaults и .xinitrc |