Заметки о консоли. Кто равнее?

Равноценны ли виртуальные консоли? Чтобы ответить на этот вопрос, придется обратиться к истории. Во времена былинные, до рождества PC’ева, существовали так называемые большие машины (mainframe), которые жили своей самостоятельной жизнью в специально отведенных заповедниках, куда пользователям путь был заказан. И общались с ними пользователи посредством так называемых терминалов — локальных мониторов и клавиатур, не имевших собственных вычислительных ресурсов — все они были сосредоточены в главной машине, предоставлявший их терминалам через последовательные линии связи (но нынешнему, COM-порты). Власть пользователей была ограничена, каждый управлял только своим терминалом, и не имел (теоретически) никакой возможности повлиять на систему в целом.

Однако имелся среди пользователей один умник, который всех напаривал (пардон, всем управлял). Он назывался root-оператором (или просто root’ом), обладал всевластием в масштабе данной системы и реализовывал это всевластие с собственного, всевластного, терминала. Вот этот-то терминал всевластия и назывался консолью в предначальном смысле этого слова.

Казалось бы, консоль — точно такой же терминал, что и любой пользовательский. Однако root, обладая тайным знанием — своим собственным паролем, от которого его всевластие и зависело, мог засадить в систему все хитрости свои, все меры защиты, и все такое. В частности — запрещение авторизоваться root’ом с любого другого терминала, кроме консоли. А для напаривания (опять пардон, управления) пользователями он делал так, чтобы на консоль выводились все системные сообщения (в том числе сообщения об ошибках и информация об авторизации пользователей), почему консоль root’а и получила название системной.

Однако PC уравняла пользователей в правах не хуже известного дивайса полковника Кольта. И хотя даже на персоналке в любой Unix-системе по прежнему имеется всевластный root, в роли его обычно выступает сам пользователь настольной машины, И в его праве предоставить самому себе возможность авторизоваться root’ом или обычным пользователем с любой из виртуальных консолей (случай ущемления прав в домашних многопользовательских системах не рассматриваем, это — дело семейное). Можно организовать даже автоматический беспарольный вход в систему на любой из активизируемых при загрузке консолей.

Другое дело, что и тут можно зарезервировать для целей управления какую-либо одну консоль (запретив с остальных авторизацию root’ом). А также отвести отдельную консоль для вывода системных сообщений и сообщений об ошибках. Однако от рождения все виртуальные консоли равноправны. Несколько “равнее” других только текущая (в данный момент) консоль — именно на нее по умолчанию выводятся системные сообщения (если вообще вывод их не подавлен, как часто делается на настольных машинах). Разумеется, она же служит и для отображения ввода, если не используются специальные приемы перенаправления.

Изначальное равноправие консолей — одно из отличий Linux’а от FreeBSD. В последней первая (называемая также системной) консоль до сих пор несколько равнее прочих. Правда, для пользователя это ее превосходство оборачивается неудобствами: на нее по умолчанию сыпется куча всякой системной информации. От чего не всегда удается даже перенаправлением ее в устройство /dev/null: например, сообщение о присоединении/отсоединении USB-накопителя окажутся на ней в любом случае.

Еще одно отличие текущей консоли от всех прочих проявляется при запуске с нее какой-либо программы графического режима, например, Иксов (а при этом в первую очередь запускается вполне конкретная программа — X-сервер) или приложений, основанных на библиотеке SVGAlib (последних, правда, немного, кроме знаменитого Doom’а это, пожалуй, только графический вьювер zgv). В этом случае текущая консоль как бы блокируется вплоть до выхода из Иксов (или из SVGAlib-программы). А для запущенной с нее программы активизируется новая виртуальная консоль (об активизации новых консолей — в следующем разделе), перехватывающая на себя и стандартный ввод, и стандартный вывод, то есть становящаяся текущей.

Хотя на самом деле блокировки консоли, с которой запущенны Иксы, не происходит (спасибо Тихону Тарнавскому, обратившему мое внимание на сей факт). Просто она занимается текущим процессом, сиречь Иксами, который и выводит на нее массу своих служебных сообщений. Так что если запустить Иксы в фоновом режиме, а вывод сообщений куда-нибудь перенаправить (в log-файл или тот же /dev/null), то и эту консоль можно задействовать для нормальной работы.

Отключается в Иксах и традиционная клавишная комбинация перехода — Alt+F# (здесь она зарезервирована для собственных целей). Чтобы вернуться в какую-либо из виртуальных консолей, свободную от Иксов, требуется уже три пальца — Alt+Control+F# (не ради ли единообразия в OpenBSD та же комбинация используется для навигации по виртуальным консолям вообще?).

Забегая вперед, отметим, что использующая графику программа, запущенная из консоли с поддержкой графического режима через frame buffer (кучеряво получилось, впредь для этого попробую использовать термин графическая консоль), занимает только консоль текущую. Правда, программ таких (пока?) очень мало. И со временем не прибавляется.

Уравнение в правах консоли и терминалов привело к тому, что ныне термины (виртуальная) консоль и (виртуальный) терминал часто выступают в качестве синонимов. И это, товарищи, почти правильно — хотя только для настольных персоналок. И то, следует помнить, что если терминал на PC — всегда виртуален, то консоль имеет и физическое воплощение — монитор и клавиатуру, физически прикрученные к данному системному блоку. Можно сказать, что файл устройства консоли (/dev/console) выступает в качестве реинкарнации активного в данный момент виртуального терминала.

Кроме того, слово терминал служит для обозначения программ эмуляции текстовой консоли с ее командной оболочкой в графическом режиме оконной системы X. Однако такие программы правильнее так и называть — эмуляторами терминала (а в запущенном виде — терминальными окнами). И вообще, к Linux-консоли они отношения не имеют, да и к Linux’у вообще — лишь косвенное, так как являют собой обычное Иксовое приложение. Речи о них в этих заметках не будет.

Вот и все общие слова, которые я хотел сказать о консолях. А теперь разговор пойдет о том, сколько же их, консолей, бывает в Linux-системе.


Содержание . .

. .