Чем огранизуется рабочее пространство в XOrg?
Метафора «рабочего стола»
Снова подход от задачи
- Основная идея: несколько информационно независимых областей на экране
- Следствия:
- управление этими областями (группировка, модификация, порождение и т. п.)
- ограничение контекста («несколько» может означать «много»)
- типизация областей (например, выделить постоянно примутствующие в определённом месте экрана для мониторинга и/или уведомлений)
- Представление инструментария ОС и рабочей среды
- Быстрый доступ
- К пограммам (инструментам)
- К ресурсам и рабочим объектам
- Рубрикация длинных инструментальных и объектных списков
- Быстрый доступ
- «Эстетические» соображения (должно быть «красиво»)
- Эмулятор терминала (чтобы не лишаться командной строки)
«Эстетика» — понятие глубоко субъективное; «удобство» (понимаемое как «быстрота+качество») — глубоко динамическое, зависящее от профиля задач.
Следствие: не существует «идеально удобного» рабочего стола, возможен только
- статистический подход (80% пользователей смогут удобно решать 80% своих задач).
- ручной подход (каждый сам строит рабочий стол)
Архитектура X11
X11 — это название протокола: X-клиент обменивается сообщениями с X-сервером. X11R6 — это 6-я версия протокола, в XOrg используется уже 7-я. Общее название таких клиент-серверных комплексов — the X Window System. XOrg — одлна из реализаций X11 (другая, исторически более ранняя, — XFree86).
X-сервер взаимодействует с устройством вывода (видеокартой): исполняет пришедшие от X-клиента запросы вида «нарисовать», «вывести текст» и т. п., а также взаимодействует с устройствами ввода (клавиытура, мышь, ...), посылая X-клиенту события. X-сервер запускается на машине, за кототрой сидит пользователь. X-клиент посылает X-серверу команды и обрабатывает пришедшие события. X-клиент — это ползовательская программа, запускаемая где угодно.
Адрес сервера (DISPLAY): адрес_компьютера:номер_сервера.номер_экрана.
Адрес может быть не только IP, но и DECNet или строчкой «unix» (подключение чере unix domain socket). Пустой адрес — адрес и протокол по умолчанию.
- Номер сервера регстрируется за каждой программой X-сервером. Например, Если две видеокарты. Или если требуется не прекращая сеанса работы пользователя зайти на той же машине в графическую среду под другим пользователем. Или виртуальный сервер (который не рпаботает с видеокартой), например, VNC или sshd.
- Номер экрана — для «многоголовых» видеокарт.
Хранится в переменной окружения DISPLAY или задаётся ключом -display. Обычное значение — :0.0, адрес по умолчанию, нулевой сервер, нулевой экран.
Способы идентификации клиента:
xhost — IP-based, небезопасная: любой пользователь может подключиться с авторизованного компьютера.
xauth — по ключу, который вырабатывается сервером: если клиент и сервер запускаются с одной машины, используется общий файл ~/.Xauthority, если с разных — ключ надо защищённым способом передать. Традиционный ключ MIT-MAGIC-COOKIE-1 считается не вполне стойким.
Окна
Есть ли модели графического интерфейса, не похожие на оконный?
Окно — прямоугольная область, внутри которой выполняются клиентские графические команды. Каждое окно зарегистрировано за каким-нибудь X-клиентом. У клиента может быть сколько угодно окон. Фокус окна — синтетическое свойство окна получать эксклюзивные события (перемещение мыщи, ввод с клавиатуры)
- Фокусом обладает не более одного окна
- Предварительно эти события могут обрабатываться другими X-клиентами
- По умолчанию фокус — у того окна, над которым находится курсор мыши, но X-клиенты могут принудтельно перемещять фокус
Сойства окна (управляются окноводом):
- Геометрия
- Позиция
- Z-ордер
- Хочет ли окно получать все события (является ли модальным)
- ...
Шрифты:
Определяемые сервером (FontPath в настройка X-сервера):
- Клиент приходит с шаблоном (размер, начертание и пр.), сервер подбирает подходящий шрифт сообразно натройке на конкретное устройство (разрешение и пр.)
- xfs: раздача шрифтов по сети всем X-серверам
- растеризация на стороне сервера
Недостаток: каждый используемый шрифт занимает память сервера
Определяемые клиентом (библиотека и утилиты fontconfig)
- занимают память клиента
- растеризация на стороне клиента, шаблоны обрабатываются клиентской библиотекой
- Недостаток: при каждом клиенте должен быть набор шрифтов
Виртуальные X-серверы
X-Сервер с ненулевым номером:
- Второй X-сервер, запущенный на второй видеокарте
- Второй X-сервер, запущенный вторым пользователем, в то время как первый пользователь не работает, но из графической оболочки не вышел
Вывод на другое граф. устройство: xprint (сервер печати по протоколу X11)
- Программная отрисовка: Xnest — «вложенный» X-сервер внутри клиентского окна, XVNC — VNC-сервер, превращающий отрисовку в видеопоток (например, mpeg) для VNC-клиента-смотрелки
- Ретранслятор:
- упаковщики X-протокола, серверы для перодоления МЭ
sshd-X-сервер: обычно localhost:10.0, обращение к которому по защищённому ssh-каналу ретранслируется на пользовательскую машину, где запущен ssh -X. Этот ssh и посылает все X-запросы локальному X-серверу.
Рабочий стол
XOrg — это только инструмент (рубанок, молоток, гвозди), а не сам стол.
Решим с помощью XOrg поставленные задачи:
- Терминал:
поддержка в системе — виртуальные терминалы: программа работает с устройствм /dev/ptmx, а в системе появляетс я новый терминал /dev/pts/номер.
- xterm, aterm, rxvt, konsole, getrm, eterm, Terminal, ...
- Несколько рабочих областей на экране: окна и окновод
- Ограничение контекста: виртуальные экраны и окновод
- Быстрый доступ
- Текстовый — меню
- Графический — иконки
- Мониторинг: панели (также супербыстрый доступ) и т. п
- Рубрикация: поддержка со стороны дстрибутива (с каждым пакетом поставляется меню-файл с адресом ссылка на приложение в дереве меню)
Все задачи могут решаться разными программами: окновод, меню, панели, иконки — всё отдельно.
Запуск всего этого: .xinitrc или .xsession (.xsession.d)
Настройка всего этого .Xdefaults
Однородные среды
Вместо того, чтобы собирать рабочий стол вручную, можно воспользоваться готовым:
- Тяжёлые среды (единая объектная модель, высокоуровневое API, интерфейсная библиотека, много утилит) — KDE, Gnome
Лёгкие среды — (API для расширения возможностей, интерфейсная библиотека, необходимые или простые утилиты): XFCE, ROX, WindowMaker
- Расширенные окноводы с возможностями меню, панелей, иконок и т. п. — почти все
Достоинства:
- Единый интерфейс, документация
- Единые настройки ⇒ gui-программы для настройки, в т. ч. произвольного приложения под эту среду
- Дополнительные возможности (DnD, сообщение и т. п.)
- Быстрое попадание в 80%*80% (вм. выше)
- Большое сообщество: темы, модули и т. п.
Недостатки:
- Большая сложность настройки (особенно без GUI)
- Большая сложность самой среды, непредсказуемое и/или ошибочное поведение
- Жёсткая парадигма (100%-80%=20%)
- Ресурсоёмкость