Ubuntu 14.10 et versions ultérieures: c'est beaucoup, beaucoup plus simple là-bas. Veuillez voir cette réponse et mon commentaire ci-dessous.
Remarque : cela ne fonctionne que dans Ubuntu 13.04. Il y a quelques différences dans 13.10.
J'ai réussi à connecter deux moniteurs externes (en plus du panneau intégré) à mon ThinkPad T430 sur Ubuntu 13.04, avec Optimus ("Switchable graphics") activé (option 3 dans votre liste). Les moniteurs sont connectés via l'interface DVI, l'un d'eux est tourné. Contrairement à d'autres solutions, tous les moniteurs sont connectés au même gestionnaire de fenêtres, de sorte que les fenêtres peuvent être déplacées librement entre les moniteurs. Cela permet d'atteindre une durée de vie de la batterie améliorée en cas de déconnexion et d'utiliser des moniteurs externes s'ils sont connectés.
L'idée clé ici est:
- L'adaptateur graphique interne est responsable de la gestion de l'image (bitmap) réellement affichée
- Par défaut, tout est rendu sur l'adaptateur graphique interne
- Les applications accélérées par GPU utilisent l'adaptateur graphique discret, la sortie est copiée sur l'adaptateur graphique interne
- Pour chaque moniteur externe, l'adaptateur graphique interne fournit un affichage "virtuel"
- La sortie vers les moniteurs externes se fait à l'aide d'un deuxième serveur X, le contenu des écrans "virtuels" est constamment copié sur le deuxième serveur X
Le principal avantage rapport aux autres solutions est que tous les écrans font (apparemment) partie de la même session X, vous pouvez donc déplacer librement les fenêtres entre les écrans.
Jusqu'à présent, je n'ai remarqué aucune dégradation des performances.
Instructions
Vous devez effectuer les opérations suivantes:
- Installer Bumblebee à partir d'un PPA
- Créez et installez un pilote vidéo Intel personnalisé
- Téléchargez, compilez et enfin installez un petit programme
- Modifier deux fichiers de configuration
- Redémarrez plusieurs fois
Pour la plupart des actions, vous aurez besoin d'un terminal, d'un éditeur de texte et d'un accès root (sudo
). Des instructions détaillées sont données ci-dessous.
Installer Bumblebee
Suivez la section "configuration de base" des instructions . Exécutez en tant que root, la dernière commande lance en fait le redémarrage:
add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
N'essayez pas d' exécuter Bumblebee avec un nouveau pilote uniquement? . D'après mon expérience, cela ne fonctionne pas, du moins pas dans cette configuration.
Validation
Vous devriez pouvoir courir optirun glxgears
.
Installer une version corrigée de xserver-xorg-video-intel
Option 1: installer à partir de mon PPA (actuellement uniquement Ubuntu 13.04)
Exécutez ce qui suit en tant que root:
add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
Option 2: Créez et installez votre propre package
Choisissez le patch le plus récent pour xserver-xorg-video-intel
. Cliquez sur le fichier, cliquez sur le bouton "Raw", copiez l'URL dans le navigateur. Au moment de la rédaction, c'était 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
Validation (1), pour les deux options
La commande
apt-cache policy xserver-xorg-video-intel
devrait montrer la version corrigée ( +virtual
suffixe) et la version originale d'Ubuntu.
Nécessaire pour 13.04, pour les deux options
Ajoutez les éléments suivants à votre /etc/X11/xorg.conf
, créez si nécessaire:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
Validation (2), pour les deux options
Après un redémarrage, exécutez xrandr
dans un terminal. La sortie doit répertorier deux écrans virtuels supplémentaires.
Télécharger et créer un screenclone
Obtenez le fork de screenclone de puetzk et ses dépendances, et compilez-le.
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
Validation
Le fichier screenclone
existe et est exécutable. (Il ne fonctionnera pas encore, cependant.)
Éditer xorg.conf.nvidia
- Ouvrez le fichier
/etc/bumblebee/xorg.conf.nvidia
dans un éditeur de texte, en tant que root
- Mettez en commentaire ou supprimez les lignes qui lisent
UseEDID
ouUseDisplayDevice
- Dans le
Section "ServerLayout"
, ajoutez une entréeScreen "Screen0"
Au bas du fichier, ajoutez ce qui suit:
Section "Screen"
Identifier "Screen0"
Device "Device0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Redémarrer
Essai
Ma configuration suppose un moniteur paysage connecté au premier port DVI de la station d'accueil et un moniteur portrait connecté au deuxième port DVI. Exécutez les commandes suivantes dans un terminal à partir du répertoire où se trouve screenclone , adaptez-les si nécessaire.
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
Notez comment la rotation de l'affichage doit être définie deux fois. Vous pouvez omettre la deuxième invocation de xrandr
si aucune rotation n'est souhaitée (et, bien sûr, --rotate left
dans la première invocation).
En terminant screenclone
avec Ctrl + C (qui a été remis au premier plan en utilisant fg
), l'adaptateur graphique discret est désactivé. Vous pouvez le vérifier avec cat /proc/acpi/bbswitch
. Pourtant, l'espace d'écran est réservé aux deux moniteurs maintenant déconnectés. Pour revenir à l'écran de l'ordinateur portable uniquement, utilisez
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
Nettoyer
Copiez screenclone
dans un répertoire qui se trouve dans PATH
(par exemple, /usr/local/bin
)
Créez un bash
script pour automatiser le démarrage et l'arrêt des écrans externes. Ce script configurera les affichages externes au démarrage et basculera vers l'affichage de l'ordinateur portable uniquement à la sortie (par exemple, en appuyant sur 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
Autre option: Ma collection de scriptlets contient deux scripts, extmon-start
et extmon-stop
, qui activent et désactivent les deuxième et troisième moniteur. Modifiez le extmon-start
script en fonction de votre configuration.
Les références
Ma réponse s'inspire largement des ressources suivantes: