1. Общие сведения
    1.1 Что такое эмулятор терминала?
    1.2 Буфер обратной прокрутки экрана терминала
    1.3 Поиск информации в буфере обратной прокрутки терминала
    1.4 Копирование и вставка текста через клипборд
    1.5 Разделение сессии терминала между многими пользователями
2. Описание встроенного терминала Proxy32
    2.1 Органы управления в окне встроенного терминала
    2.2 Создание и подключение нового окна встроенного терминала
    2.3 Прокрутка буфера во встроенном терминале
    2.4 Закладки и поиск в буфере обратной прокрутки терминала
    2.5 Операции копирования и вставки через клипборд
    2.6 Разделение сессии терминала между многими пользователями
    2.7 Управление скоростью потока принимаемых данных в терминале

1. Общие сведения

1.1 Что такое эмулятор терминала?

Терминал функционально состоит из клавиатуры, экрана и модуля подключения, который соединяет клавиатуру и экран с местным или удаленным компьютером, чтобы посылать текстовые команды с клавиатуры и получать в ответ текст с результатами выполнения команд на экран.

Аппаратно реализованные терминалы в настоящее время практически вытеснены персональными компьютерами, на которых запущены программы, которые называются эмуляторами терминалов. В таких программах экран терминала представлен окном программы эмулятора терминала, а роль клавиатуры терминала выполняет клавиатура персонального компьютера.

В программе эмулятора терминала модуль подключения позволяет подключаться либо напрямую к программе текстового управления местным компьютером (local shell), либо через протоколы COM-PORT, TELNET, SSH, TELNET-TLS к программе текстового управления удаленным компьютером (remote shell).

Программа эмулятора терминала должна иммитировать поведение аппаратного терминала. Она должна понимать все команды управления экраном, которые понимал конкретный аппаратный терминал, который она иммитирует. Наиболее популярный набор иммитируемых команд соответствует аппаратному терминалу VT100 фирмы DEC. Широко используемый эмулятор терминала XTERM расширил этот набор команд. Было написано много программ, расчитанных на работу с XTERM, поэтому в настоящее время большинство эмуляторов терминала поддерживают набор команд эмулятора терминала XTERM. На практике подавляющее большинство эмуляторов поддерживает не все, а лишь подмножество команд эмулятора XTERM. Если эмулятор терминала используется для замены конкретного аппаратного терминала в существующей системе, то точность эмуляции может иметь большое значение, а если эмулятор терминала используется с современными серверами или телекоммуникационным оборудованием, то обычно используется только очень небольшой набор команд терминала, поэтому точность эмуляции в такой ситуации не является критической.

1.2 Буфер обратной прокрутки экрана терминала

Современные эмуляторы терминалов имеют большой текстовый буфер обратной прокрутки экрана, в котором пользователь может посмотреть все предыдущие команды, которые он посылал и, соответствено, все отклики, которые он получал на эти команды. Размер буфера обратной прокрутки измеряется количеством строк, которые он может хранить. Большинство эмуляторов терминала имеют ограниченный размер буфера обратной прокрутки экрана (в некоторых эмуляторах максимальный размер составляет 128000 строк).

Когда пользователь работает с современным оборудованием через терминал, это оборудование может выдавать на экран терминала миллионы строк диагностической информации. Если эмулятор терминала имеет ограниченный буфер обратной прокрутки, то пользователь может столкнуться с ситуацией, когда необходимая диагностическая информация не помещается в буфер обратной прокрутки. При работе с эмулятором, который имеет ограниченный буфер пользователь должен заранее включить протоколирование сессии терминала в файл, а когда диагностическая информация не помещается в буфер обратной прокрутки, то пользователь должен открыть файл протокола сессии терминала и искать в нем необходимую диагностическую информацию.

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

1.3 Поиск информации в буфере обратной прокрутки терминала

Если буфер обратной прокрутки содержит миллионы строк, то возникает проблема поиска нужной информации в этом буфере. Если пользователь знает, как выглядит необходимая информация, то он может задать образец текста для поиска нужной информации в буфере (если эмулятор терминала имеет функцию поиска текста в буфере). В большинстве случаев пользователь не знает точный образец текста, а знает только отдельные части такого текста, поэтому современные эмуляторы терминала позволяют задавать образец для текстового поиска не только буквально (literal search), но и с помощью специального языка текстовых шаблонов (REGEX search). Когда текстовый поиск по какой-либо причине не дает желаемого результата, то пользователь может прокрутить буфер обратной прокрутки и визуально найти нужную часть диагностической информации.

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

1.4 Копирование и вставка текста через клипборд

Часто пользователю приходится вводить повторяющиеся команды, в которых меняется небольшая часть текста или команды, которые приведены в текстовых документах. В такой ситуации вместо того, чтобы каждый раз печатать команды вручную пользователь может использовать команды копирования и вставки текста через клипборд. Кроме того, иногда диагностическая информация, находящаяся на экране терминала, должна быть выборочно скопирована в текстовый документ. Для этого пользователь также должен использовать команды копирования и вставки текста через клипборд. В эмуляторе терминала, как правило, текст, выделенный в буфере обратной прокрутки экрана копируется на клипборд, а при выполнении операции вставки текст, находящийся на клипборде посылается на удаленный компьютер так, как если бы он был напечатан вручную. Зачастую большую часть времени работы в терминале пользователь проводит, выполняя операции копирования/вставки текста через клипборд. В большинстве эмуляторов терминала текст из буфера обратной прокрутки не копируется на клипборд, если размер этого текста превышает некоторый недокументированный предел, так что пользователь должен экспериментально установить, какой максимальный размер текста он может скопировать на клипборд в один прием. Точно также в некоторых эмуляторах терминала можно вставить текст из клипборда только, если размер текста на клипборде не превышает некоторый недокументированный предел, так что пользователь должен экспериментально установить, какой максимальный размер текста можно вставить из клипборда в один прием. Если пользователь должен скопировать большой объем текста из терминала в текстовый документ или из текстового документа в терминал, то такие недокументированне ограничения на размер буфера вставки и копирования в терминале существенно осложняют и замедляют работу, вызывая большое количество ошибок. Одной из наиболее часто встречающихся ошибок является вставка неправильного текста из клипборда в терминал, так как пользователь думал, что клипборд содержит один текст, а на самом деле клипборд содержал другой текст. Это происходит потому, что пользователь не имеет возможности видеть содержимое клипборда перед вставкой. В некоторых эмуляторах терминала каждая операция вставки или копирования требует нескольких шагов (несколько нажатий мыши или выбора из выпадающих меню), что может существенно замедлить и осложнить работу, а также приводить к ошибкам. Удобство и надежность работы с клипбордом, в частности, отсутствие ограничений на размер буфера вставки и копирования, простота процедуры выделения/копирования и вставки текста, возможность видеть содержимое клипборда перед операцией вставки и т.д. являются важнейшими функциями эмулятора терминала.

1.5 Разделение сессии терминала между многими пользователями

При работе с современным оборудованием часто требуется привлечение большого числа людей, каждый из которых является экспертом по отдельным компонентам оборудования. Для этого в современных эмуляторах терминала имеется функция разделения одной сессии терминала между многими пользователями. При использовании такой функции терминал основного пользователя подключается непосредственно к удаленному оборудованию, а терминалы привлеченных экспертов подключаются к терминалу основного пользователя. При этом все пользователи могут посылать со своего терминала текстовые команды в удаленное оборудование (по очереди) и все пользователи могут видеть в своем терминале результаты выполнения команд. Наличие функции разделения сессии терминала между многими пользователями является важнейшей характеристикой современного эмулятора терминала.

Встроенный терминал Proxy32 был разработан с учетом всех перечисленных выше требований к современному эмулятору терминала.

2. Описание встроенного терминала Proxy32

2.1 Органы управления в окне встроенного терминала

linked/annotated-terminal-picture.png

linked/annotated-terminal-picture.png

  1. Titlebar icon
  2. Red frame of active terminal
  3. Titlebar
  4. Menubar
  5. Work area
  6. Fine scrollbar
  7. Coarse scrollbar
  8. LauncherTree Bookmarks
  9. TLS on/off (for Terminal session sharing server)
  10. Terminal session sharing server TCP port number (TELNET or TELNET-TLS)
  11. List of terminals connected to Terminal session sharing server (TELNET or TELNET-TLS)
  12. List of bookmarks and search results for search in the terminal scrollback buffer
  13. List of automatically bookmarked commands in the terminal scrollback buffer
  14. Clipboard viewer
  15. Received data rate indicator/switch (for the terminal flow control)
  16. Button to manually bookmark selected line in terminal scrollback buffer
  17. Button to search in terminal scrollback buffer
  18. Button to clear search results list (for search in terminal scrollback buffer)
  19. Button to delete selected search result in the search results list (for search in terminal scrollback buffer)
  20. Button to go to next search result in the search results list (for search in terminal scrollback buffer)
  21. Button to go to previous search result in the search results list (for search in terminal scrollback buffer)
  22. Button to open terminal session log file in configured viewer (default is to open terminal log file in Notepad)
  23. "Connect/Disconnect" button
  24. "Disable autoscroll on receiving of the new data" button
  25. "Send received data only to the terminal log file, but not to the screen" button
  26. Absolute number of the first visible line (lines are numbered starting from the beginning of the scrollback buffer)

2.2 Создание и подключение нового окна встроенного терминала

Создание нового окна с помощью кнопки "LauncherTree Bookmarks" (закладки на дереве пускачей) в полоске меню главного окна было описано в разделе, посвященном главному окну (ссылка). Закладки в меню кнопки "LauncherTree Bookmarks" являются лишь ссылками на пускачи, уже созданные в плавающем окне LauncherTree. При использовании закладок новое окно создается в результате выполнения пускача на дереве LauncherTree, а закладки просто выполняют пускач, который уже существует.

В Proxy32 новое окно встроенного терминала создается в результате выполнения пускача терминала (SHELL-TERMINAL, TELNET-TERMINAL или COM-PORT-TERMINAL) непосредственно на LauncherTree или через LauncherTree букмарки.

На рис.2 показано дерево пускачей (в плавающем окне LauncherTree), на котором выделен пускач для создания нового окна терминала и его подключения к SSH серверу. Информация о подключении (номер порта, имя пользователя и IP адрес SSH сервера) содержится в конфигурации пускача терминала. Начальный заголовок создаваемого окна содержится в поле тултипов пускача терминала. Остальные начальные настройки создаваемого терминала берутся из глобальных настроек терминала, которые можно изменять в меню Settings/Initial Terminal Settings в окне LauncherTree (ссылка). После того, как терминал создан пользователь может изменять настройки существующего окна по своему вкусу, используя меню окна этого терминала.

linked/screenshoot092.png

linked/screenshoot092.png

Рис.2. Пример пускача терминала для подключения к SSH серверу

Примечание:

  1. Заголовок терминала впоследствии может быть изменен, как вручную пользователем, так и автоматически по команде с удаленного компьютера.
  2. Глобальные настройки терминала могут быть изменены пользователем. Для этого пользователь должен настроить существующее окно терминала по своему вкусу (цвет, шрифт, размер, положение и т.д.), используя меню в окне терминала, а затем сохранить настройки этого окна терминала как глобальные настройки, используя меню File/Save Terminal Settings. После этого все вновь создаваемые окна терминалов будут использовать эти настройки.
После создания окна терминала оно автоматически подключается к COM-PORT, серверу или LOCAL SHELL с использованием информации, которая содержалась в пускаче терминала.

Примечание: Операции, выполняемые с помощью кнопки CONNECT/DISCONNECT, могут быть также выполнены в меню Control в окне терминала (см. ссылку).

Для большинства типов пускачей текст конфигурации пускача может содержать параметры подстановки. Перед выполнением пускача Proxy32 проверяет содержит ли текст конфигурации пускача параметры подстановки. Если параметры подстановки найдены, пользователю выдается диалог. На рис.3-4 представлен пример диалога, который выдается пользователю при создании и подключении окна терминала.

linked/screenshoot090.png

linked/screenshoot090.png

Рис.3. Пример незаполненного диалога ввода параметров для подключения к SSH серверу
linked/screenshoot091.png

linked/screenshoot091.png

Рис.4. Пример заполненного диалога ввода параметров для подключения к SSH серверу

Каждый параметр подстановки имеет название параметра и значение параметра. Название параметра указывается в тексте конфигурации пускача при его создании или редактировании, а значение параметра присваивается ему пользователем при заполнении пунктов диалога. На рис.3-4 в диалоге "SSH Server port", "SSH server IP address", "SSH server user name", "SSH server user password" - это названия параметров, которые автоматически извлекаются из текста пускача и подставляются в диалог. Напротив них в диалоге - значения параметров, которые пользователь вводит (присваивает им) в окне диалога при создании окна.

После того, как пользователь ввел значения параметров в диалоге, он может нажать кнопку OK, чтобы выполнить пускач.

Каждый введенный параметр остается в памяти пока Proxy32 не закроется. Он появляется в диалоге при следующем выполнении этого пускача (или при выполнении любого пускача, который содержит параметр с тем же именем), и пользователь может его редактировать перед нажатием кнопки OK.

Если пользователь хочет, чтобы введенные значения параметров появились в диалоге в следующий раз при запуске программы, то он может поставить галочку “Save on exit” в диалоге против тех параметров, которые он хочет сохранить.

Для каждого параметра подстановки в диалоге (см. рис.3-4) пользователь может выбрать опцию сохранять его значение в файл при закрытии программы Proxy32 (так что это значение будет загружено при следующем старте Proxy32) или нет. Кроме того, для каждого параметра подстановки в диалоге пользователь может выбрать опцию: должен ли Proxy32 предоставлять пользователю возможность модифицировать подставляемое значение перед каждой подстановкой или Proxy32 должен пытаться просто использовать сохраненное значение параметра (если оно уже имеется), не спрашивая подтверждения у пользователя (в этом случае при запуске пускача окно диалога не будет выдаваться пользователю).

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

Рассмотрим, как выглядит параметр подстановки в самом пускаче.

Например, SHELL-TERMINAL с командной строкой "proxycygterm.exe -s '/usr/bin/ssh -o StrictHostKeyChecking=no -o Port=22 -o User=sshuser 192.168.1.9'" запустит местный CYGWIN OpenSSH ssh клиент на CYGWIN TTY, который создан интерфейсной программой proxycygterm.exe и подключит этот ssh клиент к серверу 192.168.1.9 на порт 22, используя имя пользователя sshuser. Если сервер 192.168.1.9 является одним из группы резервных серверов с IP адресами 192.168.1.2 - 192.168.1.9, то пользователю каждый раз перед созданием нового терминала нужно будет уточнять, к какому из 8-ми резервных серверов он хочет подключиться в данный момент. Можно создать 8 пускачей которые отличаются друг от друга IP адресом сервера, и всегда выполнять только один пускач, который содержит нужный IP адрес. А можно редактироать текст конфигурации пускача перед каждым выполнением, чтобы вписать в него нужный IP адрес.

Чтобы избежать этого и облегчить работу пользователя в текст, который присутствует в конфигурации пускача, вводится параметр подстановки. При этом пускач для создания терминала будет иметь следующий вид: "proxycygterm.exe -s '/usr/bin/ssh -o StrictHostKeyChecking=no -o Port=22 -o User=sshuser <PROXYPARM=IP адрес резервного сервера>'".

В этом пускаче "<PROXYPARM=IP адрес резервного сервера>" является параметром подстановки. Параметр подстановки в пускаче заключается в угловые скобки и обязательно содержит в начале (как постоянную часть) "PROXYPARM=". После знака равенства и до замыкающего знака ">" при создании пускача пользователь вводит название параметра, которое при запуске пускача будет выдано пользователю в диалоге. Таким образом, "IP адрес резервного сервера" в приведенном выше пускаче является названием параметра подстановки. Название параметра при создании пускача пользователь может давать сам.

Когда пользователь инициирует выполнение такого SHELL-TERMINAL пускача, Proxy32 обнаружит параметр подстановки с именем “IP адрес резервного сервера”, попросит пользователя задать или модифицировать его значение, выдавая ему диалог, а затем подставит новое значение в текст конфигурации пускача перед его выполнением.

Пускачи в зависимости от решаемой ими задачи могут содержать несколько параметров подстановки. Чем больше параметров подстановки имеется в пускаче, тем больше строк для подстановки в диалоге, выдаваемом пользователю при выполнении пускача.

Из трех типов пускачей терминала только один (SHELL-TERMINAL) поддерживает подстановку параметров.

При выполнении пускача терминала (SHELL-TERMINAL, TELNET-TERMINAL или COM-PORT-TERMINAL) он создает окно встроенного терминала Proxy32, подключает его к local shell, серверу или COM-PORT, а затем он ищет следующий пускач на дереве пускачей, который расположен непосредственно под ним. Если пускач I-SCRIPT или PLUGIN находятся непосредственно под пускачем терминала, то он рассматривается как AUTOLOGIN скрипт для пускача терминала, который находится прямо над ним. Когда пускач терминала успешно подключает свое окно терминала, он автоматически запускает свой AUTOLOGIN I-SCRIPT или PLUGIN пускач, чтобы он завершил процедуру логина автоматически. Обычно AUTOLOGIN скрипт пишется, чтобы посылать имя пользователя и пароль на сервер для аутентикации пользователя. AUTOLOGIN скрипт может содержать параметры подстановки, например, чтобы позволить пользователю задавать/модифицировать имя пользователя и пароль непосредственно перед выполнением пары, состоящей из пускача терминала и AUTOLOGIN скрипта.

