Ubuntu 14.10 y posterior: es mucho, mucho más simple allí. Por favor, vea esta respuesta y mi comentario a continuación.
Nota : Esto solo funciona en Ubuntu 13.04. Hay algunas diferencias en 13.10.
He logrado conectar dos monitores externos (además del panel incorporado) a mi ThinkPad T430 en Ubuntu 13.04, con Optimus ("Gráficos intercambiables") habilitados (opción 3 en su lista). Los monitores están conectados a través de la interfaz DVI, uno de ellos está girado. A diferencia de otras soluciones, todos los monitores están conectados al mismo administrador de ventanas, por lo que las ventanas se pueden mover libremente entre los monitores. Esto logra el objetivo de mejorar la duración de la batería si está desconectado y usar monitores externos si está conectado.
La idea clave aquí es:
- El adaptador de gráficos interno es responsable de administrar la imagen (mapa de bits) que se muestra realmente
- Por defecto, todo se representa en el adaptador de gráficos interno
- Las aplicaciones aceleradas por GPU usan el adaptador de gráficos discretos, la salida se copia en el adaptador de gráficos interno
- Para cada monitor externo, el adaptador de gráficos interno proporciona una pantalla "virtual"
- La salida a los monitores externos se realiza utilizando un segundo servidor X, los contenidos de las pantallas "virtuales" se copian constantemente en el segundo servidor X
El principal beneficio sobre otras soluciones es que todas las pantallas son (aparentemente) parte de la misma sesión X, por lo que puede mover libremente las ventanas entre las pantallas.
Hasta ahora no he notado penalización de rendimiento.
Instrucciones
Debes hacer lo siguiente:
- Instalar Bumblebee desde un PPA
- Cree e instale un controlador de video Intel personalizado
- Descargue, compile y finalmente instale un pequeño programa
- Editar dos archivos de configuración
- Reiniciar varias veces
Para la mayoría de las acciones, necesitará un terminal, un editor de texto y acceso root ( sudo
). Las instrucciones detalladas se dan a continuación.
Instalar abejorro
Siga la sección "configuración básica" de las instrucciones . Ejecutar como root, el último comando realmente inicia el reinicio:
add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
¿No intentas ejecutar abejorro solo con el controlador nouveau? . Desde mi experiencia, no funciona, al menos no en esta configuración.
Validación
Deberías poder correr optirun glxgears
.
Instalar una versión parcheada de xserver-xorg-video-intel
Opción 1: Instalar desde mi PPA (actualmente solo Ubuntu 13.04)
Ejecute lo siguiente como root:
add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
Opción 2: compila e instala tu propio paquete
Elija el parche más reciente para xserver-xorg-video-intel
. Haga clic en el archivo, haga clic en el botón "Sin procesar", copie la URL en el navegador. Al momento de escribir, esto era https://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch .
sudo apt-get build-dep xserver-xorg-video-intel
cd ~
apt-get source xserver-xorg-video-intel
cd xserver-xorg-video-intel
# replace the URL below with the one you have noted, if necessary
wget https://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch
patch -p1 < *.patch
# The next command will ask for a change log message. Supply something meaningful,
# this will later allow you to distinguish your patched package from the distribution's.
dch -l+virtual
dpkg-buildpackage -b
cd ..
sudo dpkg --install xserver-xorg-video-intel_*.deb
Validación (1), para ambas opciones
El comando
apt-cache policy xserver-xorg-video-intel
debería mostrar la versión parcheada ( +virtual
sufijo) y la versión original de Ubuntu.
Necesario para 13.04, para ambas opciones
Agregue lo siguiente a su /etc/X11/xorg.conf
, cree si es necesario:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
Validación (2), para ambas opciones
Después de reiniciar, ejecutar xrandr
en una terminal. La salida debe enumerar dos pantallas virtuales adicionales.
Descargar y construir screenclone
Obtenga el fork de screenclone de puetzk y sus dependencias, y compílelo .
sudo apt-get install libxcursor-dev libxdamage-dev libxinerama-dev libxtst-dev git build-essential
cd ~
git clone git://github.com/puetzk/hybrid-screenclone.git
cd hybrid-screenclone
make
Validación
El archivo screenclone
existe y es ejecutable. (Sin embargo, aún no se ejecutará).
Editar xorg.conf.nvidia
- Abra el archivo
/etc/bumblebee/xorg.conf.nvidia
en un editor de texto, como root
- Comente o elimine las líneas que leen
UseEDID
oUseDisplayDevice
- En el
Section "ServerLayout"
, agregue una entradaScreen "Screen0"
Al final del archivo, agregue lo siguiente:
Section "Screen"
Identifier "Screen0"
Device "Device0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Reiniciar
Pruebas
Mi configuración supone un monitor de paisaje conectado al primer puerto DVI de la estación de acoplamiento y uno vertical conectado al segundo puerto DVI. Ejecute los siguientes comandos en un terminal desde el directorio donde se encuentra screenclone , adapte según sea necesario.
xrandr --output LVDS1 --output VIRTUAL1 --mode 1920x1200 --right-of LVDS1 --output VIRTUAL2 --mode 1920x1200 --right-of VIRTUAL1 --rotate left
./screenclone -b -x 1:0 -x 2:1 &
sleep 1
xrandr -d :8 --output DP-2 --right-of DP-1 --rotate left
fg
Observe cómo la rotación de la pantalla debe definirse dos veces. Puede omitir la segunda invocación de xrandr
si no se desea rotación (y, por supuesto, la --rotate left
de la primera invocación).
Al terminar screenclone
con Ctrl + C (que se ha puesto en primer plano nuevamente usando fg
), el adaptador de gráficos discretos se apaga. Puedes verificar esto con cat /proc/acpi/bbswitch
. Aún así, el espacio de pantalla está reservado para los dos monitores ahora desconectados. Para volver solo a la pantalla de la computadora portátil, use
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
Limpiar
Copiar screenclone
a un directorio que está en el PATH
(por ejemplo, /usr/local/bin
)
Cree una bash
secuencia de comandos para automatizar el inicio y el apagado de las pantallas externas. Este script configurará las pantallas externas al inicio y cambiará a la pantalla de la computadora portátil solo al salir (por ejemplo, presionando Ctrl + C).
#!/bin/bash
set -m
xrandr --output LVDS1 --output VIRTUAL1 --mode 1920x1200 --right-of LVDS1 --output VIRTUAL2 --mode 1920x1200 --right-of VIRTUAL1 --rotate left
trap "xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off" EXIT
screenclone -b -x 1:0 -x 2:1 &
sleep 1
xrandr -d :8 --output DP-2 --right-of DP-1 --rotate left
fg
Opción alternativa: Mi colección de scriptlets contiene dos scripts extmon-start
y extmon-stop
, que habilitan y deshabilitan el segundo y el tercer monitor. Edite el extmon-start
script para adaptarlo a su configuración.
Referencias
Mi respuesta se basa en gran medida en los siguientes recursos: