нетбук з linux і зовнішній монітор в режимі розширення

| комп'ютери, linux, нетбук

хоча на відміну від більшості користувачів нетбуків, я цілком задоволений дев'ятидюймовим дисплеєм aspire one, проте вдома таки частенько переключаюся на 20 дюймів монітора: стільниці забагато не буває. тим більше, що lxrandr виявився простою і зручною у використанні програмкою.

а все-таки завжди хочеться більшого:
  • навчити нетбук автоматично вимикати вбудований дисплей при підключенні зовнішнього монітора
  • навчитися підключати монітор в режимі розширення стільниці на основному дисплеї
першу задачку залишу на пізніше: вона цікава, але заскладна як на мій нульовий досвід скриптування в linux. а от з другою я спробував розібратися, орієнтуючись на пару підказок віталія зінченка.

одразу попереджу, що фінального, хорошого і правильного рецепту я так і не виробив ще, тому перш ніж братися до налаштування своєї зв'язки нетбук+монітор, варто прочитати увесь допис, або хоча би підсумок.


режими: клонування і розширення

по-перше, різниця між режимами роботи двох (і більше) дисплеїв:

  • клонування (cloning або mirroring): обидва дисплеї показують одну стільницю (однакове зображення)
  • розширення (extension): два дисплеї «доповнюють» один одного, показуючи дві прилеглі ділянки великої віртуальної стільниці
насправді це лише два простих часткових випадки однієї технології, коли два дисплеї відображають довільні ділянки віртуального екрану. але не буду лізти в хащі =)

до речі, робота з кількома дисплеями — «хвора тема» для більшости дистрибутивів linux, а от в ос windows все налаштовується дуже просто штатним аплетом системної панелі: є в чім позаздрити користувачам «вікон».


конфігурація

отже в чім задача? дисплей нетбука зручно розташований під монітором (див. ілюстрацію вище), так що хочеться, щоби зображення на зовнішньому моніторі «доповнювало» стільницю нетбука зверху — так, щоб вікна можна було довільно пересувати «з одного дисплею на інший».

для системи це виглядає так: великий віртуальний екран, який за розмірами вміщує зображення для обох дисплеїв (див. ілюстрацію). і два дисплеї, котрі відображають різні ділянки віртуального екрану.


інструмент

все, що нам треба, вміє xrandr — консольна програма для динамічного налаштування характеристик відображення без перезавантаження графічного сервера x. детальну інструкцію з використання xrandr, написану мовою роботів та програмістів, можна завжди отримати по команді

man xrandr
якщо коротко, то базовий синтаксис команди виглядає так:

xrandr --output (output) --mode (mode) --left-of|--right-of|--above|--below|--same-as (output)
ключовий параметр — output, він визначає, до якого дисплея стосуватимуться налаштування, і конкретні значення специфічні для різних виробників — ati, intel чи nvidia. для нетбуків aspire one та аналогічних, що використовують інтегровану в чіпсет графіку intel, важливі два ідентифікатори:

  • lvds — дисплей нетбука
  • vga — зовнішній монітор чи проектор
параметр mode визначає розмір зображення; для дисплея нетбука aspire one (l110/a150) це 1024x600 пікселів, для зовнішнього монітора в моєму випадку 1680x1050 (див. ілюстрацію).

у xrandr ще багато інших параметрів, але наразі вони не настільки важливі, і з ними можна розбиратися пізніше.


віртуальний екран

важлива функція xrandr — якщо запустити програму без параметрів (або з одним параметром -q), вона покаже перелік підключених дисплеїв та усі їхні підтримувані розміри зображення (див. ілюстрацію). ця інформація знадобиться, щоби вирахувати розмір віртуального екрану.

в моєму конкретному прикладі віртуальний екран матиме ширину 1680 пікселів і висоту 1050+600=1650 пікселів. ці параметри треба прописати в файл конфігураціі /etc/X11/xorg.conf, додавши буквально три рядки до секції "screen":

SubSection "Display"
  Virtual 1680 1650
EndSubSection
зайвий раз нагадаю: редагувати файл xorg.conf треба в режимі адміністратора, і дуже уважно, зробивши попередньо резервну копію! буквально одна помилка може призвести до того, що після перезавантаження графічний сервер не запуститься, і користувач залишиться один на один з командним рядком: не найкращий сценарій для новачка.

фінальний вигляд секції "screen" може бути приблизно такий:

Section "Screen"
  Identifier "Default Screen"
  Monitor "Configured Monitor"
  Device "Configured Video Device"
  DefaultDepth 24
  SubSection "Display"
    Virtual 1680 1650
  EndSubSection
EndSection
тепер починається справжня магія xrandr.


трошки магії

віталій зінченко підказав готовий варіант команди для мого випадку:

xrandr --output LVDS --mode 1024x600 --output VGA --mode 1680x1050 --above LVDS
вийшло?! обидва дисплеї працюють і наче справді розташовані один над іншим, миша «гуляє» між ними і можна перетягувати вікна… майже. є декілька проблем:

  • зображення на дисплеї нетбука зсунуте вліво відносно того, як треба було за схемою;
  • панель xfce, іконки стільниці, індикатори conky «перескочили» на зовнішній монітор замість того, щоби залишитися на нетбуці;
  • вікна можна пересувати між дисплеями, але вони не хочуть повністю спускатися на дисплей нетбука: заголовок вікна завжди залишається над панеллю xfce.
погугливши та вчитавшись уважно в документацію xrandr, я доволі розібрався з першою проблемою: треба трошки модифікувати команду. але найперше повертаюся до роботи з одним дисплеєм, відключивши зовнішній монітор — за допомогою lxrandr, або такою командою:

xrandr --output VGA --off
тепер розташовую дисплеї правильно, для цього екран lvds треба «зсунути» відносно віртуального екрану на (1680-1024)/2 =328 пікселів вправо і на 1050 пікселів вниз (див. ілюстрацію вище), за це відповідає параметр pos:

xrandr --output LVDS --mode 1024x600 --pos 328x1050 --output VGA --mode 1680x1050 --pos 0x0
гаразд, щодо геометрії зображення отримав точнісінько те, що хотів. дві інших проблеми пов’язані між собою, і виникають через глюк актуальної версії xfce. вирішуються лише частково.


перетягнути панель на дисплей нетбука нескладно: відкриваю параметри панелі (правий клік миші, пункт упорядкування панелі), у вікні налаштувань тепер можна вибрати дисплей, на якому відображати панель. перший — зовнішній монітор, другий — дислей нетбука… чому саме такий порядок? дивимося звіт xrandr без параметрів (див. ілюстрацію вище): першим вказано саме екран з ідентифікатором vga!

вибираю другий — панель перескочила «в нетбук». ура? а дзуськи: налаштування наче зберігається, але наступного разу, підключивши монітор, я знову бачу панель там... це — глюк xfce, виправляється перезапуском панелі:

xfce4-panel -r
і робити це доводиться щоразу. або чекати виходу поновлення xfce. так само — перезапуском — виправляється проблема дивного розташування conky. думаю, це можна було б автоматизувати за великого бажання.

а от щодо розташування іконок стільниці та — рішення не знайшов. втім, це якраз і не критично.


підсумок

коротко: до нетбука з linux можна підключити зовнішній монітор в режимі розширення, і то доволі гнучко налаштовувати конфігурацію дисплеїв та віртуального екрану.

проте принаймні в дистрибутиві linux mint 7 xfce з цим забагато мороки: все доводиться робити ручками або самотужки автоматизувати, бракує зручної графічної утиліти. і псують життя окремі глюки xfce.

тому особисто мені набагато зручніше просто переключатися між дисплеєм нетбука і зовнішнім монітором за допомогою lxrandr. в перспективі — повністю автоматизую процес переключення, але про це за іншим разом.