¿Que es un pc optimus machine?
Un PC Optimus Machine son aquellos equipos portatiles que tienen 2 tarjetas gráficas. Una de ellas de baja calidad de procesamiento y la otra bastante mayor. La que se encarga de procesar los gráficos es la tarjeta de mayores prestaciónes y una vez procesados, los envia a la tarjeta más pequeña para que los muestre por pantalla. La tarjeta superior no tiene conectada a ella una pantalla, simplemente se usa para el procesamiento gŕafico.
Dicho esto, os facilito los pasos necesarios para hacer funcionar una máquina optimus machine en Gentoo. Empezamos:
En el kernel, seleccionar la opción de modesetting para el modulo de intel:
——————————————————————————————————————
DeviceDrivers --->
Graphics Support --->
Direct Rendering Manager --->
Direct Rendering Manager (Xfree86 4.1.0 and higher DRI support) --->
<*> Intel 8xx/9xx/G3x/G4x/Hd Graphics
[*] Enable modesetting on intel by default
——————————————————————————————————————
Añadir el modulo del kernel ‘nouveau’ y ‘nvidia’ a la lista de blacklist para que systemd o openrc evite cargarlo al inicio:
# Para sytemd:
——————————————————————————————————————
echo "blacklist nouveau" >> /etc/modules-load.d/blacklist.conf
echo "blacklist nouveaufb" >> /etc/modules-load.d/blacklist.conf
echo "blacklist rivafb" >> /etc/modules-load.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modules-load.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modules-load.d/blacklist.conf
——————————————————————————————————————
# Para Openrc:
——————————————————————————————————————
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveaufb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist rivafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
——————————————————————————————————————
Habilitamos la versión testing para los paquetes que se encargan de los gráficos:
——————————————————————————————————————
echo "x11-apps/xrandr ~amd64" >> /etc/portage/package.keywords
echo "x11-base/xorg-server ~amd64" >> /etc/portage/package.keywords
echo "x11-proto/inputproto ~amd64" >> /etc/portage/package.keywords
echo "x11-drivers/nvidia-drivers ~amd64" >> /etc/portage/package.keywords
echo "x11-drivers/xf86-input-evdev ~amd64" >> /etc/portage/package.keywords
echo "x11-drivers/xf86-input-synaptics ~amd64" >> /etc/portage/package.keywords
echo "x11-drivers/xf86-video-modesetting ~amd64" >> /etc/portage/package.keywords
——————————————————————————————————————
Hacemos emerge de todos esos paquetes
——————————————————————————————————————
emerge x11-apps/xrandr && emerge -1 xf86-video-modesetting && emerge -1 $(qlist -IC x11-drivers)
——————————————————————————————————————
Colocar, el siguiente contenido en /etc/gdm/Init/Default:
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
Seleccionamos con eselect opengl la opción de nvidia:
eselect opengl list:
——————————————————————————————————————
Available OpenGL implementations:
[1] nvidia
[2] xorg-x11 *
——————————————————————————————————————
eselect opengl set 1
Switching to nvidia OpenGL interface… done
En /etc/X11/xorg.conf insertamos todo esto:
——————————————————————————————————————
Section "ServerLayout"
Identifier "layout"
Screen 0 "nvidia"
Inactive "intel"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "
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.
EndSection
Section "Device"
Identifier "intel"
Driver "modesetting"
BusID "
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
——————————————————————————————————————
Sustituimos BUS_ID_INTEL_CARD por el ID de la tarjeta gráfica INTEL. Para averiguar el PCI ID podemos hacerlo con:
lspci | grep VGA
El comando en mi caso, devuelve:
——————————————————————————————————————
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
——————————————————————————————————————
Quedaria:
———————-
Section «Device»
Identifier «intel»
Driver «modesetting»
BusID «PCI:0:2:0»
EndSection
———————-
Y para la tarjeta gráfica NVIDIA, podemos ver cual es el PCI ID, con:
lspci | grep NVIDIA
Devolveria:
——————————————————————————————————————
04:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (rev a1)
——————————————————————————————————————
Quedaria en el xorg.conf:
——————————————————————————————————————
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "PCI:4:0:0"
EndSection
——————————————————————————————————————
Una vez realizado todo lo anterior, solamente quedaria instalar el software que realizará el proceso de intercambio de gráficos entre las 2 tarjetas, se llama ‘bumblebee’.
Lo instalamos con:
emerge bumblebee
Añadimos nuestro usuario al grupo bumblebee:
usermod -a -G bumblebee
Arrancamos el servicio ‘bumblebeed’ al inicio:
# Para SystemD
systemctl enable bumblebeed
# Para openRC
rc-update add bumblebeed default
Una vez realizados estos pasos, para ejecutar software y que bumblebeed ponga a trabajar las 2 tarjetas se hace con:
optirun aplicacion
Por ejemplo:
optirun glxgears
Llegados a este punto ya tendriamos nuestra máquina funcionando con las dos tarjetas gráficas.