Поиcкал по форуму информацию на данную тему: очень много вопроcов, очень много ответов – но везде по куcочками, нет полного алгоритма установки официальных драйверов. Надеюсь Эта тема будет полезна.
Примечание от Denis Konstantinov
0. Что из себя представляет драйвер NVIDIA:
Вроде уже описание дали яснее некуда а всё равно чуть ли не каждый день задают вопросы по установке.
Очень похоже, что проблема в непонимании как устроен драйвер.
А всё очень просто, как вы знаете (стыд вам если не знаете) драйвер от NVIDIA закрытый. Но поскольку они не могут писать под каждое ядро отдельный драйвер они разделили функционал на два модуля, модуль ядра с открытым исходным кодом и изменённая библиотека libGL.so содержащая основной функционал драйвера (в libGLcore.so) . В открытом варианте эта библиотека содержит только саму реализацию OpenGL и называется MESA http://www.mesa3d.org/ по умолчанию устанавливается именно эта версия библиотеки и библиотеки libGLcore.so в ней нет .
Но версия от NVIDIA той же библиотеки помимо реализации OpenGL ещё содержит код драйвера, именно по этой причине очень сложно для начинающего пользователя установить драйвер. Нужно соблюсти все тонкости, а если ещё учеть что драйвер ставится в систему которая сама контролирует что должно быть (это я про dpkg) то начинаются проблемы.
Теперь детали.
командой
$ find /lib/modules/`uname -r`/ -iname *nvidia.ko*
можно узнать сколько модулей у нас в директории ядра. должен быть один
неважно в какой именно директории, но обычно
если в /lib/modules/`uname -r`/volatile/nvidia.ko то это драйвер из пакета linux-restricted-modules
для нормальной работы драйвера от NVIDIA его там быть не должно
поскольку инсталлятор от NVIDIA обычно ставит модуль в
/lib/modules/`uname -r`/kernel/drivers/video/nvidia.ko
т.е. если у вас два модуля то будет грузиться тот кто выше прописан в файле
/lib/modules/`uname -r`/modules.dep rfr правило если возникает такая ситуация то первым грузится модуль из volatile
об этом говорит ошибка в логе /var/log/Xorg.0.log
API mismatch: the NVIDIA kernel module has the version 1.0-9755, but this X module has the version 1.0-9631.
скорее всего номера версий будут конечно другие.
Итак модуль должен быть только один! поэтому нужно отклучить модуль из пакета linux-restricted-modules
делается это изменением файла
/etc/default/linux-restricted-modules-common
там нужно исправить строчку на вот такую
DISABLED_MODULES=”nv nvidia_new”если у вас там уже что то есть то нужно добавить nv и nvidia_new через пробел например
DISABLED_MODULES=”ath_hal fc fglrx ltm nv nvidia_new”
действие вступит в силу после перезагрузки. Именно поэтому если не прописать эти строчки после перезагрузки даже если вы удалили руками модуль из /lib/modules/`uname -r` то после перезагрузки он снова будет в /lib/modules/`uname -r`/volatile
деталь номер два
как уже было сказано драйвер состоит из двух частей вторая это библиотека /usr/lib/libGL.so.1 (а также libGLcore ) как правило это ссылка. а вот на что она указывает нас и интересует. что то на подобии libGL.so.100.14.11 цифры это версия драйвера NVIDIA.
Версия из Mesa имеет номер поскромнее что то вроде libGL.so.1.2 проверить что есть что можно командой
$ dpkg -S libGL.so.1.2
libgl1-mesa-glx: /usr/lib/libGL.so.1.2
$ dpkg -S libGL.so.100.14.11
dpkg: файл *libGL.so.100.14.11* не найден.
Но как же устанавливается драйвер из репозитория!?
А очень просто модуль уже есть (мы с ним боролись он находится в /lib/modules/`uname -r`/volatile/nvidia.ko)
а вот при установке nvidia-glx (nvidia-glx-new или nvidia-glx-legacy) происходит подмена (делает это установочный скрипт deb пакета) версия от меса копируется в другую директорию а на её место встаёт версия от NVIDIA нужной версии.
Тут кроется ещё одна особенность dpkg умеет запоминать, что куда перенесли, поэтому когда переустанавливается пакет libgl1-mesa-glx, при установленном nvidia-glx (nvidia-glx-new или nvidia-glx-legacy), dpkg устанавливает библиотеку libGL.so от Mesa в новое место и в результате библиотека от NVIDIA остаётя не тронутой, именно по этому если драйвер был установлен вручную и работал, то после переустановки (обновлениии) пакета libgl1-mesa-glx библиотека от NVIDIA перетирается и драйвер не работает. В таких случаях нужно заново устанавливать драйвер NVIDIA вручную.
Ну теперь когда вы знаете где что и как должно быть, если у вас что то не работает,
проверяйте всё по двум пунктам (при условии что корректно настроен xorg.conf)
1 сколько модулей nvidia.ko и каких версий
2 какая версия libGL.so
3 если вы хотите поставить драйвер сами то предаврительно удалите пакеты sudo apt-get remove nvidia-glx nvidia-glx-new nvidia-glx-legacy
Ну и на последок в любой ситуации для загрузки xorg достаточно сменить драйвер с nvidia на nv для запуска x сервера.
nv поддержтивает только 2d ускорение.
1. Скачайте последнюю версию драйверов для архитектуры вашего дистрибутива с nvidia.com (Что-то похожее на: NVIDIA-Linux-XXX-X.X-XXX-pkg1.run).
2. Перед установкой драйверов потребуется доустановить дополнительные пакеты (если они отсутствую в системе): исходники ядра, утилиты make, bunutils, компилятор gcc, libc6-dev.
sudo apt-get install linux-headers-`uname -r`
sudo apt-get install build-essential
sudo apt-get install pkg-config
sudo apt-get install binutils
sudo apt-get install xserver-xorg-dev
или тоже самое только одной строчкой
sudo apt-get install linux-headers-`uname -r` binutils pkg-config build-essential xserver-xorg-dev
Иначе при установке может быть такая ошибка
"ERROR: The NVIDIA kernel module was not created".
3. Завершите свой сеанс. Переключитесь в текстовую консоль Ctrl+Alt+F1 и залогиньтесь.
Остановите X-Server:
sudo /etc/init.d/gdm stop
4. Запустите инсталлятор драйверов (из каталога куда вы их сохранили) от имени root:
sudo -s -H
sh NVIDIA-Linux-XXX-X.X-XXX-pkg1.run
Вместо NVIDIA-Linux-XXX-X.X-XXX-pkg1.run вы указываете точное имя пакета с драйверами, которые вы скачали с официального сайта.
5. Инсталлятор ругнётся на отсутствие precompiled headers для вашего ядра и предложит скачать их с сервера nVidia. Откажитесь. Он предложит скомпилировать их сам – соглашайтесь.
6. Если все прошло успешно, то по окончанию установки вам предложать запустить утилиту nvidia-xonfig. Откажитесь!
7. Сделайте копию конфигурационного файла X-сервера.
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup
8. Отредактируйте файл xorg.conf.
sudo nano /etc/X11/xorg.conf
Найдите строку Section “Device”, а чуть ниже нее строку Driver “nv”. Последнюю измените на Driver “nvidia”. Можете так же добавить в эту же секцию строку Option “NoLogo” “TRUE”, чтобы при загрузке X-сервера не появлялся логотип nVidia (некоторых это раздражает).
В результате эта часть файла должна быть похожа на сто:
Section "Device"
Identifier "NVIDIA Corporation NV43 [GeForce 6600 GT]"
Driver "nvidia"
Option "NoLogo" "TRUE"
BusID "PCI:1:0:0"
EndSection
В разделе Section “Module” закомментируйте (или удалите) строки Load “dri” и Load “GLCore”. И добавьте в этот же раздел строку Load “glx”, если она отсутствует.
Эта часть файла должна быть похожа на сто:
Section "Module"
Load "i2c"
Load "bitmap"
Load "ddc"
#Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "type1"
Load "vbe"
EndSection
9. Перезапустите X-сервер:
sudo /etc/init.d/gdm start
10. А теперь в Синаптике/Адепте запускаем поиск по ключевому слову “nvidia”…. находим все пакеты связанные с nvidia, в частности nvidia-kernel-common и удаляем их.
Если вы все сделали правильно, то X-сервер запустится уже используя официальные драйвера nVidia. Если же X-сервер не запустился, то просто восстановите конфигурационный файл:
sudo cp /etc/X11/xorg.conf.backup /etc/X11/xorg.conf
и ищите ошибку в своих действиях или спрашивайте в этой теме.
Если вы нашли в этой инструкции какие-то неточности или хотите что-нибудь добавить – пишите. Буду рад с вашей помощью довести это описание до состояния «понятно всем и каждому».
Полный перевод документации драйвера NVIDIA для операционных систем Linux.
http://forum.ubuntu.ru/index.php?topic=3031.0