Mi nombre es Fernando Briano y soy programador.

Dos monitores: Twinview con NVidia en ArchLinux

NVIDIA - ArchLinux

NVIDIA - ArchLinux

Hace un tiempo adquirí un segundo monitor. Tengo una placa de video Nvidia GeForce GT 430. Esta placa tiene una salida Dual Link DVI-I (así como también Dual Link HDMI), lo que permite conectar simultáneamente dos monitoresa la placa. También podemos conectar un monitor a la salida DVI, y otro a la salida VGA.

Al momento de conectar los dos monitores, llegó el momento de configurarlos. Siempre que se quiere configurar algo nuevo en ArchLinux, el mejor lugar para empezar es su wiki. En lo que respecta a múltiples monitores nos dice que tenemos que configurar el archivo:

/etc/X11/xorg.conf.d/10-monitor.conf

No se preocupen si no tienen este archivo creado, pueden hacerlo manualmente y funciona. Ahí hay que agregar por cada monitor una entrada Monitor, Device y Screen Section y la sección ServerLayout que los gestiona.

También hay que saber que Nvidia soporta dos modos para múltiples monitores: Xinerama y Twinview. En primer lugar usé Xinerama, pero esto tiene una desventaja. El driver de Nvidia no soporta la la extensión Composite con Xinerama activado. Composite es lo que usan Compiz, Kwin y otros manejadores de ventana para hacer los efectos que tanto nos gustan. Además hay que decir que el rendimiento del manejador de ventanas es mayor con Composite activado.

Visto esto, intenté usar Twinview. Al principio tenía un problema: cada pantalla trabataba el entorno de escritorio de manera independiente. Esto quiere decir que no podía mover ventanas de un monitor a otro, y se sentía como dos ambientes diferentes. Si ejecutaba una aplicación a la derecha, no podía moverla a la izquierda, etc.

Toqueteando un poco las configuraciones encontré que sí estaba soportado esto de compartir ventanas entre dos monitores. Básicamente tenemos dos “escritorios” pero podemos pasar ventanas de uno a otro. En verdad cada escritorio tiene una representación en cada pantalla. Así también, cada uno tiene sus paneles y fondo de escritorio independiente.

En mi caso agregué un panel a cada uno. También agregué un gestor de tareas y lo configuré para que solo muestre aplicaciones de ese escritorio y de esa pantalla. Les dejo una captura de pantalla de cómo se ven los dos monitores. El de la izquierda tiene una resolución de  1440×900 y el de la derecha 1366×768:

Archlinux 2 monitores

Archlinux 2 monitores

Juegos a pantalla completa con dos monitores

Hasta acá todo venía bien de bien, pero surgió un problema a la hora de jugar. Muchos juegos agarran toda la pantalla para el modo de pantalla completa. Esto lo hace bastante incómodo, porque tenemos un desfasaje de unos centímetros en el medio de la pantalla, en la separación física de los dos monitores.

Shank - 2 monitores sin MetaModes

Shank - 2 monitores sin MetaModes

La solución que encontré tras investigar un poco son los Metamodes:

Los MetaModos son “contenedores” que guardan información sobre qué modo debería ser usado en cada dispositivo en cualquier momento dado. Incluso si solo una pantalla está en uso, el driver de X NVIDIA siempre usa un Metamodo para encapsular la información del modo por dispositivo de pantalla, para que pueda soportar dinámicamente la habilitación de TwinView.

En la sintaxis de MetaModos, los modos están separados por comas, y varios MetaModos se separan por punto y coma. Por ejemplo:

nombre modo 0, nombre modo 1; nombre modo 2, nombre modo 3;

Poner NULL en uno de los MetaModos hace que al entrar en esa resolución en una de las pantallas, la otra se apague, quedando solamente esa activa. Como quería jugar los juegos a pantalla completa en mi monitor de 1440×900, escribí lo siguiente:

Option         "MetaModes"  "1440x900,1366x768; 1440x900,NULL"

Con las teclas Ctrl Alt +, cambiamos de un meta modo a otro. De todas formas, algunos juegos intentan usar la resolución del metamodo y la placa automáticamente apaga el monitor que sobra:

Shank - 2 monitores con MetaModes

Shank - 2 monitores con MetaModes

