Консоль FreeBSD. Видеорежимы

Вспомним для начала, что консоль -- это (в контексте данного труда)
диалектическое единство экрана монитора и клавиатуры. Каждый из этих
компонентов, как легко догадаться, настраивается независимо друг от друга.
Для чего в составе syscons имеется две самостоятельные программы -- vidcontrol и kbdcontrol, соответственно. Любой пользователь сначала смотрит на экран, а потому уж начинает молотить по клавишам (хотя, вероятно, есть и исключения -- вроде чукчи-писателя, но отнюдь не читателя). Поэтому и мы начнем,
благословясь, с экрана. То есть -- с программы vidcontrol. И сначала -- с ее
возможностей по расширению объема выводимой информации.

Первая ассоциация, возникающая при слове "экран" -- это его разрешение (или, как часто говорят, применительно к текстовой консоли, режим отображения). Поскольку экран консоли -- явление текстового режима, то и разрешение его (за одним исключением, о котором -- позднее) оценивается в количестве символов по горизонтали (т.н. колонках) и по вертикали (строках). Так, стандартное разрешение консоли FreeBSD по умолчанию -- 80x25 (80 колонок при 25 строках). Что, разумеется, возможно исключительно при моноширинных шрифтах, каковые только в консоли и используются (впрочем, к этому мы тоже еще вернемся).

Говоря о консольной мыши, я вскользь упоминал, что, каков бы ни был размер
текстового массива по обеим координатам, в каждый момент времени можно
манипулировать только с тем его блоком, который виден на экране. Поэтому
возникает естественное желание уместить на нем как можно больше информации. На что подвигают пользователя и все увеличивающиеся диагонали мониторов. Ведь
согласитесь, смешно видеть на крутой "семнашке", а то и "девятнашке", ровно
столько же, сколько и на утильном 14-дюймовом VGA десятилетней давности. К
счастью, стандартное разрешение не есть нечто непреходящее, как
общечеловеческие ценности. И с помощью vidcontrol с указанием нового
видеорежима в качестве аргумента легко может быть изменено.

Список доступных режимов можно посмотреть на соответствующей странице
документации (man vidcontrol):

mode	Select a new video mode.  The modes currently recognized are:	80x25, 80x30, 80x43, 80x50, 80x60, 132x25, 132x30, 132x43,	132x50, 132x60, VGA_40x25, VGA_80x25, VGA_80x30, VGA_80x50,	VGA_80x60, VGA_90x25, VGA_90x30, VGA_90x43, VGA_90x50, VGA_90x60,	EGA_80x25, EGA_80x43, VESA_132x25, VESA_132x43, VESA_132x50,	VESA_132x60.  The raster text mode VESA_800x600 can also be cho-	sen.  See Video Mode Support below.

Из чего следует вывод, что легко изменить плотность строк -- до 30, 43, 50 или 60). Для чего дается команда

#vidcontrol 80x30

где в качестве аргумента можно указать любой из видеорежимов, от 80x25 до 80x60. Правда, не на каждой видеокарте все эти режимы обязаны быть доступными. Кроме того, при очень высокой плотности строк буквы (особенно русские) могут приобрести крайне уродливый вид. Но это -- уже проблема шрифтов, о которых пока не говорим.

Однако таким образом мы увеличиваем лишь количество строк, ничуть не увеличивая рабочую область по горизонтали. Тогда как manual толсто намекает нам, что есть режимы с 90 и даже 132 колонками. Не говоря уже о загадочном разрешении 800x600, кажущемся чуждым текстовому режиму. Однако немедленная попытка опробовать эту экзотику успехом не увенчается -- последует сообщение об отсутствии поддержки таких режимов.

Чтобы воспользоваться предлагаемым vidcontrol богачеством режимов, потребуется пересборка ядра. Если обратиться к общему файлу его конфигурации (/usr/src/sys/i386/conf/LINT), то в его секции Hardware
device Configuration
можно при должном внимании обнаружить строки

#options   VGA_WIDTH90#options   VESA

первая из которых отвечает за 90-колоночный, а вторая -- за
132-колоночный режим. Каковые и будут доступны, если перетащить их в
свой файл конфигурации ядра, снять комментарии, а само ядро --
перекомпилировать. Ну и перезагрузить машину, естественно...

Для получения же режима квази-SVGA (800x600) ищем в том же LINT'е строку

#options   SC_PIXEL_MODE

Далее -- тем же порядком. Результат, как сказал бы поручик Ржевский,
- бесподобен. Правда, на моем мониторе растянуть изображение в этом
режиме на весь экран так и не удалось, так что радости от него
оказалось мало. Но теоретически -- интересно.

Впрочем, ныне возможности по настройке графической консоли во FreeBSD гораздо шире и будут рассмотрены отдельно. Правда, на примере DragonFly BSD, где они впервые появились -- но, будучи портированы обратно во FreeBSD, они абсолютно одинаковы.

Остаётся добавить, что таким образом (через vidcontrol) разрешение
экрана устанавливается только в текущей консоли. Вернее, в консоли, на которую направлен или перенаправлен стандартный вывод команды, но обычно это одно и то же. И, разумеется, изменение видеорежима имеет силу только в текущем сеансе работы, до перезагрузки машины. Если есть желание пользоваться плодами своего труда постоянно, да еще и на всех консолях -- следует подредактировать файл /etc/rc.conf, а
именно -- вписать в него строку, например,

allscreens_flags="80x30"

или что еще душе угодно. В принципе никто не мешает установить разные разрешения для отдельных виртуальных консолей, но это потребует несколько иной формы перенаправления вывода (и внесения соответствующих строк не в /etc/rc.conf, а, скорее, куда-нибудь вроде /etc/rc.syscons). Я в этом смысла не вижу и предоставляю изучение такой возможности заинтересованным лицам.


Содержание

. .