Nvidia optimus, настройка и запуск bumblebee
Данное руководство предназначено для счастливых обладателей ноутбуков с nvidia optimus на борту.
На данный момент существуют две технологии, которые позволяют использовать Optimus в Linux: Optimus/Prime и Bubmlebee. Эти технологии взаимоисключающие: необходимо использовать одну из их в один момент.
Optimus/Prime
Optimus/Prime позволяет использовать Optimus в двух режимах: 'PRIME GPU offloading' и 'Reverse PRIME'. Для его работы ему необходимы загруженные KMS- и DDX-драйвера для Intel'овской карточки и NVidia-карты. До недавнего времени KSM-драйвер для NVidia был только nouveau. В последнее время для бинарного блоба
DRI2
Для работы Optimus/Prime необходимо:
- Обновлённый графический стек (ядро, xserver, mesa)
- Загруженные драйвера KMS для обеих графических карт
- Загруженные драйвера DDX для обеих графических карт
Если всё хорошо, то xrandr --listproviders
должен отобразить два провайдера:
$ xrandr --listproviders Providers: number : 2 Provider 0: id: 0x8a cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 2 outputs: 2 associated providers: 1 name:Intel Provider 1: id: 0x66 cap: 0x7, Source Output, Sink Output, Source Offload crtcs: 2 outputs: 5 associated providers: 1 name:nouveau
3D оффлоадинг
Важно сказать Prime'у какую карту использовать для оффлоадинга. Например, для того, чтобы использовать Nouveau для оффлоадинга Intel'овской карточки:
$ xrandr --setprovideroffloadsink nouveau Intel
Когда это сделано, очень просто выбрать карту, которая должна использоваться. Для оффлоадинга приложения на дискретную карту, нужно передать ему переменную окружения DRI_PRIME=1. Когда приложение будет запущено, Оно будет использовать дискретную карту для рендеринга. Если нужно использовать встроенную карту, необходимо установить DRI_PRIME в 0 или не передавать его. Поведение можно посмотреть на следующем примере:
$ DRI_PRIME=0 glxinfo | grep "OpenGL vendor string" OpenGL vendor string: Intel Open Source Technology Center $ DRI_PRIME=1 glxinfo | grep "OpenGL vendor string" OpenGL vendor string: nouveau
Использование видео-выходов на дискретной карточке
Если на дискретной карте есть видео-выходы, которые недоступны на первичной видео-карте, то их можно использовать с помощью "Reverse PRIME". После чего первичнаяв видео-карта будет использоваться для рендерига изображения, которое затем будет отправлено на дискретную видео-карту. Для этого нужно выполнить:
$ xrandr --setprovideroutputsource nouveau Intel
Когда это сделано, видео-выход карты nvidia будет доступен в xrandr, и можно сделать сделать следующее:
$ xrandr --output HDMI-1 --auto --above LVDS1
чтобы добавить второй монитор, который подключён к карте NVidia.
DRI3
Реализация DRI3 стремится предоставить более пригодный способ использовать PRIME. Он требует несколько дополнительных шагов для установки:
* ядро версии 3.17 или выше * XServer 1.16 с поддержкой DRI3 * Mesa 10.3 с поддержкой DRI3 * загруженный драйвера KMS для обоих карт * загруженный драйвер DDX для первичной карты
Необходимо, чтобы пользователь входил в группу video
.
Если всё хорошо, то оффлоадинг на вторичную карту осуществляется с помошью DRI_PRIME=1:
$ DRI_PRIME=0 glxinfo | grep "OpenGL vendor string" OpenGL vendor string: Intel Open Source Technology Center $ DRI_PRIME=1 glxinfo | grep "OpenGL vendor string" OpenGL vendor string: nouveau
Bumblebee
Рассмотрим процесс установки, настройки и запуска видеокарты nvidia посредством bumblebee.
установка
1) Обновляем систему и ядро до текущего бранча:
# apt-get update # apt-get dist-upgrade # update-kernel
2) Узнаем версию установленного ядра:
$ uname -r
3.4.27-std-def-alt0.M60P.1
3) Для запуска проприетарного драйвера nvidia удалим модуль ядра от свободного драйвера nouveau (обратите внимание на сборку ядра):
# apt-get remove kernel-modules-drm-nouveau-std-def
и установим (если не установлены) проприетарный драйвер nvidia и модуль ядра для него:
# apt-get install kernel-modules-nvidia-std-def
4) Устанавливаем bbswitch для своего ядра и bumblebee:
# apt-get install kernel-modules-bbswitch-std-def bumblebee
настройка
5) Узнаем BusID видеокарт[1]:
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09) 01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 540M] (rev ff)
нас интересует BusID, относящийся к intel (00:02.0)
6) Создадим файл (от рута, можно через mc) /etc/X11/xorg.conf следующего содержания с указанием ранее полученного BusID:
Section "Device" Identifier "Device1" Driver "intel" VendorName "onboard" BusID "PCI:0:2:0" #обратите внимание на двоеточия и количество 0 EndSection Section "Monitor" Identifier "Monitor0" Option "DPMS" EndSection Section "Screen" Identifier "Screen0" Device "Device1" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
Для тех у кого артефакты при скроллинге, файл будет выглядеть так:
Section "Device" Identifier "Device1" Driver "intel" Option "AccelMethod" "uxa" VendorName "onboard" BusID "PCI:0:2:0" #обратите внимание на двоеточия и количество 0 EndSection Section "Monitor" Identifier "Monitor0" Option "DPMS" EndSection Section "Screen" Identifier "Screen0" Device "Device1" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
7) Удаляем файл /etc/X11/xorg.conf.d/10-monitor.conf и желательно удалить компонент от альтератора alterator-x11 или не производить через него настройку дисплея.
проверка
8) Перезагружаем систему и проверяем работоспособность видеокарты nvidia:
$ optirun glxinfo | grep OpenGL
должно получится нечто подобное:
OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: GeForce GT 540M/PCIe/SSE2 OpenGL version string: 4.3.0 NVIDIA 310.19 OpenGL shading language version string: 4.30 NVIDIA via Cg compiler OpenGL extensions:
Можно запускать нужные приложения на видеокарте nvidia командой от пользователя, входящего в группу xgrp[2]:
$ optirun приложение
Запущенные без optirun приложения будут работать на видеокарте intel, при этом видеокарта nvidia будет выключена.
P.S. Замечено на р6, что на 32-х разрядных системах bumblebee падает после отработки команды optirun, для повторного запуска команды optirun необходимо перезапустить сервис bumblebee:
# service bumblebeed start
Замечено что в ряде случаев сервис bumblebeed не стартует автоматически при перезагрузке системы и требуется его включение в явном виде. Для проверки следует выполнить команду:
# service bumblebeed status
Если сервис не активен (вместо active выводится unknown или что-подобное), то для включения сервиса нужно выполнить команду:
# service bumblebeed enable
после чего имеет смысл перезагрузить систему.
Primus
Для nvidia optimus собран primus, предлагающий некоторое улучшение производительности.
установка
9) Устанавливаем primus:
# apt-get install primus
проверка
Команда запуска приложений через primus:
$ primusrun приложение
Также остается возможность запуска приложений через VirtualGL:
$ optirun приложение
Для отключения вертикальной синхронизации у primus:
$ vblank_mode=0 primusrun приложение
Для нормальной работы 32-х разрядных приложений и игр на 64-х разрядной системе через primus должны быть установлены следующие пакеты: i586-primus, i586-xorg-drv-intel, i586-xorg-dri-intel, i586-nvidia_glx, i586-nvidia_glx_common.
Для запуска игр в steam на карте nvidia primus (особенно 32-х разрядный) обязателен к установке! Чтобы игра стартовала через primus необходимо в свойствах запуска игры в steam прописать следующее:
primusrun %command%
где %command% переменная (не надо ее менять на команду запуска игры), steam сам подставит нужную команду.
Запуск nvidia-settings с установленным bumblebee :
optirun nvidia-settings -c :8
или
primusrun nvidia-settings -c :8
Ссылки
- Тема на форуме
- nvidia
- https://fedoraproject.org/wiki/Bumblebee
- http://nouveau.freedesktop.org/wiki/Optimus/
- http://steamcommunity.com/app/221410/discussions/6/846939854395110175