Предыстория
Проблема
Ubuntu имеет сложные проблемы с драйвером видеокарт intel чуть ли не с версии 8.04. Причиной проблем является то, что драйвер находится в стадии сильной переделки, и работает в целом нестабильно. Тем не менее, этот полусырой драйвер был включён в дистрибутив из соображений «лучше плохо, чем никак».
На MSI Wind проблема проявляется в том, что при включённом Compiz (трёхмерном рабочем столе) другие трёхмерные приложения работают плохо, в том числе до степени непригодности.
Например, даже простейший glxgears при перетаскивании его окна оставляет изображение в исходном месте до окончания перетаскивания.
Плюс ко всему, помещение окна трёхмерного приложения под другое окно, даже под просто терминальное, срабатывает лишь на оформление окна (рамки); его содержимое всё равно рисуется наверху всей стопки окон. Хуже того, в зависимости от позиции окна трёхмерного приложения на экране, оно вызывает либо ровную прорисовку, либо мигание между своим изображением и изображением перекрываемого окна.
Более сложные OpenGL-приложения (вроде GoogleEarth, Stellarium) по всем этим причинам вообще практически непригодны к использованию.
Разумеется, можно не использовать трёхмерный рабочий стол, и такая проблема стоять не будет. Но не буду лукавить: единственное, что меня и многих простых пользователей сейчас может переманить на линуксы — вот эти спецэффекты, красивости, рюшечки. Все любят рюшечки!
Решения
В процессе переделывания драйвера видеокарты, разработчики ввели другой режим ускорения, который используется во внутренностях X (X — это название графической среды, оно же X-Window) — UXA — вместо используемого по умолчанию EXA. UXA, в свою очередь, требует DRI2, а DRI2 — GEM в ядре. Всё это до версии Ubuntu 8.10 включительно требовало массивного обновления целиком и драйвера, и ядра, и xserver’а, и ряда библиотек (mesa, drm); в версии Ubuntu 9.04 все необходимые компоненты уже предустановлены, но включен режим EXA.
Однако, в силу тестового характера этого режима и драйвера вообще, UXA очень сильно тормозит, даже в релизе Ubuntu 9.04. Compiz более-менее пригоден к использованию, но из-за медленной скорости радости не доставляет (скорее наоборот). Другие OpenGL-приложения тоже притормаживают, и куда как более ощутимо. Также, в последней версии драйвера, которая попала в Ubuntu 9.04, UXA вызывает заморозку экрана после пары-другой часов работы (или простоя, который с точки зрения компьютера всё равно является работой).
Спустя пару недель после выпуска Ubuntu 9.04 появилось решение, в меру стабильное и быстродействующее. Оно состоит в установке ядра linux-2.6.30, которое сей момент находится в стадии release candidate. Это же является и недостатком решения: ядро не готово, и в таком виде его никто не включит ни в какие обновления дистрибутива, а значит официального лекарства ждать не приходится.
К сожалению, ядро linux-2.6.30, как и все прочие версии, содержит драйвер wireless-карты (wi-fi) RTL8187SE в состоянии staging, которое по умолчанию не собирается. Поэтому готовые сборки ядра нам для MSI Wind не подходят. Всё придётся делать самим.
Но даже на ядре linux-2.6.30, драйвер из дистрибутива (intel-2.6.3), и дайвер от ubuntu-x-swat (intel-2.7.0) вешают систему через случайное время (от нескольких минут до пары часов). В отличие от заморозки экрана, где можно было переключиться в текстовую консоль, тут система вешается полностью (DontZap выставлен в false, для уточнения).
Экспериментально удалось выявить, что обновление с репозитория xorg-edgers решает проблему с зависаниями. Впрочем, дальнейшие откат драйвера до ubuntu-x-swat зависаниями не восстанавливает, так что источник проблемы скорее всего в какой-то из библиотек, обновляющихся из xorg-edgers (libdrm2, mesa).
Гарантированное решение: linux-2.6.30rc{any} + xorg-edgers repository (intel-2.7.99, etc).
Подготовка
- MSI Wind U100.
- Chipset: Intel GMA945.
- Video: Intel GMA950.
- Ubuntu 9.04 Jaunty Jackalope (original, or netbook remix)
Предполагаем, что у нас установлен свежий дистрибутив Ubuntu 9.04. Сама установка — слишком обширная тема, обсуждать её тут нет нужды.
Настраиваем сеть, она нам понадобится для установки пакетов. Драйвер беспроводной сети в Ubuntu 9.04 работает «из коробки», так что нужно только подсоединить его куда-нибудь. Драйвер проводной сети не проверял.
Обновляем что там желает обновиться до самых свежий версий.
Сборка ядра
Сборку ядра можно производить на абсолютно любом компьютере, подходящем для компиляции (много памяти и быстрый процессор). Можно собирать и на целевой машине, на которой это ядро будет работать (MSI Wind), но это займёт много больше времени. Работу проводим в домашнем каталоге (или в любой другой рабочей папке) без root-привелегий, чтоб не мусорить в системе.
Нам потребуются следующие пакеты для сборки ядра, а также все их зависимости:
sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
Версия ядра нам нужна не менее 2.6.30. В данный момент доступна версия 2.6.30-rc4, её и используем. Последнюю доступную версию, а также ссылки на коонкретные файлы можно найти тут и тут. Получаем и распаковываем ядро (57MB!):
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.30-rc4.tar.bz2 tar xjf linux-2.6.30-rc4.tar.bz2 cd linux-2.6.30-rc4
Конфигурируем ядро. Опционально берём рабочий конфиг с текущего ядра (непонятно зачем и надо ли вообще):
cp /boot/config-`uname -r` ./.config # ??? make menuconfig # зайти в "Device Drivers"/"Staging drivers" и ВЫКЛючить галочку "Exclude Staging drivers from being built" # выйти из программы и сохранить файл конфигурации (она сама спросит надо ли)
Запускаем сборку ядра:
make-kpkg clean CONCURRENCY_LEVEL=3 INSTALL_MOD_STRIP=1 fakeroot make-kpkg --initrd --append-to-version=-msiwind kernel_image kernel_headers
Переменная CONCURRENCY_LEVEL позволяет использовать многоядреность процессора, на котором производится сборка. Значение нужно указывать в количество ядер плюс один (не знаю почему плюс один — это совет из сети). Сборка на самом MSI Wind U100 занимает порядка 4 часов (CONCURRENCY_LEVEL not specified). Сборка на двухядернике 2.2MHz занимает около 1 часа (CONCURRENCY_LEVEL=3).
Переменная INSTALL_MOD_STRIP заставляет убрать из модулей отладочную информацию. С отладочной информацией ядро с модулями весит примерно 300 МБ, без неё — 30 МБ. Замечено, что при модулях с отладочной информацией X виснет, хотя курсор движется; или вылетает по signal 11/SIGSEGV (не хватает памяти?).
Установка ядра
После сборки в рабочей папке (в нашем случае это домашний каталог) появятся два файла с длинными названиями:
- linux-image-2.6.30-rc4-msiwind_2.6.30-rc4-msiwind-10.00.Custom_i386.deb
- linux-headers-2.6.30-rc4-msiwind_2.6.30-rc4-msiwind-10.00.Custom_i386.deb
Эти файлы надо любым удобным способом скопировать на ту машину, на которой они будут устанавливаться. Дальнейшие операции проводятся уже на целевой машине, с root-привелегиями (sudo).
Устанавливаем:
sudo dpkg -i linux-image-2.6.30-rc4-msiwind*.deb linux-headers-2.6.30-rc4-msiwind*.deb
При желании делаем новое ядро дефолтным (в файле /boot/grub/menu.lst):
sudo nano /boot/grub/menu.lst
Перезагружаемся:
sudo reboot
Проверяем что всё работает как и раньше, в том числе сеть (ради беспроводного драйвера мы и пересобирали ядро сами). Если поломалось — загружаемся на старое ядро, ищем и исправляем проблемы.
Видеодрайвер и графические библиотеки
Открываем на изменение файл с источником обновления драйвера:
sudo nano /etc/apt/sources.list.d/intel-driver.list
И вписываем туда такие строки:
deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main
Обновляемся:
sudo apt-get update sudo apt-get upgrade
Перезагружаемся:
sudo reboot
Включаем UXA
ВНИМАНИЕ! В драйверах с xorg-edgers режим UXA задействуется по умолчанию, а других режимов вообще нет. Приведённый ниже текст был написан для драйверов с ubuntu-x-swat и более старых. Таким образом, эту секцию можно пропустить.
Теперь надо в драйвере видеокарты включить правильное видеоускорение — UXA вместо EXA. Для этого в /etc/X11/xorg.conf надо прописать только одну опцию (AccelMethod) в секцию Device:
Section "Device" Identifier "..." Option "AccelMethod" "UXA" EndSection
Стоит также обратить внимание на дополнительные опции и скрипт fixmttr на уровен 300-320 комментариев в ветке: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/252094. TODO: найти более точные ссылки!
Перезагружаемся.
sudo reboot
Настраиваем Compiz
Нужно установить Compiz Config Settings Manager, и настроить всю красоту по желанию.
sudo apt-get install compizconfig-settings-manager ccsm
Ссылки
Ссылки для прочтения:
- https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/252094 — основное обсуждение
- https://bugs.launchpad.net/ubuntu/hardy/+source/xserver-xorg-video-intel/+bug/295934
- https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/96991 — ключевая ссылка, а также скриншот (первым комментом)
Пакеты и инструкции:
- https://launchpad.net/~xorg-edgers/+archive/ppa
- https://launchpad.net/~ubuntu-x-swat/+archive/x-updates/
Установка ядра:
- http://www.howtoforge.com/kernel_compilation_ubuntu
- http://www.howtoforge.com/kernel_compilation_ubuntu_p2
- http://kernel.ubuntu.com/~kernel-ppa/mainline/ — already compiled kernels, but staging drivers aren’t built
- http://www.kernel.org/pub/linux/kernel/v2.6/ — vanilla kernels
- http://www.kernel.org/pub/linux/kernel/v2.6/testing/ — vanilla r.c. kernels and patches
Опции и конфигурации: