Технология 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 и выполнить следующее:

  1. Обновить Ubuntu до 12.04.5:
    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

  2. Добавить репозиторий с обновленным Bumblebee ppa:neon1ks/bumblebee:

    sudo add-apt-repository ppa:neon1ks/bumblebee
    sudo apt-get update

  3. Установить проприетарный драйвер nvidia 331.xx и bumblebee:

    sudo apt-get install --install-recommends nvidia-331 nvidia-settings bumblebee bumblebee-nvidia primus

  4. По желанию можно также установить пакет virtualgl:

    sudo apt-get install --install-recommends virtualgl

  5. Перезагрузить ноутбук

Ubuntu 14.04

  1. Обновить Ubuntu
    sudo apt-get update
    sudo apt-get dist-upgrade

  2. Добавить репозиторий с обновленным Bumblebee ppa:neon1ks/bumblebee:

    sudo add-apt-repository ppa:neon1ks/bumblebee
    sudo apt-get update

  3. Установить проприетарный драйвер nvidia 346 и bumblebee:

    sudo apt-get install --install-recommends nvidia-346 nvidia-settings bumblebee bumblebee-nvidia primus

    Можно вместо nvidia-346 указать драйвер nvidia-340, только использовать надо ядро 3.13 или 3.16 (на ядре 3.19 драйвер nvidia-340 не работает)
    По желанию можно также установить пакет virtualgl:

    sudo apt-get install --install-recommends virtualgl

  4. Если умеете, можете отредактировать конфиг. файл /etc/bumblebee/bumblebee.conf .
  5. Перезагрузить ноутбук.

Ubuntu 15.10

Отключите в настройках текстового редактора gedit, функцию создания резервной копии перед сохранением. Если вы используете другой редактор, то удостоверьтесь, что он не делает резервные копии.

  1. Обновить Ubuntu
    sudo apt-get update
    sudo apt-get dist-upgrade

  2. Установить проприетарный драйвер nvidia 352 и bumblebee:

    sudo apt-get install --install-recommends nvidia-352 nvidia-settings bumblebee bumblebee-nvidia primus

  3. Добавить текущего пользователя в группу безопасности bumblebee:

    sudo gpasswd -a $USER bumblebee

  4. Запускаем демон bumblebeed:

    sudo systemctl enable bumblebeed

  5. Редактируем /etc/modules (на самом деле это ссылка на другой файл, так в ubuntu 15.04 /etc/modules ссылается на файл /etc/modules-load.d/modules.conf)

    sudo gedit /etc/modules

    В который добавляем следующие две строчки:

    i915
    bbswitch

  6. Редактируем конфигурационный файл bumblebee:

    sudo gedit /etc/bumblebee/bumblebee.conf

    • Строка 22

      Driver=nvidia

    • Строка 55

      KernelDriver=nvidia-352

    • Строка 58

      LibraryPath=/usr/lib/nvidia-352:/usr/lib32/nvidia-352

    • Строка 61

      XorgModulePath=/usr/lib/nvidia-352/xorg,/usr/lib/xorg/modules

  7. Перезагрузить ноутбук

Ubuntu 16.04

Установка описана в отдельной статье Bumblebee в Ubuntu 16.04 Xenial Xerus.

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

Данный пример работает для ubuntu 12.04, 14.04 и 14.10. Также эту инструкцию можно использовать для обновления драйвера 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

Ссылки

См.также