Заметки о консоли. А сколько их надо?

А мы тем временем вернемся к истинно толстовскому вопросу: сколько же виртуальных консолей человеку надо? Ответ на него зависит в первую очередь от преобладающей рабочей среды того человека — Иксы ли это или все-таки консоль.

В первом случае увеличивать число виртуальных консолей не потребуется. Скорее, наоборот, его можно и урезать. Скажем, до трех — для запуска Иксов, для системных манипуляций, ну и одну на всякий пожарный случай. Конечно, экономия ресурсов для современных машин — грошовая, а все же приятно.

А вот если стиль работы — преимущественно консольный, возможны варианты. Можно развести виртуальных консолей практически под каждую возможную задачу, и тогда 8-10 штук — вполне реально будут востребованы. До недавнего времени я придерживался именно такого подхода. И число консолей у меня иногда доходило до 11. Что требовало выработки четкой системы — какие задачи на каких консолях запускаются. А главное — неукоснительно этой системы придерживаться.

Для примера, моя система до недавнего времени была такова (это не пример для подражания, а просто возможный образец). Вне зависимости от числа консолей, последняя из них предназначается исключительно для запуска Иксов, а предпоследняя — для авторизации (при необходимости) в качестве root’а. Первые четыре консоли, напротив, служат для повседневной работы: на первой я пишу, на второй — смотрю ранее написанные тексты по теме (из которых надергиваю фрагменты с помощью мыши), на третьей запущен браузер (links), четвертая зарезервирована для выполнения необходимызх команд и (или) просмотра man-страниц.

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

Очевидный способ открыть новую виртуальную консоль — запустить ту же программу из семейства getty, которая используется для инициации консолей умолчальных, например

$ agetty 38400 vc/9 login

Однако по ряду причин способ этот — не самый удобный. Тем более, что в пакете kbd цели открытия новых консолей служит штатная команда openvt (вероятно, и в console-tools существует аналогичное средство, уже не помню). Она имеет изрядное количество опций (о которых — см. man openvt), однако необходим ей лишь единственный аргумент — имя команды, которая будет исполнена на вновь активизированной консоли (при необходимости для этой команды не возбраняются собственные опции и аргументы). Так, в форме

$ openvt /bin/zsh

она активизирует ближайшую незадействованную консоль (например, 7-ю) и запустит на ней экземпляр командной оболочки Z-Shell, команда

$ openvt login

выведет на следующей (скажем, 8-й) консоли предложение авторизоваться. А команда

$ openvt -l user_name

запустит (в данном примере — на 9-й консоли) сеанс работы именованного пользователя (с его командной оболочкой и всеми профильными настройками).

Номер активизируемой консоли можно задать явно, с помощью опции -c. То есть команда

$ openvt -c 63 mpg321 /path/*.mp3

начнет проигрывать на самой дальней консоли все mpeg-файлы из указанного каталога.

При открытии новой виртуальной консоли следует иметь ввиду, что она не будет полностью идентична по своим свойствам консолям “умолчальным”. В частности, на нее автоматически не будет выведена “магическая последовательность”, обеспечивающая активизацию так называемой карты соответствия (mapscreen), преобразующей кодировку клавиатурного ввода в кодировку экранного вывода. И потому, в случае стандартной для Linux русификации системы (ввод — KOI8, вывод — CP866) просмотреть в ней кириллическоий текст не удастся. Хотя и раскладка клавиатуры нашей новой консоли, и экранный ее шрифт будут вполне кириллическими. Впрочем, активизировать на ней mapscreen можно и вручную, но этому будет посвящена специальная заметка.

Во всех приведенных примерах текущей остается консоль, с которой была дана команда openvt (она называется также управляющей консолью — это понятие нам потребуется в последующих заметках). Чтобы одновременно с запуском процесса переключиться на консоль новообразованную, требуется опция -s. Однако и в том, и в другом случае в консоли, с которой запускалась команда openvt, возвращается приглашение командной строки, и в ней можно продолжать нормально работать. Хотя возможность эту можно и блокировать — с помощью опции -w командная строка в текущей (для openvt) консоли становится недоступной до завершения исполнения команды в консоли новообразованной.

Деактивация новообразованной консоли происходит либо естественным образом, по завершении запущенного на ней процесса (пример с запуском mpeg-проигрывателя), либо по принудительному выходу из работающей здесь программы (в примере с zsh и login — с помощью команды exit, а во втором случае также и logout). Если команда openvt была дана с опцией -w, то есть блокировкой управляющей консоли, то из нее можно и прервать запущенный процесс — обычной клавишной комбинацией Control+C. При этом в примере с login никакой регенерации приглашения авторизоваться не происходит за отсутствием акции respawn.

Деактивированная тем или иным образом консоль как бы продолжает существовать. То есть в нее можно перейти и даже посмотреть на остатки вывода выполнявшихся команд (хотя делать в ней, разумеется, ничего нельзя без повторной активации той же командой openvt). Для полного искоренения такой полуживой консоли предназначена специальная команда — deallocvt. В качестве аргументов ее выступают номера консолей, подлежащих окончательному истреблению. Без аргументов же она уничтожит все деактивированные консоли, то есть те, на которых в данный момент не исполняется никакого процесса. Разумеется, консолей умолчальных она не затронет — ведь на них в любом случае запущен процесс getty и порожденная им команда login.

Открывая консоли на лету, легко увлечься и перевалить за те 12, которые доступны по комбинации клавиш Alt+F# (к слову, количество активизированных консолей в данный момент можно посмотреть с помощью команды fgconsole). Как же получить доступ к этому консольному изобилию?

Во-первых, как уже говорилось, с помощью клавиши PrintScreen в большинстве случаев можно как бы “пролистать” активизированные консоли, начиная с первой. Что, конечно, скучно, если требуется быстрый переход в консоль за номером 13… Во-вторых, доступ к консолям с 13-й по 24-ю обычно возможен по комбинации клавиш Alt+Shift+F#. Однако, как уже было сказано ранее, оба эти способа возможны не всегда, так как зависят и от раскладки клавиатуры, и от ее типа. И к тому же не обеспечивают перехода на консоли с 25-й по 63-ю, буде таковые все же понадобятся.

К счастью, на такой чрезвычайный случай есть специальная, и очень простая, команда, не зависящая ни от чего -

$ chvt #

которая мгновенно перенесет нас в ту консоль, номер которой указан в качестве ее аргумента…

Открывать консоли с помощью команды openvt доступно только для root’а — это определяется правами доступа к файлам устройств неактивизированных консолей, хозяином которых является суперпользователь (активированная же консоль меняет хозяина на того пользователя, который в ней авторизовался). Поэтому любой запущенный на такой новообразованной консоли процесс также будет выполняться от лица администратора (если, конечно, это не процесс login с последующим входом в систему обычного пользователя). Такое положение не всегда желательно с точки зрения безопасности. Избежать же его можно с помощью иного способа активизации консолей, о котором сейчас и пойдет речь.


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

. .