Как я победил NVIDIA Optimus

Модератор: adventurer


Автор темы
count0
Сообщения: 27
Зарегистрирован: 27 авг 2013, 00:41

Как я победил NVIDIA Optimus

#1

Сообщение count0 » 19 июл 2015, 16:50

В-общем год назад купил я ноут Acer E1-570G. С Линуксом знаком был не 1й год, поэтому не думал, что будут какие-то проблемы с настройкой железа.
Но не тут-то было. NVIDIA преподнесла большую свинью в виде некорректной работы своей технологии переключения видеокарт в ОС Линукс. Точнее они просто решили не встраивать поддержку в свой драйвер так, чтобы человек без образования программиста мог ей воспользоваться.
Для тех кто не сталкивался: такие ноутбуки (с наклейкой Optimus) имеют 2 видюхи: Intel (которая встроена в процессор и подключена к видеовыходам) и NVIDIA, которая может заниматься обсчетом 3D, а может и не заниматься. Но прямого выхода на дисплей не имеет. Поэтому нельзя просто поставить драйвер, написать в xorg.conf везде "nvidia" и получить постоянное включенное ускорение. Будет просто черный экран, хотя ошибок особо нет.
На некоторых ноутах можно так сделать через BIOS, но скорее всего не на Вашем, мой дорогой читатель.
Поэтому приходится хитрить. Ни одно руководство толком не объясняло как всё делать.
1. Качаем драйвер с оф. сайта: http://www.nvidia.com/object/linux-display-archive.html
Лучше сразу несколько версий, и почитать заранее, поддерживается ли ваша видеокарта. Т.к. он может поставиться, а после перезагрузки получите в

Код: Выделить всё

/var/log/Xorg.0.log
"GPU not supported". У меня сейчас стабильно работает версия 331.113 версия Xorg - 1.15.1, видюха Geforce 820m.
2. Переходим в консоль по Ctrl+Alt+F1, логинимся под рутом. Делаем

Код: Выделить всё

killall lxdm
или

Код: Выделить всё

killall lightdm
, смотря какой менеджер входа установлен. А затем

Код: Выделить всё

apt-get remove nvidia*
.
3. Заходим через mc в папку со скачанным драйвером, если он не помечен как исполняемый, делаем на него

Код: Выделить всё

chmod +x ./NVIDIA-Linux-x86-331.113.run

4. Запускаем, соглашаемся с лицензией, соглашаемся зарегить модуль ядра в dkms (чтобы когда вы обновитесь, модуль пересобрался. Но не факт что он будет работать с будущими версиями ядра! У меня сейчас 3.16.0-36-generic). Минут через 5 всё воткнется. У Вас должны быть установлены linux-headers-generic, или заголовки для вашего ядра ДО установки дров. Проверить, стоят ли они можно так:

Код: Выделить всё

aptitude search linux-headers | more
. Если буква i напротив пакета - значит установлен. Листать список пробелом.
5. Читаем лог установки, где он сохранен драйвер скажет в конце, перепишите на бумажку, если он отличается от указанного мной и сделайте

Код: Выделить всё

cat /var/log/nvidia-installer.log | more
Если всё ок, заканчиваться он должен так:
Installation of the kernel module for the NVIDIA Accelerated Graphics Driver for Linux-x86 (version 331 .113) is now complete.

Если будет что-то про unable to build или error, значит модуль не собрался, постите этот лог сюда.
5а. Что же делать если старый драйвер вы удалили, а новый не встал, и после перезагрузки черный экран? Всё просто, делаете

Код: Выделить всё

apt-get install nvidia-current
, и на всякий случай

Код: Выделить всё

rm /etc/X11/xorg.conf
. После перезагрузки опять получите свой рабочий стол без 3Д ускорения, за которое заплачены денежки.

6. Допустим проприетарный драйвер с сайта разработчика Вы поставили с горем пополам, увидели в Xorg.0.log что он успешно загрузился, и теперь желаете поиграть. Но не тут-то было! Это же Оптимус! Ваши приключения только начинаются.
------------------------------------
7. Ставим

Код: Выделить всё

