суббота, 3 августа 2013 г.

Установка проприетарного драйвера NVIDIA на ноутбук с технологией Optimus

В этой заметке я опишу установку проприетарного драйвера NVIDIA на ноутбук с технологией NVIDIA Optimus, а также настройку bumblebee.

Предисловие.
При покупке ноутбука, я не сразу обратил внимание на то, что в ноутбуке две видеокарты: встроенная в процессор и дискретная (Nvidia GeForce 710M).
При попытке выбора видеокарты в BIOS были только два пункта: switchable и integrated.
То есть пункта выбора дискретной видеокарты не было.
Немного погуглив я обнаружил, что мой ноутбук поддерживает технологию NVIDIA Optimus.
Если говорить кратко, то это технология, которая позволяет экономить заряд батареи на ноутбуке, посредством использования интегрированной видеокарты, когда нужно, и использования дискретной видеокарты, когда нужно.
Таким образом, у карты NVIDIA нет модуля вывода изображения, то есть, дискретная видеокарта обрабатывает изображение, а встроенная карта Intel выводит на экран.
Плюсы этой технологии в том, что питание действительно экономится.
Минусы - нельзя никак использовать дискретную видеокарту напрямую.
Причем эта технология работает на Windows 7 сразу же при установке проприетарного драйвера. В Linux это не так, поэтому умельцы написали приложение bumblebee, для настройки технологии.
Прежде чем что-то устанавливать, убедитесь, что ваш ноутбук действительно поддерживает эту технологию.
Проверить можно так:
$ lspci -vnn | grep '\''[030[02]\]'
00:02.0 VGA compatible controller [0300]: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0116] (rev 09) (prog-if 00 [VGA controller])
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF117M [GeForce 610M/710M / GT 620M/625M/630M/720M] [10de:1140] (rev ff) (prog-if ff)

Если у вас примерно такой вывод команды, то значит, что технология поддерживается и надо идти дальше.
Как правило видеокарты начиная с серии 4ххМ (M = mobile мобильная) и новее уже содержать в себе технологию Optimus.

Перед тем как установить непосредственно драйвера, обновим систему:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo shutdown -r now

Теперь добавим нужные нам репозитарии и установим проприетарный драйвер NVIDIA и саму программу bumblebee:
$ sudo add-apt-repository ppa:bumblebee/stable
$ sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
$ sudo apt-get update
$ sudo apt-get install bumblebee bumblebee-nvidia nvidia-current
$ sudo shutdown -r now

После перезагрузки, проверим установился ли драйвер:
$ optirun nvidia-settings -c :8

В System Information -> NVIDIA Driver Version видим 304.88, это версия драйвера. Значит, что драйвер установился.

Либо альтернативный вариант проверки:
$ optirun glxinfo | grep OpenGL | head -3
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce 710M/PCIe/SSE2
OpenGL version string: 4.2.0 NVIDIA 304.88

Вы наверняка заметили, что я запускал glxinfo с помощью optirun.
В этом и заключается работа приложения bumblebee.

Теперь введем то же самое, но уже без optirun:
$ glxinfo | grep OpenGL | head -3
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile 
OpenGL version string: 3.0 Mesa 9.1.3

Таким образом, мы убедились, что программа запущенная с помощью команды optirun будет использовать проприетарный драйвер NVIDIA, а по умолчанию - свободный.

