Когда NVIDIA Optimus появился для Linux, Optimus там на самом деле не было, Смотрим конфиг:
Section "ServerLayout"
Identifier "layout"
Screen 0 "nvidia"
Inactive "intel"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "<BusID for NVIDIA device here>"
EndSection
Section "Screen"
Identifier "nvidia"
Device "nvidia"
# Uncomment this line if your computer has no display devices connected to
# the NVIDIA GPU. Leave it commented if you have display devices
# connected to the NVIDIA GPU that you would like to use.
#Option "UseDisplayDevice" "none"
EndSection
Section "Device"
Identifier "intel"
Driver "modesetting"
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
Получается что Intel отключен и используется только для вывода картинки с NVIDIA. А должно быть так: когда нагрузки мало, используется Intel и экономится батарея, а когда нагрузки много - включается NVIDIA. Можно только догадываться почему так. У меня есть версия.
Единственный поддерживаемый официально способ установить драйвер NVIDIA - установка из run-файла. RUN-файл, если кто-то не знает, это такой самораспаковывающийся архив. За 10 лет существования инсталлятор претерпел мало изменений (одно из недавних изменений - поддержка DKMS). Он тупо затирает системный OpenGL (/usr/lib/libGL.so.1) и копирует свой. При удалении (ключ --uninstall) инсталлятор возвращает прежний OpenGL из резервной копии. Это главный момент моей версии, которая будет ниже. Но есть и не главный: раньше инсталлятор также устанавливал заголовочные файлы (/usr/include/GL), но так как уже давно во всех стандартах в линуксе обязана быть установлена Mesa OpenGL, инсталлятор NVIDIA больше этого не делает. И то же самое пора бы делать с самой библиотекой. Речь об этом пойдёт ниже.
Таким образом, поддержку 3D-ускорения на компьютере с технологией Optimus получает либо Intel, либо NVIDIA. В зависимости от того, какой libGL.so.1 лежит в /usr/lib. Именно поэтому реализовать полноценный Optimus невозможно: представьте себе что разработчики NVIDIA оставили только свой OpenGL, а Intel оставили в режиме 2D. Народ бы не понял. Поэтому было сделано то, что сделано.
Но есть и неофициальные инсталляторы. Это пакеты из дистрибутивов Linux. Давайте посмотрим список файлов RPM-пакета для openSUSE (ссылка, tar.gz 9 Кб). Mesa OpenGL не затирается, так как NVIDIA OpenGL лежит здесь: /usr/lib/X11R6/lib/libGL.so.1. Если в такой системе взять любую 3D-игру и сделать ldd на её бинарнике, то будет не:
libGL.so.1 => /usr/lib64/libGL.so.1
а:
libGL.so.1 => /usr/X11R6/lib64/libGL.so.1
Путь до OpenGL был изменён где-то в системных настройках. То есть получается, что в одной системе всё-таки могут быть установлены и Mesa OpenGL, и NVIDIA OpenGL! Но так как официальный инсталлятор NVIDIA так не делает, то настоящего Optimus'а мы до сих пор не имеем.
P.S. А вот драйвер ATi/AMD официально предоставляет RPM/DEB, и его OpenGL лежит в /usr/X11R6/lib/fglrx/libGL.so.1. Заметьте, они создали отдельный каталог для своего OpenGL, то есть в этом /usr/X11R6 может лежать сколько угодно OpenGL. Также там есть программа switchGL, которая переключает системный OpenGL с MESA на AMD и обратно. Но к сожалению, приходится перезагружать графическую оболочку.
P.P.S. На Gentoo переключение OpenGL существовало ещё раньше, чем у AMD. «eselect opengl list», «eselect opengl set nvidia». А ldd на файлик игры выдаёт такой путь:
libGL.so.1 => /usr/lib64/opengl/nvidia/lib/libGL.so.1