apt-get install bumblebee
, делать всё можно уже в Иксах, не в черной консоли. Если попросит что-то доставить - соглашайтесь. Primus устанавливать НЕ НАДО! Т.к. он создает xorg.conf, который типа должен помочь переключать видюхи из админки NVIDIA, но из-за бага это всё или не работает, или работает криво, а исправлять его не торопятся. И вообще примус - это другая песня. Если случайно поставили - удаляйте primus, а потом

Код: Выделить всё

/etc/X11/xorg.conf
. Да, если забыли где лежит какой-то файл в Вашей системе, есть чудесная команда "locate имя_файла".
8. Правим конфиг

Код: Выделить всё

/etc/bumblebee/bumblebee.conf
, меняем следующие строки:

Код: Выделить всё

# В начале файла должно быть
Driver=nvidia
# В секции [driver-nvidia], ближе к концу
KernelDriver=nvidia

Есть ещё в папочке

Код: Выделить всё

/etc/bumblebee/
файл xorg.conf.nvidia, его содержание должно быть примерно такое:
 

Код: Выделить всё

Section "ServerLayout"
    Identifier  "Layout0"
    Option      "AutoAddDevices" "true"
    Option      "AutoAddGPU" "true"
EndSection

Section "Device"
    Identifier  "DiscreteNvidia"
    Driver      "nvidia"
    VendorName  "NVIDIA Corporation"

#   If the X server does not automatically detect your VGA device,
#   you can manually set it here.
#   To get the BusID prop, run `lspci | egrep 'VGA|3D'` and input the data
#   as you see in the commented example.
#   This Setting may be needed in some platforms with more than one
#   nvidia card, which may confuse the proprietary driver (e.g.,
#   trying to take ownership of the wrong device). Also needed on Ubuntu 13.04.

 BusID "PCI:01:00:0"

#   Setting ProbeAllGpus to false prevents the new proprietary driver
#   instance spawned to try to control the integrated graphics card,
#   which is already being managed outside bumblebee.
#   This option doesn't hurt and it is required on platforms running
#   more than one nvidia graphics card with the proprietary driver.
#   (E.g. Macbook Pro pre-2010 with nVidia 9400M + 9600M GT).
#   If this option is not set, the new Xorg may blacken the screen and
#   render it unusable (unless you have some way to run killall Xorg).
    Option "ProbeAllGpus" "false"

    Option "NoLogo" "true"
    Option "UseEDID" "false"
    Option "UseDisplayDevice" "none"
    Option  "Coolbits" "1"
    Option  "RegistryDwords" "PowerMizerEnable=0x0; PerfLevelSrc=0x2222; PowerMizerLevel=0x1; PowerMizerDefault=0x1; PowerMizerDefaultAC=0x1"
Option "TripleBuffer" "True"
Option "DynamicTwinView" "False"
Option "BackingStore" "True"
Option "RenderAccel" "True"
Option "DamageEvents" "True"
Option "PixmapCacheSize" "1024000"
Option "AddARGBGLXVisuals" "True"
Option "AllowIndirectPixmaps" "True"
EndSection

9. Перезапускаем службу

Код: Выделить всё

service bumblebeed restart
и смотрим в системный лог:

Код: Выделить всё

tail -n 50 -f /var/log/syslog
, а потом в
10. Если всё ок, то там должно быть:
Jul 19 20:03:42 term bumblebeed[2314]: Received Terminated signal.
Jul 19 20:03:42 term bumblebeed[3446]: /usr/sbin/bumblebeed 3.2.1 started

в dmesg может быть такое, это не страшно, баг в acpi:
[ 9131.154259] ACPI Warning: \_SB_.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20140424/nsarguments-95)
[ 9131.264724] vgaarb: this pci device is not a vga device

Если что-то страшное про Could'not initialize adapter, и т.п., постите сюда. Скорее всего ваша версия дров NVIDIA некорректно работает с ядром или вашей версией bumblebee. Проверить загружен ли модуль nvidia можно так:

Код: Выделить всё

lsmod | grep nvidia
. Должно быть 2 строчки с надписью nvidia. Если нет ни 1й, значит модуль ядра не загрузился, пробуйте сделать

Код: Выделить всё

