Как уже было сказано, в случае настольной машины консоль - это сочетание
    экрана монитора и клавиатуры (мышь пока оставим в покое). То есть некая физическая
    реалия, правда? Правда, чистая правда, но - не вся правда. 
  Потому что одно из первых открытий, которое совершал ранее начинаюший линуксоид,
    - так называемые виртуальные консоли. Помнится, меня на первой фазе знакомства
    с Linux'ом они просто привели в восторг (каковой не ослабевает и по сей день).
    Нынче - не то: пользователь ну очень дружественного к нему дистрибутива,
    где по умолчанию устанавливается графический вход в систему, имеет шанс просто
    не узнать о них... 
  Виртуальные консоли - это (почти) самостоятельные системы (правда, работающие
    за счет одних и тех же ресурсов), в каждой из которых может быть открыт отдельный
    сеанс работы пользователя (или пользователей - а даже в самой-рассамой персональной
    Linux-системе их как минимум двое, включая root'а) и запущен совершенно независимый
    круг задач (включая оконную истсему X), со своими собственными настройками,
    наиболее для этого круга подходящими. 
  По умолчанию в большинстве дистрибутивов Linux активизировано шесть витруальных
    консолей (во FreeBSD, например, - восемь). Переключение между ними традиционно
    осуществляется комбинацией клавиш Alt+(F1-F6), клавиша PrtScr перемещает
    в следующую, после текущей, виртуальную консоль. Кроме того, т.н. Win-клавиши,
    без которых не обходится ни одна современная "доска", по умолчанию также
    служат для навигации по виртуальным консолям, позволяя перейти, скажем, к
    последней использвовшейся, и т.д. - точно не помню, потому что всегда переопределяю
    их назначение. 
  Раз уж зашла речь о переопределении - сделаю два маленьких замечания. Во-первых,
    комбинация Alt+F# для перехода между консолями не являет собой нечто предопределенное
    божественным промыслом. Ибо зависит исключительно от текущей раскладки клавиатуры,
    о чем подробнее будет говориться в одной из следующих заметок. Другое дело,
    что во всех известных мне штатных раскладках для Linux (и FreeBSD) именно
    эта комбинация задействована под навигацию по консолям (тогда как в раскладках
    OpenBSD, например, используется комбинация Alt+Control+F#). Но при желании
    такое положение дел можно изменить (и об этом также речь пойдет впереди)
    - другой вопрос, нужно ли это делать. 
  Во-вторых, на некоторых мультимедийных клавиатурах и клавиатурах ноутбучного
    типа, с которыми мне приходилось сталкиваться, дополнительные win-клавиши
    категорически отказывались выполнять свои навигационные функции. И вообще,
    следует помнить, что во всех Unix-системах, вследствие их кросс-платформенности,
    гарантированно однозначно ведут себя только основные алфавитно-цифровые клавиши,
    прочие же (стрелки управления курсором, клавиши на цифровом блоке, даже Delete
    и Backspace) в общем случае отнюдь не обязаны выполнять привычные пользователям
    связки PC-Windows обязанности. 
  К слову сказать - именно в этом одна из причин неувядающей популярности
    текстового редактора vi (и его клонов) среди системных администраторов: в
    какой бы системе своего подшефного зоопарка он ни оказался, его не оставит
    чувство уверенности в том, что привычные клавиши командного режима (под которые
    задействована только основная часть "доски") будут всегда вести себя совершенно
    однозначно. 
  Однако я отвлекся, вернемся к нашим консолям. Я уже говорил, что каждая
    виртуальная консоль может рассматриваться как самостоятельная, индивидуально
    настроенная, система. С оговоркой - "почти". Потому что в том, что касается
    пользовательских настроек программного уровня, это верно безусловно: авторизовавшись
    на второй консоли от лица другого пользователя, мы получаем рабочую среду,
    свойства которой описаны в его пользовательских конфигурационных файлах.
    Однако что касается собственно свойств консоли - тут существуют многочисленные
    ограничения. 
  Одни из свойств консоли (такие, как цвет шрифта и фона) действительно могут
    быть настроены независимо для каждой виртуальной консоли. Однако самые важные
    для пользователя характеристики - шрифт и раскладка клавиатуры, - загружаются
    для всех консолей сразу. Также на все консоли распространяется и карта соответствия
    (так называемая mapscreen) кодировки ввода (то есть раскладки клавиатуры)
    и кодировке вывода (то есть экранного шрифта), о чем подробнее будет говориться
    в заметке о русификации. Хотя (и это важно) карта соответствия не активизуется
    одновременно с активизацией произвольной виртуальной консоли. Тем не менее,
    настроить одну консоль на вывод русских текстов в кодировке KOI8-R, другую
    - в Windows-кодировке, а третью - так вообще в Unicode, без дополнительных
    ухищрений (о которых я скажу в свое время) не удастся. 
  Равноценны ли виртуальные консоли? Чтобы ответить на этот вопрос, придется
    обратиться к истории. Во времена былинные, до рождества PC, существовали
    так называемые большие машины, которые жили своей самостоятельной жизнью
    в специально отведенных заповедниках, куда пользователям путь был заказан.
    И общались с ними пользователи посредством так назваемых терминалов - локальных
    мониторов и клавиатур, не имевших собственных вычислительных ресурсов - все
    они были сосредоточны в главной машине, предоставлявший их терминалам через
    последовательные линии связи (но нынешнему, COM-порты). Власть пользователей
    была ограничена, каждый управлял только своими данными, и не имел (теоретически)
    никакой возможности повлиять на систему в целом. 
  Однако имелся среди пользователей один умник, который всех напаривал (пардон,
    всем управлял). Он назывался root-оператором (или просто root'ом), обладал
    всевластием в масштабе данной системы и реализовывал это всевластие с собственного,
    всевластного, терминала. Вот этот-то терминал всевластия и назывался консолью
    в предначальном смысле этого слова. 
  Казалось бы, консоль - точно такой же терминал, что и любой пользовательский.
    Однако root, обладая тайным знанием - своим собственным паролем, от которого
    его всевластие и зависело, мог засадить в систему все хитрости свои, все
    меры защиты, и все такое. В частности - запрещение авторизоваться root'ом
    с любого другого терминала, кроме консоли. А для напаривания (опять пардон,
    управления) пользователями он делал так, чтобы на консоль выводились все
    системные сообщения (в том числе сообщения об ошибках и информация об авторизации
    пользователей), почему консоль root'а и получила название системной. 
  Однако PC уравняла пользователей в правах не хуже дивайса полковника Кольта.
    И хотя даже на персоналке в любой Unix-системе по прежнему имеется всевластный
    root, в роли его обычно выступает сам пользователь настольной машины, И в
    его праве предоставить самому себе возможность авторизоваться root'ом или
    обычным пользователем с любой из виртуальных консолей (случай ущемления прав
    в домашних многопользовательских системах не рассматриваем, это - дело семейное).
    Можно организовать даже автоматический беспарольный вход в систему на любой
    из активизируемых при загрузке консолей. 
  Другое дело, что и тут можно зарезервировать для целей управления какую-либо
    одну консоль (запретив с остальных авторизацию root'ом). А также отвести
    отдельную консоль для вывода системных сообщений и сообщений об ошибках.
    Однако от рождения все виртуальные консоли равноправны. Несколько "равнее" других
    только текущая (в данный момент) консоль - именно на нее по умолчанию выводятся
    системные сообщения (если вообще вывод их не подавлен, как часто делается
    на настольных машинах). Разумеется, она же служит и для отображения ввода,
    если не используются специальные приемы перенаправления (но это - тема разговора
    о командных оболочках). 
  Еще одно отличие текущей консоли от всех прочих проявляется при запуске
    с нее какой-либо программы графического режима, например, Иксов (а при этом
    в первую очередь запускается вполне конкретная программа - X-сервер) или
    приложений, основанных на библиотеке SVGAlib (последних, правда, немного,
    кроме знаменитого Doom'а это, пожалуй, только графический вьювер zgv). В
    этом случае текущая консоль просто блокируется вплоть до выхода из Иксов
    (или из SVGAlib-программы). А для запушенной с нее программы активизируется
    новая виртуальная консоль (об активизации новых консолей - в следующем разделе),
    перехватывающая на себя и ввод, и вывод, то есть становящаяся текущей. Блокируется
    при этом и традиционная клавишная комбинация перехода - Alt+F#. Чтобы вернуться
    в какую-либо из виртуальных консолей, свободную от Иксов, требуется уже три
    пальца - Alt+Control+F# (не ради ли единообразия в OpenBSD она же используется
    для навигации по виртуальным консолям вообще?). 
  Забегая вперед, отметим, что использующая графику программа, запущенная
    из консоли с поддержкой графического режима через frame buffer (кучеряво
    получилось, впредь для этого попробую использовать термин фрейм-консоль),
    занимает только консоль текущую. Правда, программ таких (пока?) очень мало... 
  Уравнение в правах консоли и терминалов привело к тому, что ныне термины
    (виртуальная) консоль и (виртуальный) терминал часто выступают в качестве
    синонимов. И это, товарищи, почти правильно - хотя только для настольных
    персоналок. И то, следует помнить, что если терминал на PC - всегда виртуален,
    то консоль имеет и физическое вполощение - монитор и клавиатуру, физически
    прикрученные к данному системному блоку. Можно сказать, что файл устройства
    консоли (/dev/console) выступает в качестве реинкарнации активного в данный
    момент виртуального терминала. 
  Кроме того, слово терминал служит для обозначения программ эмуляции текстовой
    консоли с ее командной оболочкой (а в следующем разделе будет показано, что
    консоль в большинстве случаев тесно сопряжена с шеллом) в графическом режиме
    оконной системы X. Однако такие программы правильнее так и называть - эмуляторами
    терминала (или терминальными окнами). И вообще, к Linux-консоли они отношения
    не имеют, да и к Linux'у вообще - лишь косвенное, так как являют собой обычное
    Иксовое приложение. Речи о них в этих заметках не будет. 
  В заключение - несколько номенклатурных замечаний. Как известно, все, что
    существует в Unix-системе статически - суть файлы, в том числе физические
    или виртуальные устройства. И консоли тут - не исключение, каждой из них
    соответствует свой файл в каталоге /dev. Выше упоминалось, что физической
    консоли соответствует файл /dev/console, имеющий идентификатор группы устройств,
    так называемый старший (major) номер устройства, равный 5, и идентификатор
    конкретного устройства, младший (minor) номер, равный 1. 
  Виртуальные консоли в Linux'е ранее ставились в соответствие файлам вида
    /dev/tty??, где ?? соответствовал порядковому номеру устройства и мог изменяться
    в пределах от 0 до 63 (почему - будет подробно рассказано в следующей заметке),
    хотя в реальности их могло быть меньше. Старший номер всех их был равен 4,
    младший - был идентичен номеру устройства. 
  В большинстве современных Linux-дистрибутивов используется так называемая
    файловая система устройств (devfs), вносящая существенные коррективы в номенклатуру
    последних. Согласно ей, файлы устройств виртуальных консолей сгруппированы
    в каталоге /dev/vc/ (в некоторых системах имя каталога, в который монтируется
    devfs, может быть иным). И именуются они просто своими номерами - /dev/vc/1,
    dev/vc/2 и так далее, каковые и выступаю заодно в качестве младших номеров
    устройств (старший номер остается прежним - 4). 
  Во всех известных мне дистрибутивах, задействующих devfs, используется также
    демон devfsd, обеспечивающий обратную совместимость с файлами устройств в
    старой номенклатуре (собственно, дело не только в поддержке старой номенклатуры,
    но это выходит за рамки сегодняшней темы). И потому в каталоге /dev можно
    обнаружить и файлы устройств виртуальных консолей типа /dev/tty??. Однако
    это - лишь символические ссылки на файлы реальных устройств, в чем легко
    убедиться командой 
  $ ls -l /dev/tty*
  которая выведет список вида 
lr-xr-xr-x	1 root	root	4 Июн  8  2003 /dev/tty0 -> vc/0
lr-xr-xr-x	1 root	root	4 Июн  8  2003 /dev/tty1 -> vc/1
lr-xr-xr-x	1 root	root 	5 Июн  8  2003 /dev/tty10 -> vc/10
lr-xr-xr-x	1 root	root 	5 Июн  8  2003 /dev/tty11 -> vc/11
и так далее. 
Однако теоретически при использовании devfs наличие файлов устройств старого
  образца отнюдь не обязательно и зависит от настроек демона devfsd в файле /etc/devfsd.conf.
  А, например, в моей самостройной системе я вообще отказался от обратной совместимости,
  и никаких tty?? в ней нету. От чего, к слову, никаких неудобств я не испытываю.
  И во всех остальных заметках молчаливо подразумечается использование файловой
  системы устройств. 
Вот и все общие слова, которые я хотел сказать о консолях. В  следующей
    заметке   разговор пойдет о том, сколько же их, консолей, бывает в Linux-системе. 
содержание       назад       вперед