Изучение рабочего стола

См. также: http://uneex.cs.msu.su/uneex/LecturesLinuxSoft2007/04_StartFromDesktop

Лектор опоздал потому, что ему надо было забрать железяку. Железяка интересная. Те ребята, которые собирали китайские железяки, клеили на них «сделано в России» и продавали туда, где нельзя покупать китайское железо, стали делать тонкие клиенты, но оказалось, что тонкие клиенты не просто больше, чем монитор, нужна ещё прошивка, прошивку сделали какую-то свою на основе Gentoo, и лектору надо было объяснять, что ему прошивка не нужна, нужна только железка, и памяти доставить. В итоге оказалось, что дешевле купить обычный комп.

Про то, что видит человек после того, как загрузился Linux. На прошлой лекции был продемонстрирован диалог новичка и гуру, и из них были вычленены два вопроса решаемых:

Linux отличается от других коммерческих поделок тем, что снабжается большим количеством документации разных уровней, но проблема в том, что сейчас документации столько много, что её уже проблемно запаковывать всю в дистрибутив, ибо это уже информационное пространство. Тем не менее, мы решаем проблемы в порядке поступления, но если нет привычки сначала читать документацию, а потом делать, то возникает проблема — необходимо разобраться в том, что на экране. А на экране не Linux, а графическая оболочка. Лектор так твёрдо утверждает, что это не Linux, потому что это (то, что видит пользователь после загрузки ОС, графическая оболочка) изменчиво, вариабельно, и зависит от того, что установлено. Если же в случае Mac OS с её замечательной Aqua'ой всё приблизительно одинаково, то в случае с Linux, который сам по себе (то есть, ядро) графической оболочки не имеет и которая ставится отдельно и совершенно произвольно, это не так.

Изучение рабочего стола

Состав

Спецсимволами «(x)» могут отмечаться необязательные компоненты рабочего стола. Таки образом, что включает в себя то, что видит пользователь:

Мы описали всё, но, как оказалось, всё это опционально. Из таких кусочков состоит рабочий стол, но он (как можно видеть) может и не состоять. Поэтому от того, что может быть переходим к тому, как это устроено.

X-сервер

Почему графическая среда устроена так гибко? Почему всё необязательно? А что обязательно? Обязательна ровно одна вещь — X-сервер. Много-много лет назад существовала такая ОС, которая называлась The V System. Поскольку она была никакая не свободная, не открытая и была ровно до тех пор, пока ей какая-то контора занималась. Для неё была граф. оболочка W System, она каким-то чудом выжила и перекочевала в МИТ, где продолжила развиваться по уже университетским стандартам и называлась Xwindow System. Эта графоболочка построена по клиент-серверной технологии. Сервер умеет выполнять какие-то графические команды: нарисуй прямоугольник, напечатай то-то. Это не простые команды, а специализированные под взаимодействие с другими программами. Второе свойство Х-сервера --- он опрашивает устройства ввода-вывода --- мышь и клавиатура. То есть, граф. сервер это такой терминал в самом общем понятии, то есть оконная программа, которая взаимодействует с пользователем. Это называется Х-сервер. Существует множество программ Х-клиентов, которые делают ровно то же самое, но со своей клиентской части, то есть посылают команды и обрабатывают данные об устройствах ввода-вывода. Взаимодействие между клиентом и сервером происходит любым способом: через сеть, через файл-дырку...

Где-то в то же время изобреталась оконная система, и понятие окно тесно связано с клиент-сервером. То есть, приложению выделяется место, при попаданию курсором (например) в которое все события будут передаваться ему. Потом выяснилось, что курсор --- неудобно, и появилось понятие фокуса, нам необязательно опираться на положение курсора, мы просто говорим, что есть окно, и оно получает события. Понятно, что это понятие условное, и пикселы возбуждения не испытывают от того, что он в фокусе. Фокус мышкой удобен, когда она рядом, если же она уползает постоянно, то это не очень удобно. Бывают и другие способы. Опять же, вспоминаем другие не столь гибкие оболочки, где всё это прибито гвоздями.

Взаимодействие клиента и сервера строго стандартизированно, и называется x11.

Два варианта подключения по сети:

В переменной окружения DISPLAY указывается адрес х-сервера, по умолчанию :0.0 (формат address:screen:display)

Ранее было сказано, что х-сервер работает с устройствами ввода и видеокартой. Но это неправда. Не смотря на наличие mit magic cookie, протокол ненадёжный, печеньку можно перехватить, завалить оригинал, но думать об этом нужно только в том случае, если вы об этом думаете, вряд ли, если в комнате стоят три компьютера, то вы вряд ли будете оставаться спокойным, если вдруг одна машина умерла, а за другой сидит какой-то волосатый дядька и радостно потирает руки. Поэтому для того, чтобы запустить х-клиенты, надо куда-то залогиниться. А поскольку логин обычно надёжный (secure-shell), то осталось попросить программу, которая его организует, одну вещь --- туннелировать х-протокол. То есть, на удалённой машине просто работает х-сервер, который перенаправляет запросы.

Ещё бывает xprint и х-сервер в окне.

Это самый базовый уровень.

Необязательные элементы. Оконные мэнеджеры

Разумеется, этого недостаточно. Вспомним тот список, который был стёрт, и решим её методом: "одна задача-одна программа". Это вообще идеология unix, не делать комбайнов, которые постоянно разваливаются, а делать несколько отдельных программ, которые хорошо делают свою работу, и потом налаживать взаимодействие между ними.

Первое, что надо решить --- управление окнами. Это решается тривально в плане инжиниринга, и эту задачу решили порядка 3 десятков программистких групп, существует порядка 30 window-manager'ов. Обычно, помимо посылания разных команд приложениям, он рисует ещё и рамочку.

Ещё --- меню. Можно встроить в window-manager, но может быть та же.

Виртуальные рабочие столы. Можно встроить в оконный менеджер, можно запустить специальную прокладку.

Панели. Этим разным панелям могут соответствовать разные программы.

Иконки на рабочем столе.

Никакой метафоры «рабочий стол» нет. Кто обязан представить рабочее пространство в виде рабочего стола? Никто, пока вы не попросите. И программа нарисует ещё несколько окошек, точно таких же. Другое дело, что вы их рассматриваете как иконки.

Оконный менеджер --- программа особая, в частности, он делает то, чего не делают другие программы. Он берёт на себя все события, а потом только отдаёт их другим окнам. Например, фокус.

Таким способом, unix-way, мы сконструировали себе вполне осмысленное рабочее место.

Дополнительно можно добавить различные дополнительные приложения, например, часики, которые рисуют себя где-нибудь поверх всего.

Примеры:

Недостатки

Из-за разрозненности плохо организуется межпроцессное взаимодействие в плане обмена информацией, например, буфер обмена предназначен только для текста. Если надо копировать графику, размеченный текст и т. п., нужно использовать что-нибудь другое.


CategoryLectures CategoryCmc CategoryUneex