O problema era com libGL.so.1 - aparentemente, o instalador da Nvidia também removeu o Intel e o substituiu por seu próprio.
Então eu peguei de libgl1-mesa-glx e mudei o symlink em / usr / lib para apontar para ele.
Eu não vou entrar em detalhes sobre como configurar o Bumblebee, mas há algumas partes importantes que estão faltando e que não estão realmente documentadas:
-
O instalador do driver Nvidia provavelmente destruirá seu libglx.so existente (em / usr / lib / xorg / modules / extensions) e libGL.so (em / usr / lib). Retroceda-os antes de instalar o driver. Se você já os perdeu, você poderia recuperá-los resintalling xserver-xorg-core e libgl1-mesa-glx, mas quando tentei pela primeira vez, ele deixou meu laptop em um estado ruim (tela preta após o login, tive que ir para a recuperação), então eu recomendo obtê-los manualmente via dpkg-deb.
-
Depois de instalar o driver da Nvidia, você notará que a Nvidia substituiu os dois arquivos listados acima por links simbólicos para as bibliotecas da Nvidia. No meu caso, por exemplo, libglx.so é um link simbólico para libglx.so.304.22.
-
Como o Bumblebee precisa dos dois drivers, e como ele só pode diferenciar por diretório, deixe os drivers de movimento de cada adaptador gráfico em um diretório separado. O instalador da Nvidia que eu usei instalou alguns drivers em / usr / lib / nvidia-current, vamos usar isso. Tenha em mente que precisamos separar bibliotecas e módulos Xorg. Aqui estão onde eu coloquei os arquivos relevantes:
Em / 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
Em / 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
Em / 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)
Em / usr / lib / nvidia-current / xorg:
libglx.so -- symlink to /usr/lib/xorg/modules/extensions/libglx.so.304.22
Em / 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
Finalmente, precisamos modificar o /etc/bumblebee/bumbleebee.conf para informar ao sistema onde encontrar os drivers da Nvidia. Eu estou usando o driver nvidia (em oposição ao nouveau), então na seção nvidia, eu estou usando isso:
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
Observe como o LibraryPath e o XorgModulePath apontam para os drivers da Nvidia, portanto, se o Bumblebee estiver procurando por eles, ele os encontrará. Se o Unity estiver procurando por eles, ele irá procurar em / usr / lib e / usr / lib / xorg / modules / extensions, e nós nos certificamos que esses links simbolizem os não-Nvidia.
Isso é possivelmente um pouco desajeitado em alguns lugares, mas o que posso dizer? Funciona perfeitamente:
O Unity 3D funciona com efeitos completos de desktop, e eles são rápidos, mas ainda usam o chipset Intel lento e que economiza energia. A aceleração 3D normal está disponível para aplicativos como o VirtualBox. optirun funciona, e eu tenho a opção de executar "glxspheres" (a ~ 60 fps) ou "optirun glxspheres" (a ~ 120 fps).