Редактирование: Спецкурс по 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. Она устроена забавно, и не все с этой забавностью на ты. По крайней мере, это такой пробел, который есть при переходе от консоли к графике | |
- | Разговор идёт об Х11 и как из него сделать рабочий стол. На лектории был сделан упор на десктоп, а здесь же более детально разберёмся с первой частью. | ||
- | Для начала | + | Надо нгачать сначала. Была лекция о 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, которая состоит из трёх частей: адрес:номер_сервера.номер_экрана. Несколько серверов бывают если воткнуты две видеокарты или в другом случае. Несколько дисплеев бывает, если карточка двухголовая. | * Существует переменная окружения 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, который выдаёт терминал, и потом пишете программу, которая одним концом смотрит на | + | Попробуем эти задачи рещить: |
- | * Несколько рабочих областей на экране. Окна. У них даже есть зачатки решения задачи ограничения контекста. Например, есть z-буффер и возможность превращения в иконку | + | |
+ | * как сделать терминал? Достаточно воспользоваться любым 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 |