modprobe nvidia
из-под рута. Если ругнется - значит нет такого модуля, т.е. он не собрался на этапе установки, а Вы это прощелкали.
11. Ну что, готовы? Любите пчелку bumblebee и разрабов NVIDIA? Я тоже бы их, без вазелина отлюбил... Делайте

Код: Выделить всё

optirun glxgears
в консоли, если колесики крутятся - значит какое-то 3д-ускорение у вас есть. Но не обольщайтесь, это ещё не всё!
12. Если в консоли присутствует надпись
[VGL] WARNING: The OpenGL rendering context obtained on X display
[VGL] :8 is indirect, which may cause performance to suffer.
[VGL] If :8 is a local X display, then the framebuffer device
[VGL] permissions may be set incorrectly.
Context is Indirect

Это значит, что ваша видеокарта рендерит через процессор и работает раза в 2 медленнее, чем могла бы! Круто, да? А почему так происходит? Да потому что права на видеоадаптер

Код: Выделить всё

ls -la /dev/nvidia*
стоят такие: root vglusers
И надо добавить всех пользователей, которые хотят поиграть в группу vglusers так:

Код: Выделить всё

usermod -a -G vglusers имя_пользователя
, а потом перезагрузиться, чтобы изменения вступили в силу.
И снова в консоли сделать

Код: Выделить всё

optirun glxgears
или

Код: Выделить всё

optirun glxspheres
, для разнообразия. И убедиться что fps бодрый. У меня на сферах почти во весь экран получается около 140 fps, на шестерёнках около 900 FPS при результате в 3dmark2006 около 7000 попугаев. Fallout New Vegas летает, даже если быстро бегать :Yahoo!: А когда было Indirect rendering - играть было невозможно.
13. И как теперь поиграть? Очень просто. Дописываете к ярлычку игры, который создаст wine фразу optirun. Например так выглядит ярлык fallout-a:
Exec=env WINEPREFIX="/home/black/.wine" optirun wine E:\\\\Games\\\\FalloutNewVegas\\\\FalloutNV.exe

Если игру хочется запустить через Лаунчер, тот тут может быть облом, т.к. optirun запустит Лаунчер с 3Д ускорением, а все последующие процессы - уже нет. Чтобы этого избежать, надо запускать Консоль через optirun. Например так:

Код: Выделить всё

optirun bash
в терминале, типа lxterminal или gnome-terminal, а потом в ней уже

Код: Выделить всё

wine E:\\\\Games\\\\FalloutNewVegas\\\\FalloutNVLauncher.exe

Если какие-то непонятки с bumblebee, мол работало только что, вышел из игры и перестало (его иногда может клинить, хотя с этой версией драйвера всё ок), то просто перезапускаете его

Код: Выделить всё

service bumblebeed restart
. В тяжелых случаях - вкл/выкл весь ноут.
-------------------------------------
Сделано всё в Lubuntu 14.04.2, но должно работать и в 12.04. Если есть вопросы - задавайте, на логах собаку съел пока разбирался со всем этим. А я пойду поисследую Пустоши New Vegas-a пока Fallout 4 не вышел ))
P. S. Да, если ноут внезапно выключится - перегревается. Штатная система охлаждения не вывозит, надо ей помочь охлаждающей подставкой, или вентилятором, который будет дуть под приподнятое брюшко ноута. Чтобы не ждать пока он полночстью остынет - надо отключить питание и дернуть туда-обратно батарею.
Все, у кого заработает - пишите сколько у Вас fps на сферах и шестеренках и какая видюха, померяемся :beer:
Последний раз редактировалось count0 20 июл 2015, 00:03, всего редактировалось 1 раз.

Аватара пользователя

zhart
Администратор
Сообщения: 1599
Зарегистрирован: 16 дек 2010, 13:09
Контактная информация:

Re: Как я победил NVIDIA Optimus

#2

Сообщение zhart » 19 июл 2015, 22:19

count0, серьезный мануал, браво :Bravo:

Аватара пользователя

adventurer
Супермодератор
Сообщения: 2912
Зарегистрирован: 15 июн 2011, 18:24

Re: Как я победил NVIDIA Optimus

#3

Сообщение adventurer » 19 авг 2015, 13:02

Переместил тему в раздел "How-To и FAQ".


Вернуться в «How-To и FAQ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость