25

Недавно я начал арендовать место на удаленном сервере, чтобы я мог работать над проектом. Я обнаружил, что относительно безболезненный способ получить доступ к нему на компьютере с Windows через PuTTY. Тем не менее, есть одна вещь, которая всегда раздражала меня при ее использовании: по-видимому, без причины случайные символы иногда вставляются в курсор.

Большую часть времени это всего лишь одна тильда, но редко она выплевывает то, что похоже на некоторую escape-последовательность ([[^ 8 или подобное). Это произойдет только тогда, когда я сфокусирован на окне, набираю ли я текст или на расстоянии 20 футов от клавиатуры. Если оставить его достаточно долго, он будет плевать тильды через случайные интервалы (в среднем около 1 минуты).

Наконец, это поведение кажется несовместимым при запуске таких программ, как nano или интерфейс mysql: в nano вместо вставки тильд он будет устанавливать метки (ctrl- ^); в mysql строки станут недоступны для редактирования.

У меня такой вопрос: кто-нибудь еще испытывал подобное поведение в PuTTY? И если так, что можно сделать, чтобы предотвратить / исправить это поведение?

9 ответов9

29

У меня была та же проблема с PuTTY, и я обнаружил, что это вызвано приложением, которое я назвал "кофеин", которое эффективно нажимает клавишу F13 каждую минуту, чтобы остановить активацию заставки (групповые политики не позволяют мне изменить время ожидания заставки на моя машина). Отключение приложения решило проблему.

11

Если вы предпочитаете использовать замазку и кофеин, выполните следующие действия:

  1. Стоп Кофеин
  2. Проверьте Cafeine readme.txt для имитируемого ключа по умолчанию - мой был F15
  3. Войдите в свой удаленный терминал через Putty
  4. Начните кофеин (Совет: начинайте кофеин с короткого интервала, например, 3 секунды).
  5. Сделайте акцент на замазке.
  6. В командной строке bash нажмите Ctrl+V (это необходимо для получения специального кода для ключа. Например, попробуйте Ctrl+V а затем F12)
  7. Подождите, пока кофеин имитирует ключ
  8. Код ключа будет отображаться в командной строке (например, F15 - это ^[[28~ , где ^[ - escape). Стоп Кофеин
  9. Теперь вы можете связать этот ключ с пустым, чтобы, когда кофеин имитировал его, он не набирал ~
    • edit ~/.inputrc (создайте новый файл, если он не существует)
    • добавьте строку "\e[28~":""
  10. Начать кофеин
  11. Перезапустите сеанс терминала
    • Не должно быть больше случайных ~ при использовании терминала Putty с этим сервером Linux
6

Я нашел решение shreyansp наиболее (но не вполне) удовлетворительным :)
Вот моя попытка улучшить это (конечно, YMMV). Надеюсь, что это может быть полезно для тех, кто ищет решение :)

Мое решение ведет себя следующим образом:

  • кофеин отправляет в Windows соответствующий код виртуального ключа, который:
    • предотвращает переход Windows в режим сна или ожидания
    • в противном случае не генерирует никаких побочных эффектов в Windows ни в одиночку, ни в комбинации (без Ctrl, Shift, Alt, Alt-Gr, Win, F1-F5, F10 и т. д.)
    • либо не отправляется в Putty, либо игнорируется

TL; DR: мое решение применяется между шагами 2 и 3 (см. Ниже) с параметром кофеина -key:0E :
Выйдите из кофеина и запустите его с:
caffeine.exe 5 -key:0E (для удобства тестирования)
caffeine.exe 50 -key:0E (для обязательной заставки, установленной на 1 минуту)

  • Запустите программу read на удаленном хосте и проследите, чтобы каждые 5 или 50 секунд не поступали нажатия клавиш.
  • Выйти из read с помощью Ctrl+C

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

  • он вызвал «Сброс полосы прокрутки при нажатии клавиш» (настройка на странице «Замазка / Окно»)
    что я обычно хотел бы, но только когда я (человек) нажимаю клавишу, но не регулярно кофеином :)
  • readline / bash - переведенная версия (от '"\e[28~"' до '""' (пустой ключ?) вызывал зависание удаленного сеанса на несколько секунд

Чтобы легко проверить вышеупомянутое, выйдите из Caffeine и перезапустите его с 5-секундным интервалом и кодом виртуальной клавиши 07:
caffeine.exe 5 -key:07

  • Запустите программу read на удаленном хосте и наблюдайте, как нажатия клавиш принимаются каждые 5 или 50 секунд.
  • Выйти из read с помощью Ctrl+C

Клавиша «трубопровод», насколько я понимаю:

  1. Кофеин отправляет код виртуального ключа в Windows
  2. Windows отправляет этот код виртуального ключа в Putty
  3. Putty выполняет некоторые «переводы» /«отображения» на основе некоторых настроек сеанса в:
    • Терминал/*
    • Окно/*
  4. Putty отправляет «переведенный» /«сопоставленный» код ключа на удаленный хост
  5. На удаленном хосте программа «терминал» (например, $TERM=xterm , vt100 , vt102 , vt220 и т.д.) Преобразуется из «линейного протокола» в коды ключей.
  6. библиотека readline делает несколько переводов /отображений, основанных на ~/.inputrc
  7. readline отправляет код ключа в bash
  8. bash делает несколько переводов /отображений на основе ~/.bashrc (на основе встроенной команды bind)
  9. bash или readline (не уверен, какой именно) отправляет переведенный ключевой код в nano (мой текстовый редактор)
  10. Этот конвейер может стать еще длиннее, если добавить screen программу (которая включает в себя $TERM=screen для шага 5. и снова выполняет цикл с шага 6. до 10.)

Примечание. После перехода к шагу 4. становится очень сложно точно контролировать различные уровни «переводов» /«отображений». Я бы порекомендовал избегать этого, если вы можете.


Фон:
Я использовал caffeine.exe -key:07 течение многих лет, прежде чем иметь дело с pfsense 2.3.3-RELEASE-p1 (основан на FreeBSD 10.3-RELEASE).
Затем caffeine.exe -key:07 был получен на другой стороне как ^[[28~ ..., который, по-видимому, сопоставлен с Ctrl+^ (Set Mark) в Nano.
Это было довольно неприятно (представьте, что кто-то нажимает и удерживает клавишу Shift, когда вы перемещаете текстовую рамку в Блокноте).

Ранее я выполнял многочисленные настройки в настройках замазки , ~/.tcshrc , ~/.inputrc , ~/.bashrc , ~/.nanorc , ~/.screenrc чтобы получить то, что я считаю основными функциями (Backspace , Delete , Home , End , PgUp , PgDown , Ctrl+Left , Ctrl+Right , Numpad 0-9 , Numpad ./*-+) работают последовательно между bash/nano/screen.

После того, как я обнаружил этот caffeine.exe -key:07 'bug', я не хотел повторять это снова :)


Проверено на:
Windows 8.1 64-битная версия Enterprise (6.3.9600) / Putty 0.66 / pfsense 2.3.3-RELEASE-p1 (на основе FreeBSD 10.3-RELEASE) / bash 4.4.12-release / nano 2.7.3 / screen 4.04.00


Рекомендации:

1

Я использую опцию -key:07 в командной строке, чтобы запустить кофеин. Кажется, чтобы остановить проблему замазки.

Просто поместите это в файл летучей мыши

caffeine.exe -ключ:07

1

Это действительно выглядит как escape-последовательность или управляющий символ, который может объяснить, почему вы не видите ее в других программах, таких как блокнот.

Я не совсем уверен, какие клавиши нужно нажимать, чтобы получить этот вывод, но я немного поиграюсь и попытаюсь выяснить. Можете ли вы назвать любую другую показанную последовательность? Поведение mysql и nano может быть просто еще одной интерпретацией escape-последовательностей, которые, кажется, вводятся.

Наконец, вопрос в том, что вызывает эти ключевые входные данные. Вы случайно не используете ноутбук, который, например, автоматически управляет подсветкой с помощью какого-то проприетарного программного обеспечения? Я видел какое-то странное предустановленное программное обеспечение, эмулирующее нажатия клавиш вместо использования API. Возможно, вы захотите использовать что-то вроде inputlog для себя.

0

2017-09-20: Решена инъекция угля, запустив кофеин с помощью «caffeine.exe -useshift -noicon» в планировщике задач, который запускается при входе в систему. Нет иконки, больше не вводятся символы в моих сеансах mint /bash. Это было так сильно раздражает. Спасибо всем за ваши советы.

0

Кто-то на форумах Cisco предлагает изменить параметр скорости консоли, чтобы решить эту проблему.

http://www.dslreports.com/forum/r27090677-HELP-Cisco-1800-garbled-output-in-putty

Вы определенно перепробовали все варианты скорости консоли в Putty, как упомянуто в 1 ?

Примечание. Если скорость передачи данных отличается от скорости по умолчанию, в CLI отображаются нечетные символы. Проверьте таблицу 1, чтобы установить скорость передачи для различных значений Confreg.

0

Лучшее решение - настроить параметры сеанса замазки, чтобы Caffine не мешал ему.

В Putty под Terminal Keyboard выберите опцию SCO. В Putty под Terminal Bell измените действие на None (чтобы отключить перезвон).

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

0

У меня тоже была такая же проблема, и я обнаружил, что проблема действительно в caffeine.exe. Сначала я думал, что это не может быть вызвано caffeine.exe, потому что я использовал это в течение 2 лет на моем старом ноутбуке. Вместо этого я попытался изменить caffeine.exe -useshift, но это послало ^ C. Нашел другую программу, Mouse Jiggler, которая хранит экранную заставку, но больше не отправляет последовательности Escape в моих сессиях Putty.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .