Консоль FreeBSD. Возможности консольного режима
Итак, консоль, как уже недавно говорилось, -- это совокупность стандартного устройства ввода и вывода, что в случае персонального компьютера подразумевает клавиатуру и монитор (мышь тоже может использоваться в консольном режиме и даже некоторым образом управляется через syscons
, хотя собственно к консольному драйверу она отношения не имеет). А ведь большую часть рабочего времени любой пользователь проводит, вперив глаза в экран и барабаня пальцами по клавишам. И потому естественное его желание -- наилучшим образом приспособить то и другое к своим потребностям. Ну а syscons
-- он способен удовлетворить эти потребности если и в неограниченном объеме, то - очень к тому близко.
Перво-наперво, в распоряжении пользователя оказывается не одна консоль, а изрядное их количество -- т.н. виртуальные консоли, каждая из которых, с некоторыми оговорками, может рассматриваться как самостоятельный экран со своей клавиатурой. На каждой из виртуальных консолей может быть запущена своя задача, между ними возможно не
только практически мгновенное переключение, но и обмен данными. Именно это -- один из наиболее эффективных способов использования пресловутой многозадачности FreeBSD, ничуть не уступающий в ряде случаев тем, что реализуются через оконные графически интерфейсы.
Впрочем, институт (если так можно выразиться) виртуальных консолей -- отнюдь не привилегия именно FreeBSD: аналогичный механизм предлагает любая уважающая себя Unix-система. Однако реализация этого института в каждой из них имеет свою специфику.
Во FreeBSD максимально возможное число виртуальных консолей определяется при конфигурировании ядра и по умолчанию составляет 16. Что, конечно, уступает 63-м теоретически доступным консолям в Linux (где их может быть 63), но мне представляется вполне достаточным.
В отличие, опять же, от Linux, где новые консоли создаются по мере потребности, во FreeBSD для этого требуются некоторые действия. Ограничение на максимально возможное их число закладывается в файле конфигурации ядра строкой
options MAXCONS=##
в секции Hardware device Configuration. Я не нашел указаний, можно ли увеличить их число свыше 16 (как говорилось выше, мне и так хватает), но вот уменьшить его ради экономии ресурсов -- труда не составит (впрочем, стоит ли овчинка выделки?).
Тем паче, что сразу по установке системы использовать даже 16 консолей не удастся. И по двум причинам. Первая из них в том, что каждой консоли, как и любому другому устройству, реальному или виртуальному, во FreeBSD (и в Unix вообще) должен соответствовать файл устройства в каталоге /dev
. Для консоли таковыми являются /dev/ttyv#
, где #
-- номер консоли, как почти всегда в Unix -- начиная с нуля; консоли с номером выше 9 получают значения латинских букв в алфавитном порядке.
Так вот, таких устройств поначалу обнаруживается (всего-то навсего!) двенадцать -- от dev/ttyv0
до dev/ttyvb
. Это -- в версиях 4.x, в прежних версиях их было еще меньше. И если этого оказывается недостаточным,
дополнительные консоли следует создать командой MAKEDEV
.
Не исключено при этом, что этой командой устройство создаваться откажется,
сославшись на ошибку в определении номера устройства. Ничего страшного в этом
нет -- следует только обратиться непосредственно к команде создания устройства
-- mknod
(MAKEDEV
-- это всего лишь сценарий, несколько автоматизирующий этот процесс).
Для использования mknod
следует знать такие параметры, как тип устройства -- символьный (в нашем случае -- именно он) или блочный, а также старший
(major) и младший (minor) номера создаваемого устройства. Первый из них -- это
идентификатор семейства устройств (в данном случае -- виртуальных консолей),
младший -- идентификатор конкретного экземпляра. Определить их достаточно
легко командой вида
$ls -l /dev/ttyv*
ответом на что будет сообщение вроде
crw------- 1 alv tty 12, 0 23 янв 11:15 /dev/ttyv0 crw------- 1 root wheel 12, 1 23 янв 07:54 /dev/ttyv1 crw------- 1 root wheel 12, 2 23 янв 07:54 /dev/ttyv2 ... crw------- 1 alv tty 12, 11 23 янв 09:40 /dev/ttyvb
Где 12
в пятой колонке -- и есть старший номер устройства, характеризующий виртуальные консоли вообще, а цифры шестой колонки -- номера младшие, суть просто порядковые их номера. Соответственно, для создания файлов устройств консолей с тринадцатой по шестнадцатую дается команда
$mknod /dev/ttyvc c 12 12; ...; mknod /dev/ttyvf c 12 15
где c
-- указание на символьную природу устройства, первое число, 12
-- старший номер устройства, а второе -- младший номер, просто следующий номер по порядку.
Кроме того, консоль доступна пользователю только в том случае, если она
описана в соответствующем конфигурационном файле (/etc/ttys
), во-первых, на ней запущен какой-либо процесс -- во-вторых, и она активизирована -- в третьих. Описание консоли -- это всего-навсего строка вида
ttyv# "/usr/libexec/getty Pc" cons25r on secure
где первое поле -- имя файла соответствующего устройства, второе -- тот
самый запущенный на ней процесс (а именно -- процесс getty
, вызывающий
приглашение пользователю авторизоваться на консоли), а четвертое -- ее активизация (о значении полей третьего и пятого -- чуть ниже). Так вот, по умолчанию в файле /etc/ttys строк такого вида всего восемь, так что при потребности в большем количестве консолей их следует добавить вручную.
Нужно помнить только, что по умолчанию девятая (то есть tty8
) консоль
зарезервирована для запуска оконной системы X (по простому Иксов), почему она и
неактивизирована (значение четвертого поля -- off
). Кроме того, по
умолчанию на ней запущен процесс xdm
(авторизация в графическом
режиме), хотя без этого можно и обойтись:
ttyve "/usr/X11R6/bin/xdm -nodaemon" xterm off insecure
Так вот, для запуска Иксов следует иметь минимум одну такую неактивизированную консоль. Если же есть желание запускать несколько сеансов X'ов (теоретически это несложно) или использовать графические программы, основанные на библиотеке SVGAlib, следует озаботиться соответствующим количеством неактивизированных консолей -- то есть должным количеством записей в файле /etc/ttys
, наличием соответствующих устройств /dev/ttyv#
и, наконец, чтобы это число не превышало максимально разрешенное при конфигурировании ядра. И еще --
консоль, с которой запущены X'ы, становится недоступной в текстовом режиме.
Содержание . . . .