Изучение рабочего стола
См. также: http://uneex.cs.msu.su/uneex/LecturesLinuxSoft2007/04_StartFromDesktop
Лектор опоздал потому, что ему надо было забрать железяку. Железяка интересная. Те ребята, которые собирали китайские железяки, клеили на них «сделано в России» и продавали туда, где нельзя покупать китайское железо, стали делать тонкие клиенты, но оказалось, что тонкие клиенты не просто больше, чем монитор, нужна ещё прошивка, прошивку сделали какую-то свою на основе Gentoo, и лектору надо было объяснять, что ему прошивка не нужна, нужна только железка, и памяти доставить. В итоге оказалось, что дешевле купить обычный комп.
Про то, что видит человек после того, как загрузился Linux. На прошлой лекции был продемонстрирован диалог новичка и гуру, и из них были вычленены два вопроса решаемых:
- Консоль
- Добыча информации из дистрибутива
Linux отличается от других коммерческих поделок тем, что снабжается большим количеством документации разных уровней, но проблема в том, что сейчас документации столько много, что её уже проблемно запаковывать всю в дистрибутив, ибо это уже информационное пространство. Тем не менее, мы решаем проблемы в порядке поступления, но если нет привычки сначала читать документацию, а потом делать, то возникает проблема — необходимо разобраться в том, что на экране. А на экране не Linux, а графическая оболочка. Лектор так твёрдо утверждает, что это не Linux, потому что это (то, что видит пользователь после загрузки ОС, графическая оболочка) изменчиво, вариабельно, и зависит от того, что установлено. Если же в случае Mac OS с её замечательной Aqua'ой всё приблизительно одинаково, то в случае с Linux, который сам по себе (то есть, ядро) графической оболочки не имеет и которая ставится отдельно и совершенно произвольно, это не так.
Изучение рабочего стола
Состав
Спецсимволами «(x)» могут отмечаться необязательные компоненты рабочего стола. Таки образом, что включает в себя то, что видит пользователь:
(х) Регистрация в системе. Нормальные UNIX-системы требуют логин и пароль, эта процедура запроса может быть как вполне текстовая, а быть и графическая (xdm/gdm/kdm), а может и вообще не быть (это называется автологин). Например, совершенно бессмысленно спрашивать логин-пароль, если загружаешься с Live CD, ну и для удобства пользования всяких людей, которым не до логина и не до пароля, оно может быть отключено.
- Рабочий стол
(х) Иконки на рабочем столе. Это такая незначащая часть. Иконки на рабочем столе — быстрый доступ к каким-то файлам-каталогам-программам
(х) Панели. Постоянно присутствующая на экране хреновина, выполняющая какие-то функции: часики отображает, кнопка «Пукс» <!-- авторское — eSyr --> («путь к социализму») — метаменю. Панель выполняет функцию визуализационную. Панель быстрого доступа (запуска). Практически то же самое, что и на рабочем столе, но сгруппировано в одном месте. Ящики выдвижные с быстрым запуском. Системный лоток. Список задач запущенных. Довольно удобная штука, которую придумали в Apple — меню приложения.
(х) Виртуальные экраны и панель от них. Что такое виртульаные экраны — дисплей один, а графическая система делает вид, что их несколько, и разные окна могут регистрировать себя на разных экранах
- (х) Постоянное меню
- (х) Меню в окне
- (х) Сводные меню приложений
- (х) Клавиатурные сокращения, работа с раскладкой, и др.
- (х) Оконный декоратор, управление окнами. Приложение не рисует обычно декорацию, оно должно отрабатывать события. Отрисовкой рамки занимается декоратор.
Мы описали всё, но, как оказалось, всё это опционально. Из таких кусочков состоит рабочий стол, но он (как можно видеть) может и не состоять. Поэтому от того, что может быть переходим к тому, как это устроено.
X-сервер
Почему графическая среда устроена так гибко? Почему всё необязательно? А что обязательно? Обязательна ровно одна вещь — X-сервер. Много-много лет назад существовала такая ОС, которая называлась The V System. Поскольку она была никакая не свободная, не открытая и была ровно до тех пор, пока ей какая-то контора занималась. Для неё была граф. оболочка W System, она каким-то чудом выжила и перекочевала в МИТ, где продолжила развиваться по уже университетским стандартам и называлась Xwindow System. Эта графоболочка построена по клиент-серверной технологии. Сервер умеет выполнять какие-то графические команды: нарисуй прямоугольник, напечатай то-то. Это не простые команды, а специализированные под взаимодействие с другими программами. Второе свойство Х-сервера --- он опрашивает устройства ввода-вывода --- мышь и клавиатура. То есть, граф. сервер это такой терминал в самом общем понятии, то есть оконная программа, которая взаимодействует с пользователем. Это называется Х-сервер. Существует множество программ Х-клиентов, которые делают ровно то же самое, но со своей клиентской части, то есть посылают команды и обрабатывают данные об устройствах ввода-вывода. Взаимодействие между клиентом и сервером происходит любым способом: через сеть, через файл-дырку...
Где-то в то же время изобреталась оконная система, и понятие окно тесно связано с клиент-сервером. То есть, приложению выделяется место, при попаданию курсором (например) в которое все события будут передаваться ему. Потом выяснилось, что курсор --- неудобно, и появилось понятие фокуса, нам необязательно опираться на положение курсора, мы просто говорим, что есть окно, и оно получает события. Понятно, что это понятие условное, и пикселы возбуждения не испытывают от того, что он в фокусе. Фокус мышкой удобен, когда она рядом, если же она уползает постоянно, то это не очень удобно. Бывают и другие способы. Опять же, вспоминаем другие не столь гибкие оболочки, где всё это прибито гвоздями.
Взаимодействие клиента и сервера строго стандартизированно, и называется x11.
Два варианта подключения по сети:
- ip-based. Всем клиентам с этого ip можно работать с сервером
- на той машине, где стоит сервер, генерируется mit magic cookie, магическую печеньку имени МИТ, и доступ к ней имеет тот, кто её создал, эту печеньку можно отдать кому-нибудь ещё. И с использованием этой печеньки можно ходить к серверу.
В переменной окружения DISPLAY указывается адрес х-сервера, по умолчанию :0.0 (формат address:screen:display)
Ранее было сказано, что х-сервер работает с устройствами ввода и видеокартой. Но это неправда. Не смотря на наличие mit magic cookie, протокол ненадёжный, печеньку можно перехватить, завалить оригинал, но думать об этом нужно только в том случае, если вы об этом думаете, вряд ли, если в комнате стоят три компьютера, то вы вряд ли будете оставаться спокойным, если вдруг одна машина умерла, а за другой сидит какой-то волосатый дядька и радостно потирает руки. Поэтому для того, чтобы запустить х-клиенты, надо куда-то залогиниться. А поскольку логин обычно надёжный (secure-shell), то осталось попросить программу, которая его организует, одну вещь --- туннелировать х-протокол. То есть, на удалённой машине просто работает х-сервер, который перенаправляет запросы.
Ещё бывает xprint и х-сервер в окне.
Это самый базовый уровень.
Необязательные элементы. Оконные мэнеджеры
Разумеется, этого недостаточно. Вспомним тот список, который был стёрт, и решим её методом: "одна задача-одна программа". Это вообще идеология unix, не делать комбайнов, которые постоянно разваливаются, а делать несколько отдельных программ, которые хорошо делают свою работу, и потом налаживать взаимодействие между ними.
Первое, что надо решить --- управление окнами. Это решается тривально в плане инжиниринга, и эту задачу решили порядка 3 десятков программистких групп, существует порядка 30 window-manager'ов. Обычно, помимо посылания разных команд приложениям, он рисует ещё и рамочку.
Ещё --- меню. Можно встроить в window-manager, но может быть та же.
Виртуальные рабочие столы. Можно встроить в оконный менеджер, можно запустить специальную прокладку.
Панели. Этим разным панелям могут соответствовать разные программы.
Иконки на рабочем столе.
Никакой метафоры «рабочий стол» нет. Кто обязан представить рабочее пространство в виде рабочего стола? Никто, пока вы не попросите. И программа нарисует ещё несколько окошек, точно таких же. Другое дело, что вы их рассматриваете как иконки.
Оконный менеджер --- программа особая, в частности, он делает то, чего не делают другие программы. Он берёт на себя все события, а потом только отдаёт их другим окнам. Например, фокус.
Таким способом, unix-way, мы сконструировали себе вполне осмысленное рабочее место.
Дополнительно можно добавить различные дополнительные приложения, например, часики, которые рисуют себя где-нибудь поверх всего.
Примеры:
- twm --- самая старая
- fvwm
- *box --- самый первый blackbox, fluxbox....
- icewm --- в альтлинух используется как самый лёгкий wm
- ion
- wmii
- 9wm --- оконный менеджер из plan9. Пример wm. Котрый занимается только окнами, меню делает 9menu
- встроенные в desktop enviroment менеджеры --- metacity, kwin
Недостатки
Из-за разрозненности плохо организуется межпроцессное взаимодействие в плане обмена информацией, например, буфер обмена предназначен только для текста. Если надо копировать графику, размеченный текст и т. п., нужно использовать что-нибудь другое.