Это старая версия документа.


Технология Optimus

Технологии Optimus была создана для оптимизации энергопотребления и увеличения времени работы ноутбука от батареи. Принцип работы технологии Optimus очень прост. Ноутбуки оснащаются двумя видеокартами: intel и nvidia. При использовании ресурсоёмких приложений или игр Nvidia «забирает» на себя работу по обработке изображения, результаты которые передает Intel для дальнейшего их вывода на экран. Когда вся работа с тяжелыми графическими приложениями завершена, видеокарта Nvidia выключается. И дальше обработкой изображения и его выводом занимается только видеокарта Intel.

В Windows поддержка технологии Optimus очень хорошо реализована и пользователю не надо думать когда стоит включать видеокарту Nvidia, т.к. она сама определяет когда нужна ее «помощь» и включается. А вот в линуксе не все так просто. Nvidia не обеспечила линукс полной поддержкой данной технологией. Поэтому необходимо устанавливать и использовать дополнительные приложения, и включать видеокарту nvidia вручную при необходимости.

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

lspci -vnn | grep '\''[030[02]\]'

Более точно ответить на вопрос «поддерживает ли ноутбук технологию Optimus» можно только посмотрев его техническую документацию.

Проект Bumblebee

Одно из приложений обеспечивающего поддержку технологии NVIDIA Optimus на ноутбуках с операционными системами GNU/Linux предоставляет проект Bumblebee. Используя Bumblebee вы можете дать команду видеокарте Nvidia заняться процессом обработки изображения, которое потом будет выведено через карту Intel. Когда nvidia не используется, у нее отключается питания, за счет чего уменьшается энергопотребление, ноутбук слабее нагревается и кулеры меньше шумят.

Данное wiki не рассказывает всех деталей установки и использовании bumblebee. Например, не рассматривается установка и использование bumblebee с открытым драйвером. Поэтому если вы хотите узнать больше информации, то можете посетить официальную англоязычную страницу wiki.

Полный комплект Bumblebee состоит из следующих компонентов:

  • bumblebee - основной пакет проекта bumblebee, содержит в себе команду optirun
  • bumblebee-nvidia - обеспечивает поддержку проприетарного драйвера nvidia
  • virtualgl - Бэкенд VirtualGL
  • virtualgl-libs - необходимые библиотеки для работы virtualgl
  • virtualgl-libs-ia32 - обеспечивает установку 32 битных библиотек для запуска 32 битных приложений через VirtualGL бэкенд
  • primus - Бэкенд Primus
  • primus-libs - необходимые библиотеки для работы primus
  • primus-libs-ia32 - обеспечивает установку 32 битных библиотек для запуска 32 битных приложений через Primus бэкенд

Bumblebee использует один из двух бэкендов для вывода изображения: virtualgl или primus. Самым первым появился virtualgl, который первоначально был задуман для использования передачи изображения по сети. Поэтому вывод изображения через virtualgl трудоёмкий (скопировать изображение, сжать, отправить по сети и вывести на монитор), но не смотря на это virtualgl более стабильный.

Затем был создан Primus, который использует более «прямой» подход для вывода изображения, копируя изображение прямо на вторую видеокарту. Из-за чего в теории использование Primus должно дать прирост производительности по сравнению с virtualgl, так как Primus не выполняет «лишних» действий.

Установка

В Ubuntu 12.04 установка bumblebee выполняется из стороннего репозитория. А вот начиная с Ubuntu 14.04 для установки bumblebee не обязательно использовать сторонние репозитории, все необходимые пакеты уже имеются в официальных репозиториях Ubuntu. Устанавливать проприетарный драйвер nVidia и bumblebee желательно одновременно.

В настоящее время пакет bumblebee поставляется совместно с primus. Чтобы установить virtualg необходимо подключать сторонний репозиторий или скачивать и устанавливать deb-пакеты с сайта http://sourceforge.net/projects/virtualgl/. Про установку bumblebee одновременно с primus и virtualg также рассказывается в разделе Установка драйвера nvidia и полного комплекта bumblebee используя репозитории.

Проекты Bumblebee и Nvidia Prime не совместимы между собой. Поэтому, чтобы правильно установить проприетарный драйвер nVidia и Bumblebee, удалите nvidia-prime или удостоверьтесь в его отсутствии:
sudo apt-get purge nvidia-prime

Также во время выполнения описанных ниже команд нельзя выполнять перезагрузку и выключать компьютер! Желательно сразу последовательно выполнить все шаги установки!

Ubuntu 12.04

Чтобы установить Bumblebee и проприетарный драйвер nVidia вам нужно открыть терминал Ctrl+Alt+T и выполнить следующее:

~ Обновить Ubuntu до 12.04.5:<code bash>sudo apt-get update

sudo apt-get dist-upgrade sudo apt-get install –install-recommends linux-generic-lts-trusty xserver-xorg-lts-trusty libgl1-mesa-glx-lts-trusty</code>

~ Добавить репозитории Bumblebee [[https://launchpad.net/~bumblebee/+archive/ubuntu/stable|ppa:bumblebee/stable]] и xorg-edgers [[https://launchpad.net/~xorg-edgers/+archive/ubuntu/ppa|ppa:xorg-edgers/ppa]]:<code bash>sudo add-apt-repository ppa:bumblebee/stable

sudo apt-add-repository ppa:xorg-edgers/ppa sudo apt-get update</code>

~ Установить проприетарный драйвер nvidia 331.xx и bumblebee:<code bash>sudo apt-get install --install-recommends nvidia-331 nvidia-settings bumblebee bumblebee-nvidia primus virtualgl</code>
~ Отключить репозиторий xorg-edgers, т.к. он может содержать более новые тестовые драйвера и библиотеки, обновление до которых может привести к ошибкам: <code bash>sudo apt-add-repository -r ppa:xorg-edgers/ppa

sudo apt-get update</code>

~ Удалить пакет nvidia-prime или проверить его отсутствие в системе:<code bash>sudo apt-get purge nvidia-prime</code>
~ Перезагрузить ноутбук

Ubuntu 14.04 и 14.10

Чтобы установить Bumblebee и проприетарный драйвер nVidia вам нужно открыть терминал Ctrl+Alt+T и выполнить следующее:

~ Установить проприетарный драйвер nvidia 331.xx из стандартного репозитория Ubuntu [[https://launchpad.net/ubuntu/+source/nvidia-graphics-drivers-331]] и пакет bumblebee:<code bash>sudo apt-get install --install-recommends nvidia-331 nvidia-settings bumblebee bumblebee-nvidia primus</code>
~ Удалить пакет **nvidia-prime** или проверить его отсутсвие в системе:<code bash>sudo apt-get purge nvidia-prime</code>
~ Перезагрузить ноутбук.

Ubuntu 15.04 и 15.10

Чтобы установить Bumblebee и проприетарный драйвер nVidia вам нужно открыть терминал Ctrl+Alt+T и выполнить следующее:

~ Установить проприетарный драйвер nvidia 340.xx из стандартного репозитория Ubuntu [[https://launchpad.net/ubuntu/+source/nvidia-graphics-drivers-340]] и пакет bumblebee:<code bash>sudo apt-get install --install-recommends nvidia-340 nvidia-settings bumblebee bumblebee-nvidia primus</code>
~ Удалить пакет **nvidia-prime** или проверить его отсутсвие в системе:<code bash>sudo apt-get purge nvidia-prime</code>
~ Перезагрузить ноутбук.

Установка драйвера nvidia и полного комплекта bumblebee используя репозитории

Данный пример работает для всех текущих релизов ubuntu. Также эту инструкцию можно использовать для обновления драйвера nvidia, просто установите новый драйвер поверх старого, который при этом удалится.

  • Установленную версию драйвера можно узнать в меню настройках видеокарты NVIDIA:
    optirun nvidia-settings -c :8

    или выполнив команду

    dpkg -l | grep "NVIDIA binary driver"

  • Для установки или обновления драйвера nvidia необходимо использовать сторонние репозитории. Рассмотрим пример использования репозиторий ppa:xorg-edgers/ppa и ppa:neon1ks/bumblebee:

    sudo apt-add-repository ppa:xorg-edgers/ppa
    sudo apt-add-repository ppa:neon1ks/bumblebee
    sudo apt-get update
    sudo apt-get install --install-recommends nvidia-XXX nvidia-settings bumblebee bumblebee-nvidia primus virtualgl
    sudo apt-add-repository -r ppa:xorg-edgers/ppa
    sudo apt-get update
    sudo apt-get --purge autoremove

    в примере XXX необходимо заменить на версию драйвера, например, nvidia-346. Список доступных драйверов можно посмотреть по ссылке https://launchpad.net/~xorg-edgers/+archive/ubuntu/ppa. После установки или обновления драйвера и пакета bumblebee производится отключение репозитория ppa:xorg-edgers/ppa, т.к. он может содержать более новые тестовые драйвера и библиотеки, обновление до которых может привести к ошибкам.
    В заключение незабываем перезагрузить ноутбук.



Использование

Чтобы запустить приложение, используя видеокарту NVIDIA, откройте терминал и выполните команду:

optirun [options] <application> [application-parameters]
  • Пример запуска steam без дополнительных options (Если установлен virtualgl, то вывод изображения осуществляется через него)
    optirun steam

  • Пример запуска steam через primus

    optirun -b primus steam

  • Пример запуска steam через virtualgl

    optirun -b virtualgl steam

  • Пример запуска steam игры Counter-Strike: Condition Zero

    vblank_mode=0 optirun steam steam://rungameid/80

    vblank_mode=0 - можно указывать по желанию, отключает вертикальную синхронизацию для увеличения производительности. Только хотим предупредить, что производительность увеличивается за счет снижения качества обработки, из-за чего могут возникать различные графические артефакты.

  • Пример запуска steam установленного в wine
    WINEPREFIX="/home/user/.wine" optirun wine "/home/user/.wine/drive_c/Program Files/Steam/Steam.exe" -no-dwrite 2>/dev/null

    здесь необходимо заменить user на имя вашего пользователя; -no-dwrite - используется, если steam не отображает текст; 2>/dev/null - это вывод потока ошибок (STDERR) в /dev/null, указывать не обязательно, но иногда помогает избавиться от подтормаживаний; после запуска steam - можно запускать там игры.


Дополнительные функции

  • Для получения списка доступных опций введите в терминале Ctrl+Alt+T:
    optirun --help

  • Чтобы попасть в меню настройки видеокарты NVIDIA введите:

    optirun nvidia-settings -c :8

  • Чтобы узнать активна или нет видеокарта NVIDIA введите:

    optirun --status

  • Есть еще один способ узнать активна ли видеокарта Nvidia в данный момент:

    cat /proc/acpi/bbswitch

    Если при выполнении команды получаете пустой вывод - значит имеется проблема, не работает bbswitch, а из-за него и сам bumblebee. Один из вариантов решения проблемы: установить другое ядро Linux. Пример установки ядра можно посмотреть в решении ошибки: Could not load GPU driver.


Устранение неисправностей

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected.
[ERROR]Aborting because fallback start is disabled.
  • Ошибка «Cannot access secondary GPU» Если ваша карта не работает через optirun и при запуске приложения получаете ошибку
    [ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected.
    [ERROR]Aborting because fallback start is disabled.

    то вам нужно в настройках указать правильный BusID вашей Nvidia-карты. Выполните в терминале:

    lspci | egrep 'VGA|3D'

    Пример вывода данной команды:

    00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
    01:00.0 VGA compatible controller: NVIDIA Corporation GF108M [GeForce GT 630M] (rev ff)

    Заменив все точки на двоеточия - номера впереди будут обозначать BusID видеокарт, в примере получаем следующий BusID для карты nvidia:

    BusID 01:00:0

    Дальше правим конфиг. файл xorg.conf.nvidia

    sudo gedit /etc/bumblebee/xorg.conf.nvidia

    В конфиг. файле приведен закомментированный пример указания BusID, по данному примеру указываем строчкой ниже правильный BusID (если номер BusID примера является правильным, то можно просто данную строчку раскомментировать, убрав '#') В результате получится примерно следующее (в вашем случае номера могут быть другими):

    #   BusID "PCI:02:00:0"
        BusID "PCI:01:00:0"

    Если же вы используете свободный драйвер, то вместо xorg.conf.nvidia надо править xorg.conf.nouveau

    sudo gedit /etc/bumblebee/xorg.conf.nouveau

    В заключение перезагружаем ноут.


[ERROR]Cannot access secondary GPU - error: Could not load GPU driver
[ERROR]Aborting because fallback start is disabled.
  • Данная ошибка возникает, если в системе не установлены заголовочные файлы ядра. В качестве решения предлагаем поискать и установить linux-headers для используемого в системе ядра в программе synaptic. Если же вы устанавливали ядро Linux вручную, доустановите заголовочный файл ядра или удалите установленное вами ядро.
  • Также ошибку Could not load GPU driver можно попробовать решить установкой другой версии ядра Linux. Например, в Ubuntu 14.04 можно установить linux 3.16 из 14.10 (Utopic) следующей командой:
    sudo apt-get install --install-recommends linux-generic-lts-utopic xserver-xorg-lts-utopic libgl1-mesa-glx-lts-utopic libegl1-mesa-drivers-lts-utopic

Bumblebee status: Error (3.2.1): [XORG] (EE) Server terminated successfully (0). Closing log file.
  • Начиная с ubuntu 13.10 появился баг https://bugs.launchpad.net/ubuntu/+source/bumblebee/+bug/1230008, после выполнения любой программы через optirun или primusrun, команда
    optirun --status

    выдает ошибку

    Bumblebee status: Error (3.2.1): [XORG] (EE) Server terminated successfully (0). Closing log file.

    Но при этом, приложения всё равно будут запускаться через optirun. В качестве временного решения можно перезагружать демон bumblebeed

     sudo service bumblebeed restart 

    Данный баг исправлен в последних версиях bumblebee


Failed to open VDPAU backend libvdpau_nvidia.so: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога
  • Если при выполнении команды (или любой другой):
    optirun nvidia-settings -c :8

    вы получаете предупреждение:

    Failed to open VDPAU backend libvdpau_nvidia.so: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога

    то можно выполнить следующие команды (пример показан в случае драйвера nvidia-331, при использовании другой версии драйвера - замените «nvidia-331» на соответствующее вам значение):

    sudo ln -s  /usr/lib/nvidia-331/vdpau/libvdpau_nvidia.so.1 /usr/lib/libvdpau_nvidia.so
    sudo chmod u+s /usr/lib/libvdpau_nvidia.so
Если вы будете обновлять драйвер, то не забудьте после его обновления выполнить команду:
sudo rm /usr/lib/libvdpau_nvidia.so

и повторить приведенные выше действия.


Удаление

  • Если вы хотите полностью удалить Bumblebee со своего компьютера выполните следующие команды в терминале:
    1. Удаление Bumblebee:
      sudo apt-get purge bumblebee*

    2. Можно удалить конфиги:

      rm -r /etc/bumblebee

    3. Удаление более не используемых пакетов:

      sudo apt-get --purge autoremove

  • Чтобы удалить драйвер Nvidia:
    1. sudo apt-get purge nvidia-*

    2. sudo apt-get --purge autoremove

Поддержка

Часто задаваемые вопросы

  • В: Можно ли использовать только видеокарту Nvidia?
  • О: Нет. Видеокарта Nvidia отвечает только за обработку графических данных, выводом занимается видеокарта Intel.
  • В: У меня не работают эффекты рабочего стола (куб, вязкие окна).
  • О: Если у вас создался файл /etc/X11/xorg.conf при использовании nvidia-xconfig просто удалите его так как он не совместим с Optimus
    sudo rm /etc/X11/xorg.conf
  • В: После установки bumblebee расход энергии остался такой же, как и до установки.
  • О: Убедитесь, что в параметрах загрузки ядра не стоят следующие функции.
    noacpi, pci=noacpi, acpi=off

    Чтобы проверить настройки ядра введите в терминале следующую команду

    cat /proc/cmdline
  • В: В сведениях о системе - графика - неизвестно. Это нормально?
  • О: Вполне, вопрос напрямую не связан с bumblebee, просто нужно установить пакет mesa-utils. Откройте терминал и выполните команду
    sudo apt-get install mesa-utils

    и перезагрузите компьютер. После этого в сведениях о системе у вас появится Intel Sandy bridge (или иное название связанное с Intel). У всех обладателей видеокарт Intel в системе-графика стоит неизвестно до установки данного пакета.

Отправка багов и отчетов

Если вы столкнулись с какими-то трудностями, при использовании bumblebee, вы можете

  • Написать об этом на форуме http://forum.ubuntu.ru/index.php?topic=190100.0
  • Присоединиться к каналу http://webchat.freenode.net/?channels=#bumblebee по IRC и сообщить об ошибке
  • Или (если вас попросят после общения в канале IRC) выполнить следующую команду в терминале для создание отчета об ошибке (баг-репорт)
    sudo bumblebee-bugreport

Ссылки

См.также