Dejo la configuración de mi archivo 10-monitor.conf en /etc/X11/xorg.conf.d como referencia:

Section "ServerLayout"
    Identifier     "DualScreen"
    Screen       0 "Screen0"
    Screen       1 "Screen1" RightOf "Screen0" #Screen1 at the right of Screen0
#    Option         "Xinerama" "1" #To move windows between screens
    Option         "TwinView" "1"
EndSection
 
Section "Monitor"
    Identifier     "Monitor0"
    Option         "Enable" "true"
EndSection
 
Section "Monitor"
    Identifier     "Monitor1"
    Option         "Enable" "true"
EndSection
 
Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    Screen         0
    Option         "MetaModes"  "1440x900,1366x768; 1440x900,NULL"
EndSection
 
Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    Screen         1
EndSection
 
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "1"
    SubSection "Display"
        Depth          24
    EndSubSection
EndSection
 
Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth   24
    Option         "TwinView" "1"
    SubSection "Display"
        Depth          24
    EndSubSection
EndSection
Feed de comentarios | Url para Trackbacks | Suscribirse a los posts por correo electrónico

9 comentarios en este post

  1. Avatar rodolfo alejandro 21 febrero. 2012 - 12:05 pm Firefox 10.0.2 GNU/Linux 64 bits

    muy buen tuto para tomar nota en un futuro 😛 por cierto de paso reviso ese juego jeje shank xD

  2. Avatar Maximiliano Guzman 21 febrero. 2012 - 12:25 pm Opera 9.80 Android

    Muy bueno el post. Tocará probar Arch.

  3. Avatar Juanma 22 febrero. 2012 - 11:30 am Firefox 10.0.2 Windows 7

    Está bien tenerlo como referencia, muchas gracias.

    Es una de las cosas que me acaba fastidiando de linux: para temas de “desarrollo” está muy bien y es fácil instalar lenguajes/ides/bases de datos/servidores, etc., pero luego para tareas que deberían ser sencillas hay que pegarse un montón.

    • Avatar Fernando 22 febrero. 2012 - 11:38 am Firefox 10.0.2 GNU/Linux 64 bits

      A veces resulta fastidioso, pero la culpa es de los fabricantes que no toman en cuenta o dejan relegada la compatibilidad de sus componentes para GNU/Linux.

      Esta tarea en particular, seguramente sea sencilla en Ubuntu y otras distros con alguna GUI. Pero así se aprende en el proceso, que en distros como Arch, creo que es parte del objetivo 🙂

      ¡Saludos!

  4. Avatar pituxmat 19 marzo. 2012 - 10:18 pm Google Chrome 17.0.963.79 GNU/Linux 64 bits

    Excelente tutorial
    Solamente que para cambiar los metamodes tuve que hacer uso de xrandr
    Para cambiar entre los dos modos “0” y “1”, basta con ejecutar en una consola:
    xrandr -s 0 //para iniciar el primer modo
    xrandr -s 1 //para iniciar el segundo modo

    Saludos

  5. Avatar Israel 11 diciembre. 2013 - 11:58 pm Google Chrome 31.0.1650.63 GNU/Linux 64 bits

    Hola, tengo una Nvidia GeForce GTX 550 Ti y acabo de instalar Manjaro, pero al conectar los dos monitores no puedo configurar el monitor extra para que esté a la izquierda y mi espacio físico para los monitores no me permite tenerlo a la derecha del principal.
    Es decir, aunque físicamente el monitor extra esté a mi izquierda, para levar el ratón a el tengo que pasar el ratón por la parte derecha de mi monitor principal.
    A que se debe y como lo puedo configurar para que me lo reconozca del lado izquierdo del principal?

    • Avatar Fernando 12 diciembre. 2013 - 12:14 am Debian IceWeasel 27.0a2 GNU/Linux 64 bits

      Si usas esta configuración, vas a ver que en la sección “Server Layout” hay un código que indica cuál va a la derecha de cual:

      Section "ServerLayout"
          Identifier     "DualScreen"
          Screen       0 "Screen0"
          Screen       1 "Screen1" RightOf "Screen0"

      De ahí se le puede setear el orden en que ves la imagen.

    Dejar un comentario

    Toasty!