Останнім часом на ринку ноутбуків з'являється все більше і більше моделей, що містять не одну, а відразу дві графічні карти. Перша зазвичай від Intel, маловиробна і не жадібна до батареї, і друга від NVIDIA або ATI, що бере на себе важкі завдання і вимогливі ігри, в той же час дуже ненажерлива у ставленні до заряду батареї. Практично весь час працює перша графічна карта, друга починає працювати, як тільки в ній виникає необхідність, і знаходиться у відключеному стані весь інший час.
Підтримкою Windows виробники перейнялися повною мірою, що не дивно. Все працює практично «з коробки», достатньо поставити потрібний набір драйверів.
Під Linux поки що не все так гладко. Варто зрозуміти відразу, підтримка на рівні ядра практично відсутня. Є кілька проектів, що реалізують окремий функціонал, як вимикання карт або передача зображень від однієї карти до іншої, але, щоб ось так все і відразу, - на жаль і ах. Все ускладнюється тим, що виробники не сильно поспішають додавати підтримку своїх велосипедрішень в Linux і не розповідають, як на них єздіїми керувати.
Технічні деталі
У більшості випадків дискретна (друга) карта виявляється нікуди не підключена, і передача зображення на інтегровану карту виконується силами ПО і драйверів. Це пояснює наявність віртуального екрану CRT-0 або DFP-0 в системі, до якого неможливо нормально з'єднатися. Тим не менш, іноді це можливо.
Розглянемо більшість доступних на цей момент рішень.
vga_switcheroo
Додаток ядра, який реалізує перемикання між картами (вимикання однієї карти, ввімкнення іншої). З'явився в ядрі з версії 2.6.34. Також отримав розширені можливості і велику підтримку карт в byo-switcheroo (раніше asus-switcheroo). Потребує наявність примонтованої debugfs, для перемикання між картами потрібно вимикання X сервера. До того ж працює тільки з відкритими драйверами.
acpi_call
Ще один модуль ядра, але поки що не увійшов в основну гілку. Можливо, він там ніколи не опиниться. Розташований на github. Основне завдання - дати користувачеві можливість передавати командні рядки в підсистему acpi. В основному ж використовується, щоб включати і вимикати дискретну карту в цілях економії енергії.
hybrid-windump
Програма для прокидання основного екрана X сервера, в екран іншого X сервера. Також розташоване на github. Дозволяє об'єднати два екрани з різних X серверів на одному фізичному дисплеї.
bumblebee
Проект підтримки використання дискретних карт на основі NVIDIA Optimus з пропріетарними драйверами. Найбільш активно розвивається проект на поточний момент. Розташований знову на github. Дозволяє вручну вивантажувати окремі програми на дискретну карту. Реалізується за рахунок використання додаткового X сервера для графічної картки NVIDIA і пакета VirtualGL для трансферу даних між X серверами. Нещодавно було додано можливість відключення дискретної карти для деяких моделей ноутбуків через acpi_call, коли вона не використовується. Додатково дозволяє отримати підтримку CUDA, підтримка VDPAU поки що не реалізована.
Що далі?
У ядрі 3.0 очікується додавання більш просунутого методу перемикання через MXM. Проте це всього лише мала частина від повноцінної підтримки всього і вся. Також рекомендується підписатися на розсилку linux-hybrid-graphics і стежити за оновленнями на спеціалізованому блозі. Ну, і звичайно ж по можливості проявляти активність у спільноті, допомагаючи розвивати різні рішення і надаючи дампи acpi вашого обладнання.
Список посилань
- Заява про підтримку NVIDIA Optimus в Linux - www.nvnews.net/vbulletin/showpost.php?p=2183477&postcount=2
- Коміт модуля vga_switcheroo в основну гілку ядра - git.kernel.org/linus/6a9ee8af344e3bd7dbd61e67037096cdf7f83289
- Репозиторій byo-switcheroo на github - github.com/awilliam/asus-switcheroo
- Сховище acpi_call github - github.com/avilella/acpi_call
- Сховище hybrid-windump на github - github.com/gebart/hybrid-windump
- Проект VirtualGL - www.virtualgl.org
- Сховище bumblebee на github - github.com/MrMEEE/bumblebee
- Новина про підтримку Optimus в ядрі 3.0 - www.phoronix.com/scan.php?page=news_item&px=OTQzMA
- Рассылка hybrid-graphics-linux на launchpad — lists.launchpad.net/hybrid-graphics-linux
- Блог про підтримку гібридної графіки в Linux - linux-hybrid-graphics.blogspot.com