Ubuntu 14.10 i nowsze: Jest tam o wiele, wiele prostsze. Proszę zobaczyć tę odpowiedź i mój komentarz poniżej.
Uwaga : Działa to tylko w systemie Ubuntu 13.04. Istnieją pewne różnice w 13.10.
Udało mi się podłączyć dwa zewnętrzne monitory (oprócz wbudowanego panelu) do mojego ThinkPada T430 na Ubuntu 13.04, z włączoną opcją Optimus („Przełączalna grafika”) (opcja 3 na liście). Monitory są podłączone przez interfejs DVI, jeden z nich jest obrócony. W przeciwieństwie do innych rozwiązań, wszystkie monitory są podłączone do tego samego menedżera okien, dzięki czemu okna można swobodnie przenosić między monitorami. Osiąga to cel polegający na zwiększeniu żywotności baterii w przypadku odłączenia i użyciu zewnętrznych monitorów, jeśli są podłączone.
Kluczową ideą tutaj jest:
- Wewnętrzna karta graficzna jest odpowiedzialna za zarządzanie obrazem (bitmapą), który jest faktycznie wyświetlany
- Domyślnie wszystko jest renderowane na wewnętrznej karcie graficznej
- Aplikacje przyspieszane przez GPU używają dyskretnego adaptera graficznego, dane wyjściowe są kopiowane do wewnętrznego adaptera graficznego
- Dla każdego monitora zewnętrznego wewnętrzna karta graficzna zapewnia „wirtualny” wyświetlacz
- Wyjście do monitorów zewnętrznych odbywa się za pomocą drugiego serwera X, zawartość z ekranów „wirtualnych” jest stale kopiowana na drugi serwer X
Główną zaletą w porównaniu z innymi rozwiązaniami jest to, że wszystkie wyświetlacze są (pozornie) częścią tej samej sesji X, dzięki czemu można swobodnie przenosić okna między wyświetlaczami.
Do tej pory nie zauważyłem żadnej utraty wydajności.
Instrukcje
Musisz wykonać następujące czynności:
- Zainstaluj Bumblebee z PPA
- Zbuduj i zainstaluj niestandardowy sterownik wideo Intel
- Pobierz, skompiluj i wreszcie zainstaluj mały program
- Edytuj dwa pliki konfiguracyjne
- Uruchom ponownie kilka razy
Do większości działań potrzebny jest terminal, edytor tekstu i dostęp do konta root ( sudo
). Szczegółowe instrukcje podano poniżej.
Zainstaluj Bumblebee
Postępuj zgodnie z sekcją „Konfiguracja podstawowa” instrukcji . Wykonaj jako root, ostatnie polecenie faktycznie inicjuje ponowne uruchomienie:
add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
Czy nie próbujesz uruchomić trzmiela tylko z nowym sterownikiem? . Z mojego doświadczenia wynika, że to nie działa, przynajmniej nie w tej konfiguracji.
Uprawomocnienie
Powinieneś być w stanie biec optirun glxgears
.
Zainstaluj łataną wersję xserver-xorg-video-intel
Opcja 1: Zainstaluj z mojego PPA (obecnie tylko Ubuntu 13.04)
Wykonaj następujące czynności jako root:
add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
Opcja 2: zbuduj i zainstaluj własny pakiet
Wybierz najnowszą łatkę dla xserver-xorg-video-intel
. Kliknij plik, kliknij przycisk „Raw”, skopiuj adres URL w przeglądarce. W momencie pisania tego tekstu było to 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
Sprawdzanie poprawności (1) dla obu opcji
Komenda
apt-cache policy xserver-xorg-video-intel
powinien pokazywać łataną wersję ( +virtual
sufiks) i oryginalną wersję Ubuntu.
Niezbędny do 13.04, dla obu opcji
Dodaj następujące elementy do /etc/X11/xorg.conf
, w razie potrzeby utwórz:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
Sprawdzanie poprawności (2) dla obu opcji
Po ponownym uruchomieniu uruchom xrandr
w terminalu. Dane wyjściowe powinny zawierać dwa dodatkowe wirtualne wyświetlacze.
Pobierz i zbuduj screenclone
Pobierz rozwidlenie puetzk z screenclone i jego zależności i skompiluj je.
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
Uprawomocnienie
Plik screenclone
istnieje i jest wykonywalny. (Jednak nie będzie jeszcze działać.)
Edytować xorg.conf.nvidia
Testowanie
Moja konfiguracja zakłada monitor poziomy podłączony do pierwszego portu DVI stacji dokującej i portretu podłączonego do drugiego portu DVI. Uruchom następujące polecenia w terminalu z katalogu, w którym znajduje się screenclone , w razie potrzeby dostosuj.
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
Zwróć uwagę, jak obrót wyświetlacza musi być zdefiniowany dwukrotnie. Możesz pominąć drugie wywołanie, xrandr
jeśli rotacja nie jest pożądana (i oczywiście --rotate left
przy pierwszym wywołaniu).
Po zakończeniu screenclone
z Ctrl + C (który został ponownie umieszczony na pierwszym planie za pomocą fg
) dyskretna karta graficzna zostaje wyłączona. Możesz to zweryfikować za pomocą cat /proc/acpi/bbswitch
. Mimo to miejsce na ekranie jest zarezerwowane dla dwóch odłączonych teraz monitorów. Aby przełączyć się z powrotem tylko na wyświetlacz laptopa, użyj
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
Sprzątać
Skopiuj screenclone
do katalogu, który znajduje się w PATH
(np. /usr/local/bin
)
Utwórz bash
skrypt, aby zautomatyzować uruchamianie i zamykanie zewnętrznych wyświetlaczy. Ten skrypt skonfiguruje zewnętrzne wyświetlacze przy uruchomieniu i przełączy się na wyświetlacz laptopa tylko przy wyjściu (np. Naciskając 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
Opcja alternatywna: Moja kolekcja skryptletów zawiera dwa skrypty, extmon-start
oraz extmon-stop
, że włączanie i wyłączanie drugi i trzeci monitor. Edytuj extmon-start
skrypt, aby dopasować go do konfiguracji.
Bibliografia
Moja odpowiedź w dużej mierze czerpie z następujących zasobów: