cs_console является терминальным приложением. Существует ситуации, в которых важное значение имеет определение правильных размеров терминала. Примеры таких ситуаций:
· редактирование длинных строк (которые не полностью помещаются в окне терминала);
· паузы при выводе длинной конфигурации по команде show running-config;
· вызов внешних терминальных программ (например, vi, less, top и т.п.) с помощью команды run.
При старте cs_console в некоторых случаях могут возникать проблемы, связанные с некорректным определением размеров терминала. Такие проблемы возникают, если используется системная консоль, подключенная по COM-порту, в том числе, если используется системная консоль NME-RVPN (МСМ).
Примечание: непосредственный доступ к системной консоли NME-RVPN (МСМ) всегда происходит через COM-порт, даже если пользователь осуществляет его из терминальной сессии Cisco IOS по протоколу SSH или telnet.
Далее подробно описаны данные проблемы и рекомендации по их решению.
При старте cs_console происходит определение размеров терминала (ширина и длина):
1. Сначала делается попытка прочитать размеры терминала из переменных окружения:
ширина терминала:
COLUMNS
длина терминала:
LINES
2. Эти переменные окружения могут быть переопределены пользователем при запуске cs_console, например:
COLUMNS=80 LINES=24 /opt/VPNagent/bin/cs_console
Только в случае реальной необходимости, когда система не может корректно определить реальные размеры терминала, следует переопределять переменные окружения. Если выставить некорректные значения, то это может привести к сбоям в работе cs_console и иных терминальных приложений.
3. Если размеры терминала в переменных окружения не выставлялись, то делается попытка прочитать параметры терминала с помощью системного вызова (ioctl).
4. Если системный вызов вернул ошибку или выдал значения ширины и длины, равные 0 (такое происходит, если используется системная консоль, подключенная по COM-порту, в том числе если используется системная консоль NME-RVPN (МСМ)), то делается попытка прочитать характеристики терминала ”co” (ширина) и ”li” (длина) с помощью системного вызова tgetnum.
Следует учитывать, что в подобной ситуации разные операционные системы ведут себя по-разному: одни выставляют некоторые значения по умолчанию (как правило, по описанию используемого терминала), а другие – могут вообще не выставлять данные характеристики.
5. Если ширину и длину терминала получить не удалось ни одним из указанных выше способов, то выставляются значения по умолчанию: ширина – 511, длина – 0.
Примечание: данное поведение отличается от поведения Cisco IOS: там, в подобной ситуации выставляются значения: ширина – 80, длина – 24.
Результат определения размеров терминала (если не используются переменные окружения COLUMNS / LINES) может отличаться в зависимости от:
· типа подключения терминала (COM-порт, SSH и т.п.);
· операционной системы, на которой установлен S-Terra Gate;
· клиентского терминального приложения, используемого для подключения к консоли.
Проверить размеры терминала в запущенной консоли можно с помощью команды show terminal.
Если cs_console уже стартовала, а в ней заданы некорректные размеры терминала, то их можно исправить с помощью команд terminal width / terminal length.
Возможна реакция cs_console на изменение размеров терминала, если для этого существует техническая возможность:
Данную реакцию можно наблюдать, например, следующим образом: начать вводить очень длинную строку, инициирующую горизонтальный скроллинг; и после этого изменить ширину терминального окна.
Реакция на изменение размеров терминала: перерисовка строки происходит только после ввода следующего символа или нажатия управляющей клавиши.
Наличие или отсутствие реакции на изменение размеров терминала также зависит от разных факторов:
типа подключения терминала (COM-порт, SSH и т.п.);
клиентского терминального приложения, используемого для подключения к консоли.
Как правило, реакция на изменение размеров окна:
присутствует в случае подключения по SSH (при условии, что клиентское приложение корректно обрабатывает изменение размеров терминального окна и оповещает SSH-сервер о нем);
отсутствует при подключении к системной консоли по COM-порту, в том числе к системной консоли NME-RVPN (МСМ).
Если размеры терминала переопределены с помощью команд terminal width, terminal length, то реакция на изменение размеров терминала отсутствует (значения, заданные в этих командах, считаются более приоритетными).