Всем привет! Установил в Debian 5 Glibc 2.15 (уверен что до выхода Debian 8 это делали все дебианщики 6-7 версий) - это оказалось достаточным условием для того, чтобы Steam и все его игры заработали. Не пришлось даже обновлять библиотеки графического стека. Но это - с NVIDIA и Catalyst, а мне нужен ещё и Intel. А для Intel потребовалось обновить весь графический стек, от ядра до иксов.
Мне нужна помощь крутых специалистов для поиска и устранения двух багов. Чтобы вы не отказали мне в помощи, я собрал для вас LiveCD со встроенным скриптом установки нового Xorg (пакеты сделаю потом, когда всё будет работать).
Часть 0: зачем? И пакеты с ядром и Glibc
Обсуждениее того, зачем мне это нужно - не формат для Developement. Скажу лишь что мне очень нравится что система ест меньше ста мегов ОЗУ после запуска, и при этом у меня не хардкорное хакерское WM, а вполне себе полноценное KDE с апплетом Bluetooth и кучей фич, которые под виндой начали появляться только в 7-8.
Часть 1: сегфолт Mesa
Скачайте мою сборку отсюда - в ней кроме Glibc обновлены также ядро (для новых драйверов, в частности Wi-Fi) и Firefox (для гугления решений ошибок). Запишите её на DVD или Flash-диск (с помощью Unetbootin) и загрузитесь с него. Произведите первоначальную настройку: добавить русский язык, убрать все остальные, поставьте галочку «разрешить латиницу», применить, в третьей вкладке настройте комбинацию клавиш переключения, примените. В программе буфера обмена разрешите «Игнорировать выделение мышью» и запретите Actions. Настройка окончена.
Откройте консоль и выполните sudo /etc/init.d/kdm stop
. О нет, белый экран! Наберите в невидимой консоли sudo modprobe i915
- и консоль появляется!
cp /privet_isden_tam_lor/xorg.tar .
tar xf xorg.tar
cd xorg
sh 0-install-deps.sh
sh 1-prepare-dirs.sh
sh 2-install.sh 2> error.txt
sh 3-fix-freezing-keyboard-and-mouse.sh
sudo /etc/init.d/kdm start
Скрипт под номером 2 займёт минут 20. Скрипт 3 обязателен к выполнению! Если забыть, то мышка и клавиатура не будут работать - даже Ctrl-Alt-F1. SSH в этом LiveCD по умолчанию отключен.
Итак, установлен самый последний графический стек. Открываем консоль и пробуем glxinfo и glxgears. Ошибка сегментирования! LIBGL_ALWAYS_SOFTWARE=1 glxgears
работает. Вот лог иксов.
Первое, что я попробовал - собрать без Glamor: один из результатов поиска гласил, что Glamor загружается раньше, чем какой-то другой компонент, поэтому его надо отключить. Не помогло.
Часть 2 - неработающий драйвер иксов «modesetting»
Свежий графический стек нужен не только для графики Intel, но и для NVIDIA, если у вас Optimus (в Линуксе Оптимус называется Prime, и требует Linux 3.9, X Server 1.13, X Randr 1.4, или новее).
wget http://us.download.nvidia.com/XFree86/Linux-x86/352.21/NVIDIA-Linux-x86-352.21.run
sudo /etc/init.d/kdm stop
sudo sh NVIDIA-Linux-x86-352.21.run
Разрешаем прописать модуль в DKMS и запрещаем сгенерировать /etc/X11/xorg.conf. Вместо него берём свой отсюда (например), желательно сохранить его заранее, до выключения иксов.
Теперь по идее нужно дополнить конфиг KDM, чтобы KDM выполнял:
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
Но я не нашёл как это сделать. Вместо этого создал скрипт optimus:
DISPLAY=:0 xrandr --setprovideroutputsource modesetting NVIDIA-0
DISPLAY=:0 xrandr --auto
Открыл второй терминал (по Alt-F2), и набрал sleep 30 && sh optimus
. После этого Alt-F1, и sudo /etc/init.d/kdm start
(проще использовать историю команд: несколько раз - клавиша стрелочки вверх). В качестве временного хака сойдёт!
На современном линуксе всё работает, на Debian 5 - такой лог. Как мы видим, NVIDIA превосходно загрузилась и замечательно себя чувствует! А modesetting (драйвер, который занимает чип Intel и работает только на вывод проброшенной картинки) виден только в нескольких строчках:
[ 38802.550] (II) LoadModule: "modesetting"
[ 38802.551] (II) Loading /usr/lib/xorg/modules/drivers/modesetting_drv.so
[ 38802.551] (II) Module modesetting: vendor="X.Org Foundation"
...
[ 38802.551] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
...
[ 38802.559] (WW) Falling back to old probe method for modesetting
И всё! А вот какие простыни текста он должен выдавать.
Первое, о чём я вспомнил, это два патча для modesetting из статьи, по которой я составлял скрипт компиляции: add_prime_support-1.patch и fix_modesetting-1.patch. Названия как бы намекают на то, что это исправляет проблему! Но нифига. (Кстати, в скрипте они не применяются - когда вы будете тестировать, пересоберите X Server с ними, или отредактируйте скрипт под номером 2).
Второе, о чём я подумал, это параметр Option "AutoAddGPU" "on"
. Я ещё не знал что проблема в modesetting, и думал что это NVIDIA не подключается - поэтому разрешил горячее подключение GPU. Но чтение логов, команда xrandr --listproviders
, и попытка сделать DISPLAY=:0 glxinfo
развеяла мои сомнения: NVIDIA чувствует себя хорошо! modesetting - плохо.
Третье, о чём я подумал: «последняя версия драйвера modesetting - бажная!». В статье по компиляции сказано что начиная с последнего релиза X Server драйвер modesetting включен в его исходники, а не распространяется отдельно. Пофиг - попробовал версии 0.9.0 и 0.8.0. Не работает.
Четвёртое, о чём я подумал: «это всё HAL виноват! Нужно пересобрать Xorg с libudev, и тогда заработает!». Сказано - сделано: я удалил libhal-dev и установил libudev-dev (положил в xorg.tar отдельно), загрузил LiveCD заново, и собрал иксы. Снова весело словил неработающие мышь и клаву - так что если будете пробовать это действие, модифицируйте скрипт под номером 3, добавив в него правила udev. И да - логи не изменились, всё по-прежнему не работает.
Теперь я надеюсь только на вас, умные и опытные люди! Cast i-rinat