Equipo con dos tarjetas gráficas en gentoo. Optimus Machine.

¿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.

Share

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image