У bumblebee есть два backend`а для «проброса» изображения отрисованного на карте NVIDIA. Это VirtualGL и Primus.
По некоторым словам, Primus проще и более производителен. 
Непосредственно объяснение различий VirtualGL и Primus:
Bumblebee использует VirtualGL для вывода изображения. Эта технология была задумана для использования по сети, то есть чтобы вывести изображение нужно было (скопировать изображение, сжать, отправить по сети и вывести на монитор).
Primus же использует более "прямой" подход копируя изображение прямо на вторую видеокарту и выводя изображение. В теории это должно дать прирост производительности, так как Primus не выполняет "лишних" действий.

Поэтому далее займемся установкой и настройкой Primus.
Для его установки не требуется подключения другого репозитария, так как, он находится в репозитарии bumblebee, который мы подключали ранее. 
Если вы отключали репозитарий, то снова подключите его!

Установка:
$ sudo apt-get install primus primus-libs-ia32:i386

Настройка:
$ sudo vim /etc/bumblebee/bumblebee.conf
Поменяем строку:
Bridge=auto
на
Bridge=primus

И перезагрузить демон bumblebee:
$ sudo service bumblebeed restart

В принципе, на этом установка и настройка окончена.
Я могу порекомендовать установить графический конфигуратор для bumblebee, он очень прост и удобен в настройке.

Установка:
$ sudo add-apt-repository ppa:alessandrofac93/bumblebee-config-gtk-dev
$ sudo apt-get update
$ sudo apt-get install bumblebee-config-gui

Запустить можно так:
$ sudo bumblebee-config

На [ERROR], можно не обращать внимания, потому что, bumblebee сам находит путь к модулю драйвера nvidia-current.

Теперь окончательно проверим работоспособность драйвера NVIDIA и приложения bumblebee:
$ optirun --status
Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.
Видим, что дискретная карта не используется.
Теперь запустим, например firefox с помощью optirun:
$ optirun firefox
$ optirun --status
Bumblebee status: Ready (3.2.1). X is PID 4923, 1 applications using bumblebeed.

Результат налицо. Видим, что firefox запущен в режиме Primus и помимо встроенной видеокарты использует дискретную.

Лично я запускаю optirun только для steam (очень редко поигрываю):
$ optirun steam
Заметил даже немного прирост производительности в steam, firefox, gimp.

Удаление bumblebee:
$ sudo apt-get purge bumblebee
$ sudo apt-get --purge autoremove
Тут все просто.

Если возникнут какие-то проблемы, например не работает куб рабочего стола или прочие безделушки, можно нужно заглянуть сюда: https://github.com/Bumblebee-Project/Bumblebee/wiki/Troubleshooting

5 комментариев:

Unknown комментирует...

Есть какие-нибудь другие источники?
W:Failed to fetch http://ppa.launchpad.net/alessandrofac93/bumblebee-config-gtk-dev/ubuntu/dists/saucy/main/binary-amd64/Packages 404 Not Found
, W:Failed to fetch http://ppa.launchpad.net/alessandrofac93/bumblebee-config-gtk-dev/ubuntu/dists/saucy/main/binary-i386/Packages 404 Not Found
, W:Failed to fetch http://ppa.launchpad.net/gwibber-daily/ppa/ubuntu/dists/saucy/main/source/Sources 404 Not Found
, W:Failed to fetch http://ppa.launchpad.net/gwibber-daily/ppa/ubuntu/dists/saucy/main/binary-amd64/Packages 404 Not Found
, W:Failed to fetch http://ppa.launchpad.net/gwibber-daily/ppa/ubuntu/dists/saucy/main/binary-i386/Packages 404 Not Found
, E:Some index files failed to download. They have been ignored, or old ones used instead.

Amet13 комментирует...

Можете вручную тут скачать: https://launchpad.net/~alessandrofac93/+archive/bumblebee-config-gtk-dev/+packages

Amet13 комментирует...

А, вот появилась инфа, он переименовался:
https://launchpad.net/bumblebee-config-gui

Hunta комментирует...

Спасибо за статью, долго не мог задействовать драйвер NVidia на Lenovo B560. все получилось! Возник вопрос, получается приложения, которые хочешь запустить с использованием драйвера от NVidia надо запускать ик ком. строки?
optirun имяПриложения?

Amet13 комментирует...

Не обязательно из командной строки.
Можно в настройках ярлыка изменить команду. Например со /usr/games/steam %U на optirun /usr/games/steam %U.
Примерно так: http://i.imgur.com/qeXOqaW.png