Есть ноутбук со свтроенной графикой на базе чипсета Intel 945 (HP Compac nx7300). Есть Debian Linux 5.0 на этом ноутбуке. Есть внешний 20-дюймовый монитор Philips 200WP, родное разрешение которого 1680×1050. Задача: подключить монитор Philips к ноутбуку в качестве внешнего монитора (вместо встроенного дисплея). Сходу, втыкнув VGA-кабель от монитора в ноут, решить задачу в Линуксе не удалось (в Windows все сразу хорошо заработало). Картинка была как-бы размазана по горизонтали, то есть неправильно были выставлены частоты.
В поисках решения начал мучать Гугл. Большого количества материалов не было, но несколько тем, касающихся чипсета Интела, разрешения 1680×1050 и Убунту было. В большинстве материалов упоминалось решение с использованием софтины 915resolution. Но практически сразу выяснилось, что она устарела и в последних версиях Debian и Ubuntu ее нет смысла использовать вовсе.
В продолжении изысканий по теме я познакомился с программой xrandr (раньше работал с ее визуальным гномовским заменителем Параметры->Разрешение экрана), которая кстати умеет много чего хорошего. Именно с помощью нее настраиваются в том числе виртуальные мониторы (когда два монитора показывают разную картинку). Но нужды в этом мне не было, она использовалась только для установки режима после подключения внешнего монитора. (Режим — это сочетание разрешения, частот и еще каких-то там циферок.)
Далее нашел упоминание еще одной замечательной софтины — gtf. Она очень нужна для того, чтобы определить правильные параметры режима моего внешнего монитора.
Так же познакомился таки с системой видеовыходов в ОС. Как то раньше разбираться с этим не приходилось. А вот по мере изучения Линуксов все больше и больше приходится вдаваться в такие тонкости :) Ну да ладно. Если выполнить в консоли команду xrandr, то она покажет вам в ответ ваши текущие видеовыходы и подключенные на них мониторы. Вывод будет примерно такой:
feedbee@debian:~$ xrandr
Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 2048 x 2048
VGA connected 1680×1050+0+0 (normal left inverted right x axis y axis) 433mm x 271mm
1280×800 60.0 +
1680x1050x74.9 74.9*
[…]
LVDS connected 1280×800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
1280×800 60.0 + 60.0*
[…]
TV disconnected (normal left inverted right x axis y axis)
Такой вывод говорит, что у меня в системе один «экран» (Screen 0). Показаны его разрешения (текущее и экстремумы). Разрешения имеют значения, если мы раздвигаем мониторы (то есть делаем на каждый разную картинку; тогда они оба должны помещаться в экран). Так же показано, что у меня есть 3 видеовыхода: VGA, LVDS, TV. По VGA подключен внешний монитор, LVDS — это встроенный дисплей ноутбука. TV-выход не подключен. Звездочка напротив режима обозначает, что он активный.
Чтобы заставить мой внешний монитор показывать нормальную картинку, надо было выяснить его нормальный рабочий режим, добавить этот режим в список и активировать, когда я подключаю внешний монитор (последнее можно делать не выключая ноутбука и без перезагрузки).
Чтобы определить нужный режим и активировать его, надо сделать следующее:
1)Выключить ноут.
2)Подключить внешний монитор.
3)Включить ноут и сразу зукройте его (или переключитесь на внешний монитор Fn+F4), т.е. работать сейчас вы будите через внешний монитор с неродным разрешением.
4)Выполнить ~$ gtf 1680 1050 60
Я получил от команды такой вывод:
~$ gtf 1680 1050 60
# 1680×1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 147.14 MHz
Modeline «1680x1050_60.00» 147.14 1680 1784 1968 2256 1050 1051 1054 1087 -HSync +Vsync
Это и есть рассчитанные параметры режима для моего внешнего монитора.
5)Полученную строку добавить в /etc/X11/xorg.conf в Section «Monitor». Получится так:
Section «Monitor»
Identifier «Универсальный монитор»
Option «DPMS»
Modeline «1680x1050x74.9» 187.00 1680 1800 1976 2272 1050 1053 1059 1099 -hsync +vsync
EndSection
6)Перезапустить X-сервер (Ctrl+Backspace).
После этого остается только переключить нужный режим на нужный видеовыход. Это делается командой:
~$ xrandr —output VGA —mode 1680x1050x74.9
Ее удобно добавить в скрипт, который потом просто запускать после подключения внешнего монитора.
Чтобы сбросить режим на нормальный для ноутбучного дисплея, просто выполните:
~$ xrandr —auto
P.S. Выход был найден благодаря http://forums.debian.net/viewtopic.php?p=210202&sid=18c11b5eb193a4399ca4cbbfd206e4a4
Так же полезной оказалась страничка https://answers.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+question/26807