Когда терминал отключается, а затем снова подключается с помощью кнопки CONNECT/DISCONNECT, то при таком повторном подключении подстановка параметров и выполнение AUTOLOGIN скрипт происходит также, как и при создании окна.

После того, как пользователь подключился к нужному серверу он может печатать команды на клавиатуре, видеть, как печатаемая команда появляется на экране терминала, а затем нажать клавишу "Enter", чтобы инициировать выполнение команды на сервере и увидеть результаты выполнения команды, которые сервер пошлет в окно терминала.

2.3 Прокрутка буфера во встроенном терминале

Сервер может использовать терминал в двух режимах: - последовательный режим, когда курсор продвигается только за счет того, что сервер посылает на терминал печатные символы или символы табуляции, возврата каретки и перевода строки; - полноэкранный режим, при котором сервер может задавать напрямую координаты курсора, а также управлять всем экраном терминала, например, прокручивать экран терминала или стирать экран терминала.

При работе с современным оборудованием связи обычно используется последовательный режим, работа в котором будет описана далее.

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

Та информация, которая прокручивается наверх и становится невидимой не пропадает, а сохраняется в так называемом буфере обратной прокрутки терминала. Пользователь может всегда просмотреть информацию в этом буфере, используя механизм прокрутки в окне терминала. Буфер терминала можно представить себе как бесконечную ленту, на которой печатаются вновь приходящие строки и каждая строка получает последовательный номер, начиная с 0. При обычной работе в терминале в рабочей области терминала всегда отображается последняя строка буфера, а также несколько строк перед ней, которые помещаются на экране терминала. В терминале Proxy32 номер первой видимой на экране строки (верхней строки) всегда отображается в специальном окошке, которое находится в правом нижнем углу терминала (сноска 26 на рис. 1).

linked/annotated-terminal-picture-separate-copies-ref-26.png

linked/annotated-terminal-picture-separate-copies-ref-26.png

Прокрутку в терминале можно рассматривать как перемещение экрана терминала назад и вперед по ленте буфера терминала, так что в видимую область терминала попадают разные группы строк. Например, если текущий номер первой видимой строки терминала - это 100 и высота экрана терминала составляет 25 строк, то на экране видны строки с номерами от 100 до 124. Если при этом прокрутить терминал назад на самое начало буфера, то на экране терминала будут видны строки с номерами от 0 до 24, т.е. первые 25 строк буфера терминала. Прокручивать буфер терминала можно с помощью полосок прокрутки, колеса мышки и команд клавиатуры.

Встроенный терминал Proxy32 имеет две полоски прокрутки: грубую (сноска 7 на рис. 1) и точную (сноска 6 на рис.1).

linked/annotated-terminal-picture-separate-copies-ref-6-7.png

linked/annotated-terminal-picture-separate-copies-ref-6-7.png

Наличие двух полосок прокрутки помогает в ситуации, когда буфер обратной прокрутки содержит миллионы строк. Чтобы найти нужную информацию пользователь может сначала использовать полоску грубой прокрутки, чтобы быстро переместиться в нужную часть буфера обратной прокрутки с точностью до десятков или сотен тысяч строк. Затем он может использовать полоску точной прокрутки, чтобы найти нужную строку.

Полоска грубой прокрутки позволяет осуществлять прокрутку всего буфера терминала. А полоска точной прокрутки может прокручивать области буфера размером от десятков до десятков тысяч строк. Поэтому пользователь может оперативно изменять скорость прокрутки полоски точной прокрутки. Когда нажата клавиша LeftSHIFT скорость точной прокрутки увеличивается в 8 раз. Когда нажата клавиша LeftCTRL скорость точной прокрутки увеличивается в 32 раза. Когда нажата клавиша LeftALT скорость точной прокрутки увеличивается в 128 раз. Эти клавиши действуют независимо друг от друга, поэтому, например, при одновременном нажатии клавиш LeftSHIFT и LeftCTRL скорость точной прокрутки увеличится в 8x32=256 раз.

Колесо мышки выполняет точно такую же прокрутку как и полоска точной прокрутки, включая использование клавиш LeftSHIFT, LeftCTRL и LeftALT для увеличения скорости прокрутки.

Нажатие клавиш Shift-PageUp или Shift-PageDown вызывает прокрутку на один экран вверх (назад) или один экран вниз (вперед) соответственно, при этом указанные комбинации клавиш никогда не передаются на сервер.

По умолчанию получение новой информации на экран терминала автоматически прокручивает буфер так, что последняя строка буфера с новой информацией становится видна в нижней части экрана терминала. Пользователь может отключить такую автоматическую прокрутку путем нажатия на красную кнопку (сноска 24 на рис. 1).

linked/annotated-terminal-picture-separate-copies-ref-24.png

linked/annotated-terminal-picture-separate-copies-ref-24.png

2.4 Закладки и поиск в буфере обратной прокрутки терминала

Когда буфер обратной прокрутки уже содержит много информации, а пользователь терминала хочет начать новую серию тестов или запустить новую диагностическую процедуру, то для того, чтобы впоследствии найти начало распечатки новой диагностической процедуры пользователь может создать закладку перед началом этой распечатки. Для этого перед началом выполнения тестов пользователь должен выделить с помощью левой кнопки мышки последнюю строку в терминале и нажать на кнопку "B" (Bookmarks - сноска 16) на панели инструментов терминала.

linked/annotated-terminal-picture-separate-copies-ref-16.png

linked/annotated-terminal-picture-separate-copies-ref-16.png

Появится диалог добавления закладки, в котором пользователь может ввести имя закладки и нажать кнопку OK, чтобы добавить закладку к выпадающему списку (сноска 12 на рис. 1), который находится прямо под панелью кнопок в терминале.

linked/annotated-terminal-picture-separate-copies-ref-12.png

linked/annotated-terminal-picture-separate-copies-ref-12.png

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

Когда в результате выполнения последовательности тестов каждый тест выдает большое количество информации, но пользователь заинтересован только в одной конкретной строчке из каждого результата теста, он может использовать функцию текстового поиска в буфере терминала. Эта функция работает следующим образом. Сначала пользователь задает диапазон строк для поиска. Если пользователь выделяет на экране терминала область, которая содержит одну или больше полных строчек, то функция поиска будет искать только в строках, которые находятся в этой выделенной области. Если на экране терминала не выделена область, которая содержит одну или больше полных строчек, то функция поиска будет искать по всем строкам, которые содержатся в буфере терминала. После этого пользователь нажимает на кнопку "S" (Search - сноска 17).

linked/annotated-terminal-picture-separate-copies-ref-17.png

linked/annotated-terminal-picture-separate-copies-ref-17.png

Появляется диалог поиска, в котором пользователь может задать образец текста, который должен содержаться в тех строках, которые ему нужно найти. Образец текста может задаваться как буквально (Literal search) или с помощью специального языка задания шаблонов для поиска (Regular Expressions). Например, если пользователь ищет строчку "PN offset = 64 PN chips", то при буквальном поиске можно использовать как образец строчку "PN offset =", а при поиске с помощью Regular Expressions можно использовать как образец строчку "PN offset = + PN chips", которая обеспечивает более точный поиск. "" - означает, что на этом месте в строке поиска должна находится одна десятичная цифра, а "+" - означает, что на этом месте в строке поиска должна находится одна или больше десятичных цифр. После того, как пользователь задал образец для поиска и нажал кнопку OK в диалоге поиска, начинается процедура поиска, которая пройдет по всем строкам в буфере терминала или по всем выделенным строкам в буфере терминала и автоматически создаст закладки для тех строк, в которых был найден образец поиска. Закладки помещаются в выпадающий список (сноска 12), который находится непосредственно под панелью кнопок терминала, при этом название закладки совпадает с текстом найденной строки и в этом названии выделяется та часть, которая соответствует образцу поиска.

linked/annotated-terminal-picture-separate-copies-ref-12.png

linked/annotated-terminal-picture-separate-copies-ref-12.png

Если результатов поиска слишком много, в список помещается только первые 5 тысяч резултатов. Если открыть список, то можно увидеть все результаты поиска одновременно, что соответствует результатам команды "grep", которая обычно используется для поиска текста в операционных системах UNIX/LINUX. Если выбрать один из результатов поиска в списке, то терминал прокрутится так, что найденная строка окажется в середине экрана, а текст этой строки, который соответствует образцу поиска будет выделен. Результаты нового поиска добавляются в список после результатов предыдущего поиска. Для того, чтобы очистить список пользователь должен нажать кнопку "C" (Clear - сноска 18). Для того, чтобы удалить конкретный результат поиска в списке пользователь должен его выбрать в списке, а затем нажать кнопку "D" (Delete - сноска 19). Для того, чтобы перейти к следующему или к предыдущему результату по списку пользователь должен нажать кнопку "N" (Next - сноска 20) или кнопку "P" (Previous - сноска 21) соответственно.

linked/annotated-terminal-picture-separate-copies-ref-18-19-20-21.png

linked/annotated-terminal-picture-separate-copies-ref-18-19-20-21.png

Другой выпадающий список (сноска 13 на рис. 1) содержит закладки для строчек, на которых пользователь печатал команды на терминале.

linked/annotated-terminal-picture-separate-copies-ref-13.png

linked/annotated-terminal-picture-separate-copies-ref-13.png

Эти закладки создаются автоматически по мере того, как пользователь нажимает клавишу "Enter", чтобы инициировать выполнение команды.

2.5 Операции копирования и вставки через клипборд

После того, как пользователь выполнил серию тестов, просмотрел результаты этих тестов и нашел те результаты, которые его интересовали, он может захотеть сохранить результаты некоторых тестов в отдельный текстовый документ для последующего использования.

Если пользователь хочет сохранить весь протокол сессии терминала целиком, то проще всего использовать файл протокола сессии терминала, который автоматически сохраняется на диске и который может быть открыт в текстовом редакторе Notepad при нажатии на кнопку "L" (Log - сноска 22).

linked/annotated-terminal-picture-separate-copies-ref-22.png

linked/annotated-terminal-picture-separate-copies-ref-22.png

Для просмотра файлов протокола сессии терминала пользователь может назначить любой другой текстовый редактор. Кроме того, пользователь может просматривать файлы протоколов всех окон терминала, в том числе и тех окон, которые были запущены в прошлом и в настоящий момент уже закрыты. Все файлы протоколов терминала хранятся по умолчанию в поддиректории log внутри стартовой директории Proxy32. LogViewer диалог, который вызывается с помощью последней кнопки на тулбаре окна LauncherTree позволяет пользователю производить поиск через все файлы протокола терминала, а также фильтровать или удалять эти файлы. В этом же диалоге назначается текстовый редактор, который по умолчанию используется для просмотра файлов протокола сессии терминала.

Файл протокола сессии терминала по умолчанию создается автоматически при создании окна терминала и содержит в своем имени заголовок окна терминала и дату и время своего создания. Изменение заголовка окна терминала как вручную пользователем, так и автоматически по команде с удаленного компьютера приводит к тому, что старый файл протокола сессии терминала закрывается, а новый файл протокола сессии терминала открывается и в своем имени содержит новый заголовок и новую дату создания файла протокола терминала. Если пользователь хочет получить большое количество текстовой информации с удаленного оборудования, то он может нажать на голубую кнопку (сноска 25), чтобы не посылать принимаемую текстовую информацию в буфер обратной прокрутки терминала, а посылать ее только в файл протокола сессии терминала.

linked/annotated-terminal-picture-separate-copies-ref-25.png

linked/annotated-terminal-picture-separate-copies-ref-25.png

Если пользователь хочет выборочно сохранить только часть диагностической информации, накопленной в буфере обратной прокрутки терминала, то он должен выборочно копировать нужную информацию из буфера обратной прокрутки терминала на клипборд, а затем вставлять эту информацию из клипборда в текстовый редактор. Встроенный терминал Proxy32 автоматически копирует текст на клипборд, когда этот текст выделен в буфере обратной прокрутки терминала. Выделение текста производится мышкой. Начало выделенной области задается нажатием левой кнопки мышки, конец выделенной области задается нажатием правой кнопки мышки. Для выделения небольшой области текста можно поставить мышку в начало выделяемой области, нажать левую кнопку, при нажатой левой кнопке протащить мышку до конца выделяемой области и там отпустить левую кнопку. После этого можно использовать правую кнопку, чтобы расширить область выделения или уменьшить ее, поскольку правая кнопка задает новый конец выделенной области. Двойной левый клик на тексте в буфере терминала выделяет сначала слово внутри строки, ограниченное знаками препинания или пробелами, при повторном двойном нажатии выделяется кусок текста внутри строки между двумя пробелами, а при последующем двойном нажатии выделяется вся строка. Выделенный текст автоматически копируется на клипборд и его можно видеть в окошке вьювера клипборда (сноска 14 на рис. 1), который находится в нижней части окна терминала. После этого пользователь может вставлять текст клипборда в текстовый редактор.

linked/annotated-terminal-picture-separate-copies-ref-14.png

linked/annotated-terminal-picture-separate-copies-ref-14.png

Если пользователь выделил слишком большой кусок текста в буфере обратной прокрутки терминала, то в операционной системе может не хватить памяти, чтобы поместить этот текст на системный клипборд и операция копирования не будет выполнена. Чтобы предотвратить такую ситуацию Proxy32 берет размер выделенного текста в байтах и сравнивает его с заранее заданным в программе порогом, который составляет по умолчанию сто миллионов байт. Если размер выделенного текста превышает заданный порог, то Proxy32 копирует выделенный текст не на системный клипборд, а в текстовый файл, имя которого состоит из слова selection и даты и времени его создания. Файл помещается в ту же директорию, где находятся файлы протокола сессии терминала, а имя и путь к этому файлу отображаются в окошке клипборд вьювера (сноска 14 на рис. 1), чтобы пользователь мог его легко найти. Если размер выделенного текста не превышает заданный порог, то Proxy32 копирует выделенный текст на системный клипборд. На компьютерах со старыми операционными системами, с малым объемом оперативной памяти или на компьютерах, где одновременно запущено очень много программ система может не иметь 100 миллионов байт памяти для размещения текста на системном клипборде. Поэтому указанный порог в 100 миллионов байт может быть скорректирован пользователем в меню "Settings/Initial Terminal Settings/Limit Max Size of Clipboard Selection/Edit ClipboardSelectionMaxSizeBytes" в окне LauncherTree. Если порог установлен так, что он меньше чем максимальный размер системного клипборда, операция копирования текста будет работать без отказов независимо от размера копируемого текста.

Пользователь может запретить использование этого порога в меню "Settings/Initial Terminal Settings/Limit Max Size of Clipboard Selection/Use ClipboardSelectionMaxSizeBytes" в окне LauncherTree. Если этот порог не используется, то Proxy32 будет всегда пытаться копировать выделенный текст на клипборд, не проверяя размер копируемого текста. По умолчанию этот порог включен.

При вставке текста из клипборд этот текст посылается на удаленное оборудование, на которое подключен терминал. Если терминал не подключен, то вставляемый текст игнорируется. Пользователь может видеть содержимое клипборда перед вставкой в окошке клипборд вьювера (сноска 14 на рис. 1).

linked/annotated-terminal-picture-separate-copies-ref-14.png

linked/annotated-terminal-picture-separate-copies-ref-14.png

Максимальный размер текста, который можно вставить за одну операцию составляет до 1 Мб. Операцию вставки можно выполнить с помощью мышки, клавиатуры или через меню терминала. При использовании мышки вставка текста осуществляется при нажатии средней кнопки мышки в рабочей области терминала. Пользователь может задать опцию, при которой вставка текста с помощью средней кнопки мышки выполняется только, если нажата левая клавиша контрл. При использовании клавиатуры операция вставки выполняется с помощью комбинации клавиш "Shift-Insert", указанная комбинация клавиш никогда не посылается на сервер. Меню "Edit/Paste" также выполняет операцию вставки текста.

Когда пользователь выбирает любую из закладок на команды, которые автоматически накапливаются в выпадающем списке (ссылка 13 на рис. 1), то терминал прокрутится так, что строка с выбранной командой окажется в середине экрана, а текст самой команды будет выделен.

linked/annotated-terminal-picture-separate-copies-ref-13.png

linked/annotated-terminal-picture-separate-copies-ref-13.png

При выделении текст команды будет скопирован на клипборд и после этого пользователь сможет увидеть текст команды на клиборд вьювере. Для того, чтобы выполнить эту команду опять пользователю достаточно нажать среднюю кнопку мышки, чтобы вставить текст команды из клипборда в терминал, а затем нажать клавишу "Enter", чтобы инициировать выполнение команды на сервере. Таким образом, выпадающий список (ссылка 13 на рис 1) служит не только для того, чтобы найти начало распечатки результатов каждой из предыдущих команд, но может служить также и для оперативного повторения любой из предыдущих команд.

Поскольку список (ссылка 13 на рис 1) содержит всю историю выполняемых команд в терминале, пользователь может открывать список, чтобы просматривать всю историю выполняемых команд, а также может захотеть сохранить содержимое списка на клипборд или очистить содержимое этого списка. Эти операции могут быть выполнены с помощью меню "Edit/Commands History/Copy Commands History to clipboard" и меню "Edit/Commands History/Clear Command History".

2.6 Разделение сессии терминала между многими пользователями

Для того, чтобы привлечь большое число удаленных пользователей к совместной работе в одной общей сессии терминала, терминал основного пользователя подключается непосредственно к удаленному оборудованию, а терминалы удаленных пользователейподключаются к терминалу основного пользователя. При этом все пользователи могут посылать со своего терминала текстовые команды в удаленное оборудование (по очереди) и все пользователи могут видеть в своем терминале результаты выполнения команд.

Для этого в каждом новом окне встроенного терминала Proxy32 создается свой собственный встроенный TELNET сервер, к которому могут подключаться удаленные пользователи для того, чтобы разделять сессию, запущенную в этом окне терминала. TELNET сервер в каждом из окон терминала использует свой уникальный номер TCP порта для того, чтобы принимать запросы на подключение, приходящие от TELNET терминалов удаленных пользователей. Таким образом, путем выбора номера порта для подключения удаленный пользователь может выбирать к какому из окон терминала основного пользователя он будет подключаться.

По умолчанию в Proxy32 при создании нового окна встроенного терминала номер TCP порта для встроенного TELNET сервера выбирается из списка свободных портов, которые имеются в системе. Если несколько окон встроенного терминала создаются подряд одно за другим, то выбранные номера портов могут оказаться последовательными. Если окно встроенного терминала закрывается, то используемый номер порта освобождается и впоследствии может быть назначен одному из вновь создаваемых окон. По умолчанию пользователь не имеет контроля над тем, какие номера портов выделяются вновь создаваемым окнам терминала. В ситуации, когда TELNET сервер находится за Firewall-ом, то пользователь может выбрать опцию, при которой каждое вновь создаваемое окно будет пытаться использовать заданный начальный номер порта, например, 1300. Если этот номер порта свободен, он будет использован, а если он занят, то это окно будет пытаться использовать следующий номер порта 1301. Процесс будет продолжаться путем увеличения номера порта на единицу до тех пор, пока свободный порт не будет найден и использован. Следующее создаваемое окно терминала будет использовать такой же алгоритм для выбора номера порта. В результате все создаваемые окна будут иметь номера портов в диапазоне 1300 и чуть выше при условии, что этот диапазон портов свободен в системе. Пользователь может включать и выключать этот алгоритм выбора портов, а также выбирать начальный номер порта, который по умолчанию равен 1300. Эти настройки находятся в меню "Settings/Initial Terminal Settings/Terminal Session Sharing". Начальный порт по умолчанию был выбран для использования на Windows XP, а при использовании Proxy32 на других операционных системах начальный порт может быть скорректирован для того, чтобы его значение попадало в диапазон свободных портов, которые позволено использовать в конкретной операционной системе. При использовании Firewall диапазон портов, используемый окнами терминала Proxy32 (в нашем примере диапазон портов, начиная с 1300 и чуть выше) должен быть открыт в Firewall для того, чтобы удаленные пользователи могли подключаться к этим окнам терминала.

Поэтому после того как окно терминала создано основной пользователь должен сообщить номер порта этого окна, а также свой IP адрес удаленному пользователю, если он хочет, чтобы удаленный пользователь подключался к этому окну.

Номер порта, который используется конкретным окном терминала отображается в выпадающем списке (сноска 10 на рис. 1), который находится в левой нижней части окна терминала.

linked/annotated-terminal-picture-separate-copies-ref-10.png

linked/annotated-terminal-picture-separate-copies-ref-10.png

В этом списке находятся номер порта TELNET сервера данного окна, все IP адреса данного компьютера, на которые TELNET сервер принимает соединения, а также информация об используемом протоколе (TELNET или TELNET-TLS). Когда пользователь выбирает элемент в этом списке, то содержимое этого элемента копируется на клипборд, чтобы облегчить вставку номера порта и IP адреса в e-mail или текстовый chat для отправки этой информации удаленному пользователю.

Пользователь имеет возможность переключиться с использования протокола TELNET на протокол TELNET-TLS, при котором TELNET трафик защищается от подслушивания с помощью протокола TLS. Протокол TLS обеспечивает двустороннюю аутентикацию между клиентом и сервером с помощью цифровых сертификатов, а также шифрует весь трафик, который проходит между клиентом и сервером в обоих направлениях. Это тот же самый протокол TLS, который используется Internet Explorer-ом и другими браузерами для защиты транзакций пользователя, когда он покупает товары через интернет.

При использовании внешнего программного обеспечения (например, программы CYGWIN Stunnel) для защиты TELNET трафика, который возникает при подключении удаленных пользователей к окну вcтроенного терминала Proxy32, может потребоваться, чтобы встроенный TELNET сервер в окне терминала принимал только те TELNET соединения, которые инициируются с того же самого компьютера, на котором запущен Proxy32. Для этого в Proxy32 имеется опция, которая заставляет встроенный TELNET сервер принимать соединения только на Loopback IP адрес 127.0.0.1. Опция включения протокола TLS и опция, которая разрешает принимать соединения только на Loopback IP адрес находятся в меню "Settings/Initial Terminal Settings/Terminal Session Sharing".

Включение/выключение протокола TLS может производиться индивидуально в каждом окне терминала с помощью кнопки (сноска 9 на рис. 1), а изменение этой настройки влияет только на новые соединения, которые будут установлены после изменения этой настройки.

linked/annotated-terminal-picture-separate-copies-ref-9.png

linked/annotated-terminal-picture-separate-copies-ref-9.png

Настройка протокола TLS включает в себя создание, выбор и установку цифровых сертификатов для аутентикации, а также выбор режимов аутентикации и шифрования. Подробнее об этом смотри (ссылку).

Когда удаленные пользователи подключены к терминалу основного пользователя, основной пользователь имеет возможность перевести любого из удаленных пользователей в режим Read-only (так что он не может печатать, а может только видеть на экране результаты выполнения чужих команд) и обратно, а также отсоединять любого из удаленных пользователей (или всех пользователей) от встроенного TELNET сервера. Для того, чтобы выполнить эти операции, основной пользователь должен выбрать удаленного пользователя в выпадающем списке (сноска 11 на рис. 1), а затем выбрать операцию в меню "Contol/Sharing Terminal Session via TELNET or COM-PORT connections/BUILT-IN TELNET/TLS SERVER".

linked/annotated-terminal-picture-separate-copies-ref-11.png

linked/annotated-terminal-picture-separate-copies-ref-11.png

Этот же выпадающий список позволяет видеть, какой из удаленных пользователей, подключенных к TELNET серверу, печатает команду с клавиатуры в настоящий момент. Как только удаленный пользователь начинает посылать команды, его IP адрес автоматически выделяется в этом списке.

Имеется также возможность подключать удаленного пользователя к встроенному терминалу через COM-PORT. Если основной пользователь выберет COM-PORT пускач на LauncherTree, а затем при нажатой клавише ctrl сделает правый клик мышкой на зеленой кнопке CONNECT/DISCONNECT (сноска 23 на рис. 1), то встроенный терминал откроет COM-PORT, который задан в выбранном пускаче COM-PORTа и начнет ожидать команды удаленного пользователя с этого COM-PORTа, а также начнет посылать результаты выполнения команд удаленному пользователю через этот COM-PORT.

linked/annotated-terminal-picture-separate-copies-ref-23.png

linked/annotated-terminal-picture-separate-copies-ref-23.png

Для того, чтобы отключить встроенный терминал от этого COM-PORTа пользователь должен при нажатой клавише ctrl сделать правый клик на зеленой кнопке CONNECT/DISCONNECT (сноска 23 на рис. 1). Только один удаленный пользователь может быть подключен к встроенному терминалу через COM-PORT. Число удаленных пользователей, которые могут быть подключены к встроенному терминалу через TELNET-TLS сервер не ограничено. Подключение удаленного пользователя через COM-PORT может понадобиться тогда, когда компьютер удаленного пользователя и компьютер основного пользователя подключены к разным сетям и не могут общаться через IP протокол. В этом случае COM-PORT соединение между двумя компьютерами может быть выполнено как с помощью физического кабеля, так и с помощью радиочастотного соединения BLUETOOTH.

2.7 Управление скоростью потока принимаемых данных в терминале

Встроенный терминал Proxy32 получает входящий поток данных от источника и посылает его нескольким получателям. В случае, когда хотя бы один из получателей не может принимать входящий поток данных в реальном времени по мере его прибытия, терминал имеет встроенный механизм управления скоростью потока принимаемых данных, чтобы попросить источник данных уменьшить скорость входящих данных так, чтобы она не превышала скорость приема данных самого медленного получателя данных.

Терминал может принимать входящие данные от следующих источников: от удаленного TELNET сервера (если терминал находится в режиме TELNET) или с STDOUT/STDERR локальной программы SHELL (если терминал находится в режиме SHELL) или с локального COM-PORTа (если терминал находится в режиме COM-PORT). Получатели данных - это удаленные пользователи, которые разделяют сесию терминала с главным пользователем подключаясь к терминалу главного пользователя по протоколам TELNET, TELNET-TLS или COM-PORT. Другим примером получателя является плугина, которая представляет собой внешнюю программу, которая "втыкается" (PLUGs INto) в терминал чтобы получать входящий поток данных от источника через существующее соединение терминала, анализировать эти данные и представлять результаты анализа пользователю на экране терминала (а также, возможно, посылать запросы на дополнительные данные источнику данных терминала).

Главным получателем входящего потока данных является сам терминал. Входящий поток данных должен быть обработан самим терминалом и отображен на его экране. Это может быть сделано в реальном времени, если на локальном компьютере имеется достоточно рессурсов процессора для выполнения Proxy32. Если использование процессора программой Proxy32 превышает 80%, то механизм управления потоком данных автоматически уменьшит скорость всех источников данных в терминалах до минимума, чтобы уменьшить использование процессора всеми встроенными терминалами, которые запущены в данный момент. Такое замедление является временным до тех пор, пока использование процессора программой Proxy32 не опустится ниже 80%.

Если PLUGINа (дочерний процесс) запущен в терминале, то поток входящих данных передается на STDIN процесса плугины вместо того, чтобы передаваться на экран терминала. Если PLUGINа не способна обрабатывать входящий поток данных в реальном времени, терминал обнаружит такую ситуацию и убъет процесс PLUGINы, считая, что она плохо написана, если она не может обрабатывать поток входящих данных по мере его прибытия.

Если удаленные пользователи подключены к встроенному TELNET серверу или к специальному COM-PORTу для того, чтобы разделять сессию терминала с основным пользователем, то терминал должен сказать источнику данных, чтобы он понизил скорость входящих данных так, чтобы она не превышала скорость приема данных самого медленного из удаленных пользователей. Следовательно, если один из удаленных пользователей имеет очень медленное TCP соединение или COM-PORT соединение или использует очень медленную программу эмуляции терминала, то такой пользователь замедлит работу всех остальных пользователей до тех пор, пока он не будет отсодинен от разделяемой сессии.

В терминале имеется отдельный выпадающий список (сноска 15 рис. 1), который позволяет наблюдать за изменениями максимальной скорости входящего потока данных, которые вызваны автоматическим механизмом управления потоком в терминале.

linked/annotated-terminal-picture-separate-copies-ref-15.png

linked/annotated-terminal-picture-separate-copies-ref-15.png

Тот же самый выпадающий список позволяет пользователю вручную задавать (уменьшать) максимальную скорость входящих данных от источника в тех случаях, когда автоматический механизм управления потоком не замедляет скорость источника и максимальная скорость входящих данных в этом выпадающем списке показана как MAX.