Ubuntu 14.10 e versioni successive: è molto, molto più semplice lì. Si prega di vedere questa risposta e il mio commento qui sotto.
Nota : funziona solo con Ubuntu 13.04. Ci sono alcune differenze nel 13.10.
Sono riuscito a collegare due monitor esterni (oltre al pannello integrato) al mio ThinkPad T430 su Ubuntu 13.04, con Optimus ("Grafica commutabile") abilitato (opzione 3 nell'elenco). I monitor sono collegati tramite l'interfaccia DVI, uno di questi viene ruotato. A differenza di altre soluzioni, tutti i monitor sono collegati allo stesso gestore di finestre, quindi le finestre possono essere spostate liberamente tra i monitor. Ciò consente di aumentare la durata della batteria se scollegata e di utilizzare monitor esterni se collegati.
L'idea chiave qui è:
- L'adattatore grafico interno è responsabile della gestione dell'immagine (bitmap) attualmente visualizzata
- Per impostazione predefinita, tutto viene visualizzato sull'adattatore grafico interno
- Le applicazioni con accelerazione GPU utilizzano l'adattatore grafico discreto, l'output viene copiato sull'adattatore grafico interno
- Per ogni monitor esterno, l'adattatore grafico interno fornisce un display "virtuale"
- L'output ai monitor esterni avviene utilizzando un secondo server X, i contenuti dei display "virtuali" vengono costantemente copiati sul secondo server X
Il vantaggio principale rispetto ad altre soluzioni è che tutti i display fanno parte (apparentemente) della stessa sessione X, quindi è possibile spostare liberamente le finestre tra i display.
Finora non ho notato alcuna penalità di prestazione.
Istruzioni
Devi fare quanto segue:
- Installa Bumblebee da un PPA
- Crea e installa un driver video Intel personalizzato
- Scarica, compila e infine installa un piccolo programma
- Modifica due file di configurazione
- Riavvia più volte
Per la maggior parte delle azioni sono necessari un terminale, un editor di testo e l'accesso root ( sudo
). Di seguito sono riportate istruzioni dettagliate.
Installa Bumblebee
Seguire la sezione "Impostazioni di base" delle istruzioni . Esegui come root, l'ultimo comando avvia effettivamente il riavvio:
add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
Non provare a eseguire il calabrone solo con il driver nouveau? . Dalla mia esperienza non funziona, almeno non in questa configurazione.
Validazione
Dovresti essere in grado di correre optirun glxgears
.
Installa una versione modificata di xserver-xorg-video-intel
Opzione 1: installa dal mio PPA (attualmente solo Ubuntu 13.04)
Eseguire quanto segue come root:
add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
Opzione 2: compilare e installare il proprio pacchetto
Scegli la patch più recente per xserver-xorg-video-intel
. Fai clic sul file, fai clic sul pulsante "Raw", copia l'URL nel browser. Al momento della stesura, questo 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
Convalida (1), per entrambe le opzioni
Il comando
apt-cache policy xserver-xorg-video-intel
dovrebbe mostrare la versione corretta ( +virtual
suffisso) e la versione originale di Ubuntu.
Necessario per 13.04, per entrambe le opzioni
Aggiungi quanto segue al tuo /etc/X11/xorg.conf
, crea se necessario:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
Convalida (2), per entrambe le opzioni
Dopo un riavvio, esegui xrandr
in un terminale. L'output dovrebbe elencare due display virtuali aggiuntivi.
Scarica e costruisci screenclone
Prendi la forchetta di screenclone e le sue dipendenze di Puetzk e compila.
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
Validazione
Il file screenclone
esiste ed è eseguibile. (Tuttavia, non funzionerà ancora.)
modificare xorg.conf.nvidia
- Apri il file
/etc/bumblebee/xorg.conf.nvidia
in un editor di testo, come root
- Commenta o rimuovi le righe che leggono
UseEDID
oUseDisplayDevice
- Nel
Section "ServerLayout"
, aggiungi una voceScreen "Screen0"
Nella parte inferiore del file, aggiungi quanto segue:
Section "Screen"
Identifier "Screen0"
Device "Device0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Reboot
analisi
La mia configurazione presuppone un monitor orizzontale collegato alla prima porta DVI della docking station e uno verticale collegato alla seconda porta DVI. Eseguire i seguenti comandi in un terminale dalla directory in cui si trova screenclone , adattarsi se necessario.
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
Notare come la rotazione del display deve essere definita due volte. È possibile omettere la seconda invocazione xrandr
se non si desidera alcuna rotazione (e, naturalmente, --rotate left
la prima invocazione).
Terminando screenclone
con Ctrl + C (che è stato nuovamente messo in primo piano usando fg
), l'adattatore grafico discreto viene spento. Puoi verificarlo con cat /proc/acpi/bbswitch
. Tuttavia, lo spazio dello schermo è riservato ai due monitor ora disconnessi. Per tornare al display del laptop, utilizzare
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
Pulire
Copia screenclone
in una directory che si trova nella PATH
(ad es. /usr/local/bin
)
Crea uno bash
script per automatizzare l'avvio e l'arresto dei display esterni. Questo script imposterà i display esterni all'avvio e passerà al display del laptop solo all'uscita (ad esempio, premendo 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
Opzione alternativa: la mia raccolta di scriptlet contiene due script extmon-start
e extmon-stop
, che abilitano e disabilitano il secondo e il terzo monitor. Modifica lo extmon-start
script in base alla tua configurazione.
Riferimenti
La mia risposta attinge in gran parte dalle seguenti risorse: