Седые аксакалы, заставшие XFree86, помнят, что настройка графического режима в ней была нетривиальным делом — требовалось указывать низкоуровневые параметры видеорежимов, включая тайминги, частоту развёртки и прочие магические значения. Во всех руководствах (к слову сказать, немногочисленных и невнятных) неизменно подчёркивалось, что неверные числа могут привести к самым тяжёлым последствиям, вплоть до сгоревшего монитора.
Но затем появился Mandrake Linux, и настройка оборудования в Линуксе превратилась в простую и приятную процедуру.
Причина, по которой нам пришлось вспомнить те суровые времена, явилась нам в образе древнего компьютера на базе 945 чипсета, который было решено превратить в видеопроектор, подключив к нему 21-дюймовый монитор. Было замечено, что все операционные системы (как Windows, так и Linux) используют на нём разрешение, весьма далёкое от максимального.
В нашем распоряжении имеется утилита xrandr, которая показывает доступные видеорежимы и позволяет переключаться между ними на лету. Проблема в том, что xrandr не видела разрешений больше 1024x768, потому что слишком современный монитор оказался не состоянии сообщить о них слишком старой видеокарте через аналоговый VGA-кабель.
Следует отметить, что в Windows 10 решить эту проблему так и не получилось.
Однако в Линуксе нам на помощь пришли два инструмента:
- способность xrandr вручную добавлять описания новых видеорежимов в формате Modeline,
- утилита cvt, генерирующая для заданного разрешения правильный Modeline, пригодный для передачи в xrandr.
Общая последовательность действий будет такой:
- вызываем cvt и получаем modeline,
- вызываем xrandr --newmode и регистрируем modeline,
- вызываем xrandr --addmode и назначаем зарегистрированный modeline встроенной видеокарте,
- вызываем xrandr -s и переключаемся на новое разрешение.
Получившийся сценарий сохраняем в /usr/local/sbin/fix-display-resolution
и делаем исполняемым (chmod +x):
#!/bin/sh -x
MONITOR="VGA1"
WIDTH="1920"
HEIGHT="1080"
MODELINE="$(cvt "$WIDTH" "$HEIGHT" | awk '/Modeline/ { gsub(/"/, ""); for (i=2; i<=NF; i++) printf $i " "; exit }')"
MODENAME="${MODELINE%% *}"
test "$MODELINE" = "" && { echo "Cannot detect modeline" 1>&2; exit 1; }
xrandr --newmode $MODELINE
xrandr --addmode "$MONITOR" "$MODENAME"
xrandr -s "$MODENAME"
Как добавить сценарий в автозагрузку?
Зависит в первую очередь не столько от дистрибутива, сколько от оконного окружения. Например, если используется LXDE:
- выбираем Главное меню => Preferences => Default applications for LXSession,
- в открывшемся окне переходим на вкладку Autostart,
- в строке Manual autostarted applications вводим полный путь к созданному файлу:
/usr/local/sbin/fix-display-resolution
, - и нажимаем кнопку + Add.