Дисплей

Рассмотрим немного подробнее ту часть syscons, которая отвечает за вывод символов на экран дисплея.

Шрифты

Вообще-то, программа syscons при выводе каждого символа просто отправляет его код в "железку" - видео-контроллер, а тот уже отображает символ на дисплее теми шрифтами, которые у него имеются. Однако, современные видеокарты кроме "зашитых" шрифтов позволяют загружать и другие наборы символов. Это, в частности, позволяет видеокартам изображать символы кириллицы и дополнительные "экзотические" значки, отсутствующие в стандартном шрифте видеокарты.

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

Готовые файлы шрифтов находятся в системе в директории /usr/share/syscons/fonts. Там же есть и файл с кратким описанием шрифтов.

Обратите внимание, что для каждого набора символов существует по крайней мере три разных файла, с разными размерами (в пикселах) символов - 8x8, 8x14, 8x16.

Дело в том, что видеокарта имеет несколько режимов отображения, отличающихся "плотностью" знаков (об этом немного ниже). Если в стандартном режиме, на экране изображается 25 строчек по 80 знаков каждая, то в других режимах на экране может быть 30, 43, 50 или даже 60 строк (естественно, это зависит от модели видеокарты). В одних режимах размер одиночного знака складывается из матрицы 8x16 точек, в других - 8x14 или 8x8. Соответственно, syscons может помнить три разных шрифта, отличающихся размером матрицы, и в нужный момент (при изменении режима отображения) загрузить в видеокарту подходящий шрифт.
  В стандартном режиме (80x25) используются шрифты 8x16, но на всякий случай рекомендуется загружать все три типа шрифтов. Замечу, что обычно шрифты загружаются при старте системы, а какие именно - записано в соответствующих строчках /etc/rc.conf. Поэтому "рекомендуется загружать" означает, просто подправить нужные строчки в rc.conf, а если вы уже выполнили все необходимые действия по русификации системы, то у вас и так уже загружается "все, что нужно". (Подробности о русификации в главе "Русификация syscons")

Заканчивая разговор о шрифтах, надо заметить, что syscons хранит только один набор из трех шрифтов для всех виртуальных терминалов, поэтому перезагрузка шрифтов действует сразу на все терминалы. Другими словами, syscons не предоставляет пользователю возможности иметь разный набор шрифтов для разных "виртуальных терминалов".

Дополнительные таблицы перекодировки (screenmap)

Выше я сказал, что при выводе символа, syscons просто отправляет его код в видео-контроллер. Это не совсем верно.

Перед этим syscons "прогоняет" символ через внутреннюю таблицу перекодировки. Эта "таблица перекодировки" (screenmap) представляет из себя просто табличку из 256 байт, то есть каждый выводимый код символа может быть заменен на код какого-нибудь другого символа. Понятно, что если вам ничего заменять не нужно, эта таблица заполняется такими значениями, которые не меняют исходный код.

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

Но, с другой стороны, если у вас нет под рукой нужного шрифта (например, русские буквы в кодировке cp1251), то составить таблицу перекодировки очень легко с помощью подходящей программы-"перекодировщика". А нарисовать новый шрифт, или хотя бы "перекроить" один из существующих - более трудоемкая задача. Кроме того, "таблица перекодировки" помогает решать и некоторые другие проблемы (например, смотри "Русификация: Зачем так сложно?").

Как и шрифты, screenmap можно заменить с помощью программы vidcontrol (подробности в описании vidcontrol).

Учтите, что "таблица перекодировки" в syscons одна на все виртуальные терминалы (хотя это и не очень приятно). Поэтому ее изменение на одном из виртуальных терминалов отразится и на всех остальных. Правда, в отличии от перезагрузки шрифтов, которая сразу же перерисует символы на всех других терминалах, смена screenmap подействует только на следующий выводимый текст.

Режим отображения (колличество строк и символов на экране)

Как я уже упоминал выше, видео-контроллер может строить изображение на экране с разной "плотностью символов". В стандартном режиме изображение состоит и 25 строк по 80 знаков в каждой. Такой режим называется (в тех терминах, которые понимает vidcontrol) VGA_80x25. В зависимости от типа видеокарты, вы можете получить также режимы - 40x25, 80x30, 80x43, 80x50 и 80x60.

Для переключения режимов можно воспользоваться опять же программой vidcontrol.

Важно отметить, что хотя режим отображения обеспечивается не столько программой syscons, сколько "железкой" - видео-контроллером, syscons позволяет иметь разный "режим отображения" на разных "виртуальных терминалах".
  То есть, изменение режима влияет только на текущий терминал, а когда вы будете переключаться между разными "виртуальными терминалами", syscons будет каждый раз перепрограммировать видео-контроллер, чтобы восстановить на каждом терминале тот режим, который вы ему задали.

И еще надо заметить, что если вы переключите терминал в режим с большим количеством строк (например) это еще не означает, что все программы (редакторы, "коммандеры" и т.п.) будут использовать эту возможность. Для того, чтобы все программы "осознали", что появилось дополнительное пространство на экране, необходимо правильно установить значение "переменной окружения" TERM (тип терминала).
  Если для стандартного режима тип терминала должен быть cons25 или cons25r (r - русифицированный, он же pc3r), то для других режимов надо выбрать - cons30 (cons30r), cons43 (cons43r) и т.п.
  Некоторые программы (например, Midnight Commander) сами могут определять размер экрана (и то, только при старте), но если правильно выставить переменную TERM, это гарантирует вам, что все программы вас правильно поймут.

Screen saver

Надеюсь, все знают - что это такое. Ну, эта та программа, которая рисует какие-нибудь картинки (напрмер - "звездное небо") на экране, если дисплей долго "простаивает", то есть достаточно долгое время ничего на выводится на экран и не вводится с клавиатуры.

Собственно, эта программа не является частью syscons.
Каждый такая программа (а их в FreeBSD предлагается несколько на выбор) представляет собой "загружаемый модуль ядра" (loadabe kernel module) и может быть загружена во время работы системы с помощью стандартной утилиты для загрузки всех подобных модулей - modload.

При загрузке screen saver сам сообщает syscons - как его запустить.
Естественно, вы можете регулировать "время простоя", после истечении которого syscons должен запустить screen saver.

Так же как и другие настройки syscons, загрузка screen saver'а обычно выполняется при старте системы. Параметры - тип saver'а и "время простоя" указываются в /etc/rc.conf. Только хочу еще раз обратить внимание на то, что "время простоя" (как и другие параметры syscons) устанавливается с помощью утилиты vidcontrol, а вот "тип saver'а" выбирается просто загрузкой соответствующего модуля командой modload.

Кстати, если вас интересует полный список saver'ов, которые вы можете использовать, не доверяйте тому перечню, который дан в комментариях в файле rc.conf, он может быть неполным. Просто загляните в директорию /lkm. Файлы, которые имеют в названии слово "saver" и есть то, что вас интересует.


Иван Паскаль [email protected]