Cómo integrar una NVIDIA Pascal en Ubuntu Unity
Hoy os vamos a mostrar cómo configurar una NVIDIA Pascal (GTX 1000) para que funcione sin problemas en Ubuntu Unity (aunque esto no quiere decir que lo explicado aquí no pueda funcionar con otras generaciones de GPU NVIDIA). Este tutorial va dirigido sobre todo a gamers (a quienes casi siempre les beneficia tener el driver más nuevo) y personas que usan una gráfica muy reciente que no está bien soportada por el driver ofrecido desde los repositorios de Canonical.
Por unas razones u otras, Unity no es muy amigable con los drivers que no son suministrados por Canonical. Con Mesa, si se instala la versión más reciente a través de Xorg-Edgers, el usuario podrá ver cómo el stack gráfico pierde estabilidad, aunque por suerte sin afectar a la usabilidad. Con el blob de NVIDIA la situación es algo peor, ya que si se instala una versión procedente de GPU Drivers el usuario podrá ver cómo el tearing puede terminar apoderándose del entorno, ofreciendo una experiencia realmente desagradable.
¿Cómo corregir los graves problemas de tearing que pueden terminar provocando las versiones del driver de NVIDIA que no son suministradas por Canonical? Es lo que intentaremos explicar a través de este especial.
Instalación del Gestor de configuración CompizConfig
El primer paso es instalar el Gestor de configuración CompizConfig o CompizConfig Settings Manager desde el gestor de paquetes. Aquí, con el fin de ofrecer una solución genérica, mostraremos la instalación mediante consola.
sudo apt-get install compizconfig-settings-manager
Configuración de Compiz y NVIDIA para evitar el tearing
Una vez instalado el Gestor de configuración CompizConfig, cambiaremos la configuración de las secciones OpenGL y Composite.
La sección de OpenGL la dejamos de la siguiente manera, inhabilitando todos los checkbox y configurando el Filtro de Textura a Rápido.
Mientras que la sección Composite tiene que quedar de la siguiente manera, destacando la activación de la opción Forzar el pintado de salida independiente.
Por su parte, en el panel de control de NVIDIA hay que dirigirse a la sección OpenGL Settings, que tiene que quedar de la siguiente manera, destacando la Configuración de Imagen (Image Settings) a Alto Rendimiento (High Performance).
Con estas configuraciones, todas realizadas a través de interfaz gráfica, el usuario tendría que poder usar el driver oficial de NVIDIA que crea conveniente con Unity 7.
Un extra para los gamers
Sí, hemos resuelto el problema a nivel del escritorio, pero, ¿qué pasa con los juegos? Este paso también puede ser prescindible según los juegos que se use, sin embargo, es importante tener en cuenta que la sincronización vertical no funciona bien en algunos juegos, como Pillars of Eternity.
Lo que vamos a hacer es forzar el Full Composite Pipeline desde el mismo servidor Xorg para paliar este problema, algo para lo cual necesitamos crear el fichero xorg.conf.
sudo nvidia-xconfig
Tras la creación del fichero procedemos a abrirlo:
sudo nano /etc/X11/xorg.conf
Después hay que añadir la siguiente línea en la sección Screen:
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
El código del fichero tendría que ser parecido o igual al siguiente. Resaltamos la línea a añadir en la sección Screen, que es a fin de cuentas lo único que realmente cuenta en este tutorial.
# nvidia-xconfig: X configuration file generated by nvidia-xconfig # nvidia-xconfig: version 378.09 (buildmeister@swio-display-x86-rhel47-04) Sat Jan 14 22:12:34 PST 2017 Section "ServerLayout" Identifier "Layout0" Screen 0 "Screen0" InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Mouse0" "CorePointer" EndSection Section "Files" EndSection Section "InputDevice" # generated from default Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/psaux" Option "Emulate3Buttons" "no" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" # generated from default Identifier "Keyboard0" Driver "kbd" EndSection Section "Monitor" Identifier "Monitor0" VendorName "Unknown" ModelName "Unknown" HorizSync 28.0 - 33.0 VertRefresh 43.0 - 72.0 Option "DPMS" EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }" EndSection
Como “cortesía” de la comunidad de ArchLinux, también se puede probar la siguiente configuración en la sección Screen del fichero /etc/X11/xorg.conf, añadiendo el Triple Buffering (TripleBuffer) e inhabilitando el protocolo indirecto de GLX (AllowIndirectGLXProtocol):
Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }" Option "AllowIndirectGLXProtocol" "off" Option "TripleBuffer" "on" EndSection
¿Qué pasa si mi Ubuntu no reconoce el fichero xorg.conf?
Sin embargo, posiblemente en versiones más recientes de Ubuntu el fichero xorg.conf está ignorado, así que como alternativa se puede recurrir al siguiente comando desde consola:
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
O también desde el panel de control de NVIDIA en la sección X Server Display Configuration, desplegando las opciones avanzadas y pulsar Aplicar (Apply) tras seleccionar la opción Force Full Composition Pipeline.
Pero como este método requiere ser realizado cada vez que se inicia sesión, lo que haremos será coger el comando de consola mostrado antes e introducirlo en un script con permisos de ejecución:
nano ~/.nvidiaextra.sh
Después de crear y abrir el fichero, introducimos en él el comando de consola:
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
Guardamos los cambios, salimos del fichero y le otorgamos permisos de ejecución:
chmod a+x ~/.nvidiaextra.sh
Ahora toca abrir la aplicación Aplicaciones de inicio en Ubuntu.
Luego pulsar sobre el botón Añadir, establecer un nombre para el proceso que ejecutará el script en el inicio de sesión y pulsar sobre el botón Examinar.
Dirigirse a la ubicación del script mostrando los ficheros ocultos con el botón secundario del ratón, seleccionarlo y pulsar sobre el botón Añadir.
Tras esto, con solo reiniciar sesión se tendría que activar el Full Composite Pipeline.