Как заставить Unity 3D работать с Bumblebee на чипсете Intel

У меня есть ноутбук Sony VAIO S с ужасным Optimus, и, наконец, мне удалось заставить Bumblebee полностью работать на Ubuntu 12.04, чтобы я мог использовать как аппаратное ускорение чипсета Intel, так и Nvidia через optirun и / или bumble-app. -Settings.

Тем не менее, эффекты рабочего стола не работают. Но они должны, я смутно помню, что они работали некоторое время, прежде чем я установил Шмель.

Вот что я получаю с помощью теста поддержки:

:~$ /usr/lib/nux/unity_support_test -p
Xlib:  extension "NV-GLX" missing on display ":0".
OpenGL vendor string:   Tungsten Graphics, Inc
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile 
OpenGL version string:  1.4 (2.1 Mesa 8.0.2)

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  no
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       no

Прежде всего, я немного сомневаюсь, что чипсет не поддерживает VBO (по сути, стандартная функция в GL).

Ни Xorg.0.log, ни Xorg.8.log не показывают каких-либо конкретных ошибок.

Что касается драйверов Nvidia: чтобы заставить их работать, мне пришлось установить драйверы 304.22 (старые не будут работать). Они закрыли libglx.so, поэтому я восстановил xserver-xorg-core libglx.so на прежнем месте, переместил libglx.so от Nvidia в папку, специфичную для nvidia, и указал эту папку в bumblebee.config. Кажется, это работает и не должно вызывать проблемы, которую я вижу здесь.

Ради интереса я попытался использовать чипсет Nvidia для Unity, но это тоже не получилось:

~$ optirun /usr/lib/nux/unity_support_test -p
OpenGL vendor string:   NVIDIA Corporation
OpenGL renderer string: GeForce GT 640M LE/PCIe/SSE2
OpenGL version string:  4.2.0 NVIDIA 304.22

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  no
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       no

1 ответ

Решение

Проблема была с libGL.so.1 - очевидно, установщик Nvidia также удалил Intel и заменил его собственным.

Поэтому я получил его из libgl1-mesa-glx и изменил символическую ссылку в / usr / lib, чтобы она указала на него.

Я не буду вдаваться в детали того, как настроить Bumblebee, но есть некоторые ключевые части, которые отсутствуют, которые на самом деле не задокументированы:

  1. Установщик драйвера Nvidia может уничтожить ваши существующие libglx.so (в /usr/lib/xorg/modules/extensions) и libGL.so (в /usr/lib). Сделайте резервную копию перед установкой драйвера. Если вы уже потеряли их, вы можете вернуть их, повторно установив xserver-xorg-core и libgl1-mesa-glx, но когда я попробовал это в первый раз, он оставил мой ноутбук в плохом состоянии (черный экран после входа в систему, пришлось зайдите в recovery), поэтому я бы порекомендовал получить их вручную через dpkg-deb.

  2. После установки драйвера Nvidia вы заметите, что Nvidia заменила два файла, перечисленных выше, символическими ссылками на библиотеки Nvidia. В моем случае, например, libglx.so является символической ссылкой на libglx.so.304.22.

  3. Поскольку шмелю нужны оба драйвера, и поскольку он может различаться только по каталогам, давайте перенесем драйверы для каждого графического адаптера в отдельный каталог. Установщик Nvidia, который я использовал, установил некоторые драйверы в /usr/lib/nvidia-current, давайте использовать это. Имейте в виду, что нам нужно разделить библиотеки и модули Xorg. Вот где я размещаю соответствующие файлы:

В /usr/lib:

libGL.so.304.22   -- Nvidia's driver (unchanged where the installer put it)
libGL.so          -- symlink to libGL.so.1
libGL.so.1        -- symlink to /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1,
                     i.e. the libgl1-mesa-glx driver

В /usr/lib/x86_64-linux-gnu/mesa:

libGL.so.1   -- symlink to libGL.so.1.2
libGL.so.1.2 -- The normal driver from libgl1-mesa-glx 

В /usr/lib/nvidia-current:

libGL.so   -- symlink to libGL.so.1
libGL.so.1 -- symlink to /usr/lib/libGL.so.304.22 (i.e. Nvidia's driver)

В /usr/lib/nvidia-current/xorg:

libglx.so -- symlink to /usr/lib/xorg/modules/extensions/libglx.so.304.22

В /usr/lib/xorg/modules/extensions:

libglx.so.1       -- symlink to libglx.so.xserver
libglx.so.304.22  -- Nvidia's driver (unchanged from where the installer put it)
libglx.so.xserver -- I renamed the original libglx.so to that and put it here

Наконец, нам нужно изменить /etc/bumblebee/bumbleebee.conf, чтобы сообщить системе, где найти драйверы Nvidia. Я использую драйвер nvidia (в отличие от nouveau), поэтому в разделе nvidia я использую это:

KernelDriver=nvidia
Module=nvidia
PMMethod=auto
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/nvidia-current:/usr/lib32/nvidia-current
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia-current/xorg,/usr/lib/xorg/modules

Обратите внимание, как LibraryPath и XorgModulePath указывают на драйверы Nvidia, поэтому, если Шмель их ищет, он их найдет. Если Unity их ищет, он будет искать в / usr / lib и / /usr/lib/xorg/modules/extensions, и мы убедились, что эти ссылки связаны с не-Nvidia.

Это может быть немного неуклюже в некоторых местах, но что я могу сказать? Работает отлично:

Unity 3D работает с эффектами рабочего стола, и они молниеносны, но все еще используют энергосберегающий медленный чипсет Intel. Нормальное 3D-ускорение доступно для таких приложений, как VirtualBox. optirun работает, и у меня есть выбор: запустить "glxspheres" (при ~60 fps) или "optirun glxspheres" (при ~120 fps).

Другие вопросы по тегам