Ubuntu 14.10 та пізніших версій: Там набагато, набагато простіше. Будь ласка, дивіться цю відповідь та мій коментар нижче.
Примітка . Це працює лише в Ubuntu 13.04. Є деякі відмінності в 13.10.
Мені вдалося підключити два зовнішніх монітора (крім вбудованої панелі) до свого ThinkPad T430 на Ubuntu 13.04, з увімкненою функцією Optimus ("Переміжна графіка") (опція 3 у вашому списку). Монітори підключаються через інтерфейс DVI, один з них обертається. На відміну від інших рішень, всі монітори приєднані до одного і того ж диспетчера вікон, тому вікна можна вільно переміщувати між моніторами. Це досягає мети - збільшити термін служби акумулятора, якщо відключити його та використовувати зовнішні монітори, якщо вони підключені.
Ключова ідея тут:
- Внутрішній графічний адаптер відповідає за керування зображенням (растровим зображенням), яке фактично відображається
- За замовчуванням все відображається на внутрішньому графічному адаптері
- Програми, прискорені графічним процесором, використовують дискретний графічний адаптер, вихід копіюється на внутрішній графічний адаптер
- Для кожного зовнішнього монітора внутрішній графічний адаптер забезпечує "віртуальний" дисплей
- Виведення на зовнішні монітори відбувається за допомогою другого X-сервера, вміст з "віртуальних" дисплеїв постійно копіюється на другий X-сервер
Основна перевага перед іншими рішеннями полягає в тому, що всі дисплеї є (здавалося б) частиною одного X сеансу, тому ви можете вільно переміщати вікна між дисплеями.
Поки що я не помітив жодного штрафу за виконання.
Інструкції
Вам потрібно зробити наступне:
- Встановіть джмеля з PPA
- Створіть та встановіть спеціальний драйвер для відео Intel
- Завантажте, компілюйте та нарешті встановіть невелику програму
- Відредагуйте два конфігураційні файли
- Перезавантажте кілька разів
Для більшості дій вам знадобиться термінал, текстовий редактор та root-доступ ( sudo
). Детальні інструкції наведені нижче.
Встановіть джмеля
Дотримуйтесь розділу "основні настройки" інструкцій . Виконати як root, остання команда фактично ініціює перезавантаження:
add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
Не намагайтеся запустити джмеля лише з водієм нуво? . З мого досвіду, це не працює, принаймні, не в цій установці.
Перевірка
Ви повинні мати можливість бігати optirun glxgears
.
Встановіть виправлену версію xserver-xorg-video-intel
Варіант 1: Встановити з мого PPA (наразі лише Ubuntu 13.04)
Виконайте наступне як root:
add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
Варіант 2: Створіть та встановіть власний пакет
Виберіть найновіший патч для xserver-xorg-video-intel
. Клацніть файл, натисніть кнопку «RAW», скопіюйте URL-адресу у браузері. На момент написання це було 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
Перевірка (1) для обох варіантів
Команда
apt-cache policy xserver-xorg-video-intel
повинна показувати виправлену версію ( +virtual
суфікс) та оригінальну версію Ubuntu.
Необхідно до 13.04, для обох варіантів
Додайте до свого /etc/X11/xorg.conf
, створіть, якщо потрібно:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
Валідація (2) для обох варіантів
Після перезавантаження запустіть xrandr
у терміналі. Вихід повинен перелічити два додаткових віртуальних дисплея.
Завантажте і складіть екранний клон
Отримайте вилку puetzk для скрінклону та його залежностей та складіть його.
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
Перевірка
Файл screenclone
існує і виконується. (Однак це ще не запуститься.)
Редагувати xorg.conf.nvidia
Тестування
Моя настройка передбачає ландшафтний монітор, підключений до першого порту DVI док-станції, і портретний, підключений до другого порту DVI. Запустіть наступні команди в терміналі з каталогу, в якому знаходиться екранний клон , при необхідності адаптуйте .
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
Зверніть увагу, як обертання дисплея необхідно визначити двічі. Ви можете опустити друге виклик, xrandr
якщо не потрібне обертання (і, звичайно, --rotate left
перше виклик).
Після закінчення screenclone
Ctrl + C (який знову був висунутий на перший план за допомогою fg
) дискретний графічний адаптер вимикається. Ви можете підтвердити це за допомогою cat /proc/acpi/bbswitch
. Проте екранний простір відведений для двох відключених моніторів. Щоб повернутися лише до дисплея ноутбука, використовуйте
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
Прибирати
Скопіюйте screenclone
в каталог, який знаходиться у PATH
(наприклад, /usr/local/bin
)
Створіть bash
сценарій для автоматизації запуску та відключення зовнішніх дисплеїв. Цей сценарій налаштує зовнішні дисплеї під час запуску та переключиться на дисплей ноутбука лише при виході (наприклад, натиснувши 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
Альтернативний варіант: Моя колекція скриптів містить два сценарії extmon-start
та extmon-stop
, які включають та вимикають другий та третій монітори. Відредагуйте extmon-start
сценарій відповідно до вашої конфігурації.
Список літератури
Моя відповідь багато в чому випливає з таких ресурсів: