Редактирование: Спецкурс по 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. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике.
+
'''Авторский вариант:'''
-
Надо начать сначала. Была лекция о 4-уровневом представлении информации. Надо сказать, что linux и unix-подобные системы не нуждаются в графической оболочке. В отличие от Windows. Она не работает без графической оболочки. В случае линуха это вполне нормально, с другой стороны, для организации нормального рабочего стола нужна графика.
+
Остались только плохие темы, например, организация хостинга с апачем. Осталась локализация, но надо тащить программистов. Родилась тема, как устроен X Window. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике
-
Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разберёмся с первой частью.
 
-
Для начала напишем список задач, которые делаются рабочим столом:
+
Надо нгачать сначала. Была лекция о 4-уровневом представлении информации. Надо сказать, что linux и unix-подобные системы не нуждаются в графической оболочке. В отличие от Windows. Она не работает без графической оболочки. В слкчае линуха это вполне нормально, с другой стороны, для организации нармального рабочего стола нужна графика.
 +
 
 +
 
 +
Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разьерёмся с первой частью.
 +
 
 +
 
 +
Для начала напишам список задач, которые делаются рабочим столом:
 +
 
 +
* Эмулятор текстовой консоли --- терминал
 +
 
 +
* Несколько рабочих областей на экране --- если раньше мы имели дело с ситеацией один экран – одна раб область, то теперь их несколько. Это требование опасно, ибо надо видеть не все сразу, а тольео т, что хочется, посему:
-
* Эмулятор текстовой консоли — терминал
 
-
* Несколько рабочих областей на экране — если раньше мы имели дело с ситуацией один экран – одна раб область, то теперь их несколько. Это требование опасно, ибо надо видеть не все сразу, а только то, что хочется, посему:
 
* Ограничение контекста
* Ограничение контекста
-
* Вот мы решили две задачи — у нас в разных местах разные программы и ими можно как-то управлять. От ГК: постоянное наличие информационных областей, например, уведомления, часы (даже терминалы это умели)
+
 
-
* Быстрый доступ
+
* Вот мы рещили две задачи --- у нас в разных местах разные программы и ими можно как-то управлять. От ГК: постоянное наличие информационных областей, например, уведомления, часы (даж терминалы это умели)
-
** К программам, к инструментам
+
 
 +
* Бвстрый доступ
 +
 
 +
** К пограммам, к инструментам
 +
 
** К ресурсам
** К ресурсам
-
* “Эстетические” соображения — должно быть красиво
+
 
 +
* “Эстетические” соображения --- должно быть красиво
 +
 
* Управление рабочими областями
* Управление рабочими областями
-
Только самые конкретные из этих задач могут быть решены так, чтобы всем нравилось, например, эмулятор терминала, хотя даже их несколько штук.
 
-
Что же по поводу остального, то там способы решения могут быть разные. В нашем мире мы ограничены идеями окна, но мы не можем сказать, что мы разработаем некоторое решение, и оно всем понравится. Например, ГК не любит иконки и когда на них что-то шевелится.
+
Только самые конкретные из этих задач могут быть рещшены так, чтобы всем нравилось, например, эмулятор терминала, хотя даже их нексколько штук.
-
<div class="comment">
 
-
: ''Паша'': А часы?
 
-
: ''ГК'': А они раз в минуту шевелятся
 
-
: ''Паша'': А если с секундной стрелкой?
 
-
: ''ГК'': А если на шкаф влезть?
 
-
</div>
 
-
Х11&nbsp;— протокол клиент-серверного взаимодействия, где сервер что-то может, а клиент что-то хочет. Сервер&nbsp;— программа умеет рисовать и принимать события от устройств ввода, а клиент&nbsp;— программа, которая хочет рисовать и передаёт команды. Раньше можно было встретить X11R6, последний X11R7. Существует несколько реализаций этого протокола: X.org, Xfree86. Получившиеся реализации в запущенном виде это X Window System. Единственное, чего нет&nbsp;— X Windows, кроме, разве что, расшифровывать X WindowS как X Window System (Паша).
+
Что же по поводу остального, то там способы рещения могут быть разные. В нашем мире мы ограничены идеями окна, но мы не можем сказать, что ьы разраьотаеим некоторое рещение, и оно всем понрпаится. Например, ГК не лубит иконки и когда на них что-то шевелится.
-
Раньше была The System, у ней была The W System, потом её оторвали и назвали The X Sysztem.
+
Паша: А часы?
-
Очень много в эту систему вложено мозгов, она живёт и развивается до сих пор, особенно с появлением Хорг.
+
ГК: А они раз в минуту шевелятся
-
Архитектура: взаимодействие между клиентом и сервером. Клиент&nbsp;— наша программа, которая хочет рисовать и обрабатывать события.
+
- А если с секундной стрелкой?
-
Программа должна только знать, где находится сервер. Он может находиться на другом компьютере. Программа серверная&nbsp;— программа, которая запускается на компьютере с хорошей графкартой и устройствами ввода, и она обрабатывает команды клиентов и пересылает события.
+
- А если на шкаф влезть?
 +
 
 +
 
 +
Х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, которая состоит из трёх частей: адрес:номер_сервера.номер_экрана. Несколько серверов бывают если воткнуты две видеокарты или в другом случае. Несколько дисплеев бывает, если карточка двухголовая.
* Существует переменная окружения DISPLAY, которая состоит из трёх частей: адрес:номер_сервера.номер_экрана. Несколько серверов бывают если воткнуты две видеокарты или в другом случае. Несколько дисплеев бывает, если карточка двухголовая.
 +
* Как сервер узнаёт о том, что клиенту можно подсоединяться? Если бы это была передача данных, то можно было бы вводить пароль. Но при каждом старте программы вводить пароль это бред. Поэтому можно например, вводит пароль и генерить ключ. Осталось забыть про пароль и сказать, что сервер генерирует ключик, а коннектиться к нему могут все программы, которым этот ключик доступен.
* Как сервер узнаёт о том, что клиенту можно подсоединяться? Если бы это была передача данных, то можно было бы вводить пароль. Но при каждом старте программы вводить пароль это бред. Поэтому можно например, вводит пароль и генерить ключ. Осталось забыть про пароль и сказать, что сервер генерирует ключик, а коннектиться к нему могут все программы, которым этот ключик доступен.
-
** xhost&nbsp;— несекьюрный способ&nbsp;— разрешить ходить всем с определённых ip
+
 
-
** xauth&nbsp;— геренируется магическая печенька MIT, и теперь на него могут все ходить с печенькой. При запуске сервера говориться xauth, он геренирует ключ, кладёт его в файл, на который смотрят потом клиенты. Если клиент на другой машине, то на сервере ключ экспортируется, а на клиенте импортируется и всё хорошо.
+
** xhost --- несекьюрный способ --- разрежить ходить всем с определённых ip
 +
 
 +
** xauth --- геренируется магическая печенька MIT, и теперь на него могут все ходить с печенькой. При запуске сервера говориться xauth, он геренирует ключ, кладёт его в файл,Ю на который смотрят потом клиенты. Если клиент на другой машине, то на сервере ключ экспортируется, а на клиенте импортируется и всё хорошо
 +
 
== Окно ==
== Окно ==
-
Каждый клиент может иметь несколько прямоугольных областей, внутренностями которого он может рулить. Область&nbsp;— понятие не аппаратное, ибо окна могут наслаиваться. Окно&nbsp;— прямоугольник, который зарегистрирован за определённой программой. На окна можно выводить, и содержимое окон можно читать. Второе свойство&nbsp;— если происходит событие, и оно связано с этим окном, то программа получает его себе. Раньше это было так: возили мышкой по экрану, и над каким окном мышь, того и события. Потом придумали фокус, и правила его передачи есть не наша проблема.
+
Каждый клиент может иметь несколько прямоугольных областей, внутрестянноми которого он может рулить. Область --- понятие не аппаратное, ибо окна могут наслаиваться. Окно прямогульник, который зарегистрирован за определённой программой. На окна можно выводить, и содержимое окон можно читать. Второе свойство --- если происходит событие, и оно связано с этим окном, то программа получает его себе. Раньше это было так: возили мышкой по экрану, и над каким окном мышь, того и события. Потом придумали фокус, и правила его передачи есть не наща проблема.
 +
 
События: их очень много, и ими заведует xev. События могут быть не только от сервера, но и друг от друга. Есть даже специальная программа xse, которая может посылать события другим окнам.
События: их очень много, и ими заведует xev. События могут быть не только от сервера, но и друг от друга. Есть даже специальная программа xse, которая может посылать события другим окнам.
 +
Существуют некие не только события, но и они сами могут говорить Х-серверу, чего они хотят, например, свою геометрию. Существует некоторый специальный список свойств окна, которые можно задавать, например:
Существуют некие не только события, но и они сами могут говорить Х-серверу, чего они хотят, например, свою геометрию. Существует некоторый специальный список свойств окна, которые можно задавать, например:
* Геометрия
* Геометрия
 +
* Позиция
* Позиция
 +
* Z-ордер
* Z-ордер
 +
* Хочет ли окно получать все события (является ли модальным)
* Хочет ли окно получать все события (является ли модальным)
 +
и так далее.
и так далее.
-
Шрифты. Существует два подхода к тому, что собой представляют шрифты. Сначала был разработан подход серверный: приложение шрифтов не несёт, и просто говорит серверу “хочу такой” сервер говорит “нет такого, есть похожий”. Или “хочу шрифт 10 пикселов высотой, моноширинный, ...” сервер говорит: “есть 20 таких, вот тебе первый”. Чем идея хороша? Необязательно хранить шрифты на каждом клиенте. И получится такая забавная штука: в зависимости от того, на каком Х-сервере клиент запущен, программа видит по разному, и там, и там сносно довольно. Эта идея может быть развита дальше: совершенно необязательно шрифты хранить на той же машине, где и Х-сервер. Можно заиметь себе font-server, xfs, который их всем даёт. И тогда получается стройная картина.
 
-
В чём недостаток: недостаток первый&nbsp;— если вы используете очень дохлую машину, например, если используете LTSP (Linux terminal server Project), то каждый шрифт регистрируется и загружается в память сервера. И если один хочет выводить Хельветикой, другой Курьером (список шрифтов можно увидеть при помощи xfontsel, xlsfonts; в линуксе совершенно спокойно можно иметь 10000 шрифтов, в NT тоже) но если всеми шрифтами вывести хотя бы по одному символу, то память быстро сожрётся. Можно рендерить шрифты на стороне клиента и рисовать их как картинки. Например, xft так работает. Недостаток: при каждом клиенте должен быть свой набор шрифтов.
+
Шрифты. Существует два подхода к тому, что собой представляют шрифты. Сначала был разработан подход серверный: приложение шрифтов не несёт, и просто говорит серверу “хочу такой”Э сервер говорит “нет такого, есть похожий”. Или “хочу шрифт 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Х, а другим на х-сервер.
+
Попробуем эти задачи рещить:
-
* Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть z-буффер и возможность превращения в иконку, или иметь состояние быть не нарисованным нигде (unmap)
+
 
 +
* как сделать терминал? Достаточно воспользоваться любым PTMX, который выдаёт терминал, и потом пишете программу, которая одним концом смотрит на PTMx, а другим на х-сервер.
 +
 
 +
* Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть 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

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы