Ширина терминала SSH при запуске из plink.exe в Windows

3402
Björn Lindqvist

Я использую Console2 для запуска Powershell, в котором я запускаю plink.exe для подключения к серверу Linux. Он работает отлично, за исключением того, что ps, top и другие утилиты в оболочке считают, что окно вывода имеет ширину всего 80 символов, тогда как окно действительно имеет ширину около 200 символов. Как я могу заставить их определять реальный размер консоли?

1

4 ответа на вопрос

2
grawity

plinkпредназначен для использования в качестве транспорта для двоичных данных. Он не обеспечивает никакой эмуляции терминала, как и консоль Windows. Это означает, что удаленный конец просто не может знать размер вашего терминала.

Если вам нужен полнофункциональный консольный SSH-клиент, установите Cygwin OpenSSH.

Хм, я не понимаю этого. В Console2.exe (консоль) я использую PowerShell.exe (оболочка) с запущенным plink.exe (транспортный ssh) для подключения к серверу. Разве это не похоже на gnome-терминал, на котором запущен bash, работающий на ssh? Если он работает на клиенте Linux, почему не на Windows? Björn Lindqvist 12 лет назад 0
@ BjörnLindqvist: * Это * несколько аналогично. Самое важное отличие состоит в том, что в отличие от терминала GNOME, [консоль Windows] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682010%28v=VS.85%29.aspx) не обрабатывать escape-последовательности ANSI / VT220; вместо этого программы вызывают специальные функции, подобно ioctl, для дескриптора консоли, чтобы изменить текстовый формат или переместить курсор. При использовании программ Cygwin (таких как Cygwin OpenSSH) среда выполнения cygwin1 выполняет эту последовательность -> перевод API автоматически; при использовании родных программ Win32 (таких как plink) этого не происходит. grawity 12 лет назад 0
@ BjörnLindqvist: Другое отличие состоит в том, что клиент `plink`, написанный с учетом ** использования пакетов **, по умолчанию не выделяет TTY на стороне сервера, что делает невозможным для удаленных программ определять размер экрана. , (Полноэкранные программы используют специальные ioctl на своем устройстве вывода, если это tty; они не могут делать это на простых каналах, когда tty отсутствует.) Даже если вы используете `plink -t` для принудительного выделения TTY, plink не пересылает фактический размер консоли - он всегда устанавливает общий размер 80x25. С другой стороны, OpenSSH имеет одного и того же клиента для пакетного и интерактивного использования. grawity 12 лет назад 0
@ BjörnLindqvist: Примечание: Console2.exe не является реальной консолью; это всего лишь тонкая оболочка GUI вокруг скрытого окна консоли Windows, периодически считывающая его экранный буфер; он не может добавить новые функции в консоль (такие как поддержка ANSI / VT220) и не может изменить способ работы * plink * и других консольных программ. grawity 12 лет назад 0
1
hayavuk

Я знаю, что ответ принят, но позвольте мне упомянуть, что PuTTY сама создаст правильный эмулятор терминала без проблем, о которых упоминал OP.

1
adoxa

Вы можете использовать puttyдля настройки размера окна, который plinkзатем будет распознавать. Я отправил патч для разработчиков PuTTY, который plinkиспользует текущую ширину консоли (при запуске он не распознает изменение размера). Обновление : они отказались от патча, заявив, что plink не предназначен для интерактивного использования. Update2 : кастомный плинк .

0
Rich Homolka

На стороне Linux, какова ваша оболочка?

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

положил:

shopt -s checkwinsize 

в ваш Linux $ HOME / .bashrc. Я не уверен, что эквивалент будет для Zsh

К вашему сведению, `checkwinsize` просто вызывает обновление $ ROWS / $ COLUMNS, и такие полноэкранные утилиты, как` top`, не зависят от этих переменных - они напрямую запрашивают устройство tty. grawity 12 лет назад 0