- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF141:Wayland
Материал из Linuxformat.
- Wayland Первое знакомство
Содержание |
Прорыв в графике
Александр Толстой познакомит вас с новейшим графическим сервером, который, похоже, может вскоре прийти на смену набившим оскомину «иксам».
Время от времени человечество совершает открытия, которые резко подстёгивают прогресс и попадают затем в школьные учебники. Это может быть изобретением лампы накаливания, первым полётом в космос или своевременной доставкой вашего любимого журнала через Почту России... Прямо сейчас мир Linux затаив дыхание смотрит на новейшую технологию, известную как Wayland. Что это такое, и почему вокруг этой технологии так много шума? Давайте посмотрим поближе.
Wayland – новый графический сервер, позиционируемый как замена традиционному X11. Не следует недооценивать эту заявку: в мире свободных UNIX-подобных ОС это первый случай за последние 24 года, когда предложена альтернатива X Window System. Как известно, система X11 появилась в 1987 году как 11‑я версия проекта «Х», развиваемого в стенах MIT. Сам проект дисплейного сервера стартовал ещё в 1984. Завершая наше историческое вступление, отметим, что X-сервер был портирован на Linux летом 1992 года благодаря усилиям хакеров из проекта Xfree86. С этого момента Linux перестал выглядеть как чёрная консоль, и возникло понятие «рабочего пространства». Все наши графические приложения, от браузера до эффектов Compiz, возможны только благодаря X-серверу, на котором зиждется вся графика в Linux.
Но вот наконец подул ветер перемен, и на место X11 стал претендовать Wayland. Это новый дисплейный сервер, написанный с нуля и обладающий более рациональной и современной архитектурой. Из этой статьи вы узнаете о преимуществах Wayland, выясните, как он устроен, и научитесь его запускать. Естественно, мы обязательно расскажем о том, как установить на свой боевой сервер последнюю нестабильную версию Wayland и полностью доверить ему управление графикой... Почему бы и нет – ведь к концу этого года Ubuntu и Fedora интегрируют Wayland в свои свежие релизы, так что следите за новостями!
Чем Wayland лучше?
Классическая архитектура X Window подразумевает, что ваши монитор, клавиатура и мышь управляются Сервером, а все приложения являются Клиентом. Приложения общаются с Сервером, запрашивая у него отрисовку окна, обработку ввода с клавиатуры и движений мыши, 3D-рендеринг и т. д. Современный рабочи стол Linux содержит «под капотом» целую стопку слоёв отрисовки и обработки прозрачности, и всё это водружено на запущенный X-сервер. Обратите внимание, что ядро Linux тут выполняет второстепенную роль.
Как раз это и делает Wayland непохожим на своего предшественника. В Wayland большинство «грязной» работы достаётся ядру: разрешение экрана регулируется режимом KMS (Kernel Modesetting), а события от клавиатуры и мыши управляются через evdev. Сам Wayland запускается поверх экранного режима KMS и обслуживает исключительно окна, отвечая за их отрисовку и перерисовку, перетаскивание объектов мышью, функции оконного декоратора-менеджера, взаимодействие окон. Примечательно, что содержимое каждого окна выводится на экран без участия дисплейного сервера, то есть напрямую через OpenGL или интерфейсную библиотеку Cairo. Таким образом, между приложением и видеовыводом исчезает сразу несколько слоёв абстракций. То, что раньше было реализовано через расширения X, теперь работает напрямую с ядром и управляемым им устройством вывода.
Конечному пользователю это даёт видимые преимущества: плавное воспроизведение фильмов (без рывков, «ступенек» и моргания), меньше проблем с 3D, а также повышение производительности и отзывчивости рабочего стола. Самое время теперь засучить рукава и установить Wayland.
Перед установкой
Вам следует знать, что Wayland находится на раннем этапе развития, поэтому стабильного релиза, как такового, нет. Во главе разработке стоит Кристиан Хёгсберг [Kristian Høgsberg], хакер из Intel, а сам код размещён в виде дерева Git на серверах Freedesktop.
На текущий момент Wayland может быть запущен либо как самостоятельный дисплейный сервер (никакого X11 не требуется), либо как клиент внутри вашего рабочего стола. Во втором случае вы сможете быстро и удобно «повертеть в руках» новую технологию, но ускорения не увидите, поскольку всё будет происходить внутри X11.
Базовый протокол и основные библиотеки Wayland уже доделаны, и сторонние приложения могут использовать их для рендеринга интерфейса. Трудности на данном этапе касаются как раз клиентских приложений: для работы с новым сервером требуется, чтобы Qt и GTK были портированы на Wayland. Эта работа сейчас активно ведётся (особенно над GTK), но полностью ни одна «большая» программа не перенесена, и нам приходится довольствоваться несколькими демонстрационными штуками, вроде летающих цветков, крутящихся шестерёнок и т. п.
Обязательно нужно упомянуть о системных требованиях Wayland. Чтобы всё получилось, вам понадобится работающее OpenGL-ускорение и включённый режим KMS. Как уже говорилось выше, KMS управляет видеорежимом (в широком смысле) и работает с открытыми драйверами intel, radeon и nouveau для, соответственно, видеочипов Intel, Ati/AMD и Nvidia. Есть и ещё одно требование: нужно, чтобы рендеринг через DRI поддерживал «переброску» страниц [page-flipping] – без этого Wayland не сможет работать в «родном» режиме. Пока что поддержка pageflipping ioctl реализована только для драйверов intel и nouveau, поэтому владельцы карт Radeon смогут запустить новый дисплейный сервер пока только внутри «иксов». Владельцам карт Nvidia следует удалить проприетарный фирменный драйвер и установить открытый драйвер nouveau с тем, чтобы задействовать KMS.
Мысли об установке
Посмотрев на список зависимостей Wayland, уже можно примерно представить, из чего он состоит и с чем его едят. Поскольку Wayland активно задействует OpenGL, будет разумным поставить себе новейшую версию Mesa. Чтобы сигналы evdev от ядра были понятны Wayland, понадобится промежуточная библиотека libxkbcommon. Наконец, отображение интерфейса в Wayland невозможно без Cairo-GL – экспериментального движка Cairo, который предоставляет API для приложений. Обеспечив работу всего перечисленного, вы сможете запустить сам Wayland.
Способ установки будет отличаться в зависимости от вашего дистрибутива Linux. Популярные Ubuntu и Fedora предлагают готовые двоичные пакеты, избавляя вас от необходимости что-либо компилировать. Если же у вас более редкий дистрибутив, либо вам хочется принципиально всё сделать «руками», то припасите нужный инструментарий: стандартный набор средств разработки плюс заголовочные файлы всех пакетов, от которых зависит Wayland. Если вы не уверены в себе, почитайте врезки к этой статье и убедитесь, что вы понимаете всё, что собираетесь делать.
Несмотря на то, что Wayland вряд ли сможет что-то напортить в вашей системе, лучше всё-таки сделать резервные копии важных данных на внешний носитель.
Для Ubuntu и Fedora
В ноябре прошлого года Марк Шаттлворт написал, что Wayland будет интегрирован в Ubuntu уже в 2011 году. На данный момент, для того, чтобы протестировать новую технологию, вам нужно взять пакеты из специального PPA-репозитория для Ubuntu 10.10.
Проделайте следующее:
- Установите свежую версию Mesa с экспериментальной библиотекой DRI: sudo apt-get install libgl1-mesa-dri-experimental
- Добавьте текущего пользователя в группу video, чтобы Wayland мог работать с вашим оборудованием без прав администратора: usermod -a -G video ваше_имя
- Добавьте в список репозиториев сведения о PPA-странице Xorg-Edgers: sudo add-apt-repository ppa:xorg-edgers/wayland
- Обновите список репозиториев и установите Wayland: sudo apt-get update && sudo apt-get install wayland
Вот и всё, и никаких грязных рук!
Адам Джексон из Red Hat недавно написал в списке рассылки Fedora: «Скорее всего, Wayland будет доступен в F15 как технология, с которой можно будет поиграть». Хотя Fedora 15 ещё не вышла (на момент написания статьи), уже доступны готовые пакеты из разрабатываемой версии, пригодные и для Fedora 14. Несмотря на их нестабильность, пользоваться ими вполне безопасно. Сделайте следующее:
- На минутку активируйте репозиторий Rawhide (нестабильные пакеты) и установите новейшую версию Mesa, необходимую для Wayland (заодно установятся и некоторые зависимости для Mesa): su - && yum --enablerepo=rawhide install mesa-libGLES
- Загрузите пакеты, любезно подготовленные Koji из сообщества Fedora: http://kojipkgs.fedoraproject.org/packages/wayland/0.1/0.1.20101111.fc15/ Вам понадобятся libwayland-client, libwayland-server, wayland и wayland-common. Сверьтесь с архитектурой пакетов: по этому адресу доступны версии и для 32-битных систем (i686), и для 64-битных (x86_64).
- Установите загруженные RPM-пакеты. Откройте терминал для папки, в которой лежат пакеты, и скомандуйте: su - && rpm -Uvh *wayland*rpm
Готово! Рецепт для Fedora оказался не таким уж и сложным.
Сборка из исходников
Если вы воротите нос от двоичных пакетов и считаете, что джигит должен собирать всё сам, почему бы не скомпилировать Wayland.
Наверное, нет нужды напоминать, что вам понадобится набор инструментов для сборки программного обеспечения из исходного кода. В зависимости от вашего дистрибутива Linux состав инструментария разработчика будет отличаться. В документации от вашего поставщика Linux всегда можно уточнить детали. Но, так или иначе, вот некоторые конкретные советы:
- Если вы используете Debian или родственные ему дистрибутивы (включая все варианты *Ubuntu), будет удобно воспользоваться метапакетом build-essential. Скомандовав sudo apt-get install build-essential, вы сразу установите набор пакетов, необходимых для сборки из исходных текстов. Также удобно использовать sudo apt-get build-dep имя_пакета для автоматической установки зависимостей для сборки указанного пакета из исходных текстов.
- Пользователи дистрибутивов, основанных на Red Hat/Fedora (например, CentOS), могут также устанавливать группы пакетов посредством yum. Например, команда yum groupinstall “Development Tools” установит базовый набор для разработки и сборки ПО. Команда yum-builddep умеет устанавливать зависимости, необходимые для сборки указанного пакета из исходных текстов, так что не забывайте и про неё.
- Если у вас какой-либо другой дистрибутив, постарайтесь исследовать его пакетный менеджер. В большинстве случаев вы найдёте опцию установки групп пакетов, и среди этих групп будет раздел, связанный с разработкой.
- Среди зависимостей Wayland стоит упомянуть gdk-pixbuf-2.0, libudev, libdrm, xcb-dri2, xcb-fixes (для композитинга в X), cairo-gl, glib-2.0, gdk-2.0 (для poppler) и poppler-glib. Убедитесь, что у вас установлены файлы для разработки с использованием этих пакетов ('*-devel или *-dev).
Мы помним, что Wayland требует версию Mesa со стеком EGL, поэтому для начала именно его и соберём:
$ git clone git://anongit.freedesktop.org/mesa/mesa $ cd mesa $ ./configure --prefix=$HOME/install --enable-egl --enable-gles2 $ make && make install
Обратите внимание, что начиная с версии 7.9 EGL будет включён в основную ветку Mesa, и в будущем вы сможете пропустить этот шаг и просто обновить Mesa и её зависимости.
Теперь скомпилируем xkbcommon, который нужен для трансляции событий evdev в сигналы Wayland. Проще говоря, без этого не будет поддержки клавиатуры:
$ git clone git://people.freedesktop.org/~krh/libxkbcommon.git $ cd libxkbcommon/ $ ./autogen.sh --prefix=$HOME/install $ make && make install
Чтобы любое приложение в Wayland отображало интерфейсные элементы управления, необходима векторная графическая библиотека с поддержкой GL-вывода. Пока что этим может похвастаться только Cairo. Соберём cairo-gl:
$ git clone git://anongit.freedesktop.org/cairo $ cd cairo $ ./autogen.sh --prefix=$HOME/install --enable-gl $ make && make install
Опять же, начиная с версии 1.10, в Cairo по умолчанию будет поддерживаться вывод через GL, так что следите за версиями вашего ПО.
Теперь самое время скопировать из GIT-репозитория нашего главного героя:
$ git clone git://people.freedesktop.org/~krh/wayland $ aclocal; autoconf; ./configure --prefix=$HOME/install $ make && make install
Если всё пройдёт гладко, то через некоторое время в вашей системе будет установлен Wayland. Но расслабляться преждевременно: чтобы дать Wayland возможность определить ваше видеоустройство, скопируйте файл 70-wayland.rules из дерева исходного кода в папку /etc/udev/rules.d, после чего введите команду
udevadm trigger --subsystem-match=drm –subsystem-match=input.
Запускаем Wayland
Если вы видите свой рабочий стол, то очевидно, что X-сервер уже работает. В таком состоянии Wayland может быть запущен только как клиент внутри X11, а значит, управление клавиатурой и мышью также будет во власти X-сервера. В этом случае вам не требуется режим KMS, и в целом такой способ позволяет наиболее просто, безопасно и безболезненно тестировать Wayland. Для полноценного запуска Wayland в «родном» режиме вы должны выйти из X-сервера и перебраться в чёрную консоль Linux. Для этого можно, к примеру, переключиться на другой виртуальный терминал (нажмите Ctrl-Alt-F1, чтобы оказаться в tty1), либо загрузить всю систему в режим командной строки.
Последнее достижимо многими путями, но большинство предпочитает использовать runlevel 3 (уровень запуска 3). Как известно, в Linux сначала запускаются все системные службы (уровень 3), а затем графическое приглашение и рабочий стол (уровень 5). Например, в Fedora команда sudo /sbin/init 3 выключит рабочий стол вместе с X-сервером и вернёт вас в тёплую ламповую командную строку.
Не забудьте проверить, работает ли у вас KMS. Когда все проверки будут сделаны, запустите Wayland:
wayland-compositor &
Теперь запустим демонстрационные приложения:
wayland-dnd & wayland-flower & wayland-gears & wayland-terminal
Вы должны увидеть нечто похожее на картинку. По умолчанию с Wayland поставляется несколько наглядных тестовых приложений, таких как окно для перетаскивания объектов мышью, крутящиеся шестерни (смотрите, OpenGL работает!), терминал и ещё несколько. Полностью их список можно посмотреть, набрав команду /usr/bin/wayland*. Вы должны увидеть примерно следующее:
/usr/bin/wayland-compositor /usr/bin/wayland-screenshot /usr/bin/wayland-dnd /usr/bin/wayland-smoke /usr/bin/wayland-flower /usr/bin/wayland-terminal /usr/bin/wayland-gears /usr/bin/wayland-view /usr/bin/wayland-image
В принципе, это все клиентские приложения, которые на данный момент существуют для Wayland. С помощью wayland-terminal вы можете запустить внутри Wayland полноценный X-сервер и даже ваши любимые Gnome, KDE и прочие DE с программами для них. Этот режим обещает быть актуальным ещё долго, так как для полноценного портирования всех популярных Linux-приложений на Wayland требуется много времени. Ситуация во многом похожа на приложения X11 для Mac OS X, которые долгое время «вкладывались» внутрь рабочего стола подобным же образом.
Лучше всего запускать Wayland на настоящей аппаратной конфигурации, так как в виртуальной среде Wayland вообще не будет работать в «родном» режиме. К счастью, все относительно новые видеокарты уже поддерживаются.
Напоследок
Самое значительная поддержка в деле продвижения Wayland на рабочий стол исходит от проекта Unity – нового рабочего окружения, изначально разрабатываемого в Canonical для нетбуков и маленьких экранов. Теперь стало известно, что Unity будет внедряться в Ubuntu как среда по умолчанию уже в этом году. Так как Unity основан на GTK, это даёт толчок множеству разработчиков, которые теперь будут переводить свои приложения на Wayland. Так или иначе, но в этом году нас ждёт много интересного!
Сложно сказать, готовы ли уже пользователи к переходу на Wayland, но доподлинно известно, что сейчас в Интернете обсуждается два важных момента. Первый связан с прекращением поддержки старого оборудования, второй – с утратой т. н. «сетевой прозрачности», которой всегда гордились апологеты X. Действительно, ни один видеочип, который не поддерживает работу в режиме KMS, не сможет работать с Wayland и будет считаться несовместимым. С другой стороны, к моменту обострения данной проблемы такие видеочипы уже объективно устареют, и их будет не особенно жалко. Также, несмотря на отсутствие сетевой архитектуры в Wayland, никто не мешает реализовать удалённую работу через VNC или аналогичный протокол.
При этом преимущества Wayland гораздо более яркие, чем кажется. Новый лёгкий и очень быстрый дисплейный сервер идеально подходит для нетбуков, коммуникаторов и прочих устройств с небольшой вычислительной мощью. Вместе c Wayland и сообществом, Linux наконец завоюет Землю, соседние галактики и Вселенную. Разве не этого мы все ждём?
Настраиваем KMS
Перво-наперво удалите проприетарные видео-драйверы, если они у вас есть. Если они устанавливались вручную, выполните от лица администратора команды /usr/bin/nvidia-uninstall или /usr/share/ati/fglrx-uninstall.sh для видеокарт Nvidia или Ati/AMD, соответственно.
У пользователей последних версий Ubuntu или Fedora система после этого автоматически вернётся в исходный графический режим, для которого по умолчанию используется KMS. Если этого не происходит, откройте менеджер пакетов и убедитесь, что открытые драйверы nouveau или radeon у вас установлены. Проверьте работоспособность соответствующих модулей ядра:
su - && modprobe nouveau
или, соответственно,
su - && modprobe radeon
Чтобы определить, используется ли в текущий момент KMS, дайте команду
dmesg | grep frame
и убедитесь, что для фрейм-буфера используется модуль intel, nouveau или radeon. Обычно меньше всего проблем с KMS возникает у владельцев чипов Intel – эта корпорация активнее всех участвует в развитии Wayland.
Если ничего не получается, попробуйте вручную добавить параметр modeset=1 в загрузчик Grub. Современная версия Grub v.2 желает, чтобы вы добавили этот параметр в файл /etc/default/grub и затем скомандовали update-grub.
Глоссарий Термины для сомневающихся
- Cairo – библиотека, обеспечивающая отрисовку элементов интерфейса при помощи векторных (а не пиксельных) форм, с привлечением аппаратного ускорения графики.
- DRI – Direct Rendering Infrastructure, инфраструктура непосредственного рендеринга, позволяющая прикладным программам напрямую общаться с видеоустройством, минуя дебри X-сервера и его расширений.
- Evdev – обозначает Event Device. Это подсистема ядра Linux, которая обрабатывает события от клавиатуры, мыши и прочих устройств ввода. Evdev заменяет устаревшие расширения X-сервера для данного функционала.
- KMS – Kernel Modesetting, способ управления видеорежимом (и разрешением экрана, в частности) на уровне ядра, а не X-сервера.
- Mesa – открытая реализация OpenGL-ускорения для всех популярных видеодрайверов.
- Pageflipping – метод видеовывода, использующий «переброску» страниц в памяти видеоадаптера. Когда на экран выводится изображение из видеобуфера, в это время отрисовывается уже следующее изображение, после чего они меняются местами. Этот метод позволяет избавиться от видимых дефектов отрисовки и повысить воспринимаемую производительность.
- X11 – обычно это синоним X Window System, или просто X, «иксы». Это стандартная основа для всей графики в Linux и многих UNIX-подобных ОС.
- X.org – проект, разрабатывающий текущую реализацию X для Linux.
История проекта
Wayland существует с 2008 года благодаря Кристиану Хёгсбергу, тогда работавшему в Red Hat. Из домашнего проекта, которым Кристиан неспешно занимался на досуге, Wayland вырос в зрелую систему – сейчас она активно поддерживается Intel, куда Кристиан перешёл. У него есть отличный опыт работы с графическим стеком Linux, в частности, с технологией AIGL, вышедшей из стен Red Hat. Про Wayland он писал, что хотел создать систему, «где каждый кадр отрисовывается идеально, что в моём понимании означает: все приложения так хорошо контролируюет рендеринг, что мы никогда не увидим рваное видео, подтормаживание, медленную отрисовку или мигание».
Изначально Wayland был выпущен под лицензией MIT/GPLv2, но в 2010 году проект решил сменить её в пользу LGPLv2, которая лучше подходит для включения в Ubuntu и другие дистрибутивы с международным охватом. Пока вы читаете эти строки, люди в Canonical и Intel плотно работают над переносом интерфейсных библиотек Qt и GTK в Wayland, и близок час, когда мы увидим результат их труда.