1

Я программирую на Windows в течение нескольких лет, и есть проблема, которая становится все более неприятной, поскольку я действительно начал использовать различные терминалы в Windows для своих целей разработки. Для входа на удаленные машины я использую PuTTy, и недавно я обнаружил Cygwin, который, как я обнаружил, является действительно отличной оболочкой. У меня также есть MacBook Pro, и я немного использую Terminal.

Что я заметил, так это то, что без того, чтобы я что-то печатал, 8 ~ будет набирать себя в моем терминале, и если я оставлю компьютер на 10 или 15 минут, я буду регулярно видеть что-то вроде:

8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~

Кроме того, когда я нахожусь в emacs, я замечаю, что числа будут появляться случайным образом, не набирая их, например, 012, или 34, и т.д. Это случилось со мной на различных компьютерах с Windows, и я пробовал, вероятно, сотни различных Google ищет, чтобы попытаться выяснить, почему это происходит, и мне совершенно не повезло выяснить, что является причиной этого.

Буду очень признателен за любую помощь в этом. Я знаю, что это на самом деле не вопрос программирования, но я предположил, что Stack Overflow не оценит этот вопрос, и, поскольку вы все программисты, я полагаю, что у одного из вас есть понимание.

Спасибо большое.

РЕДАКТИРОВАТЬ: Первоначально я разместил это на www.programmers.stackexchange.com, и я получил три комментария с просьбой дать разъяснения, поэтому я отправляю вопрос с заданным разъяснением.

  1. Это почти наверняка какая-то форма keepalive, но контекст не совсем понятен. Вы работаете в Windows, используете PuTTy, подключаетесь к emacs на другом компьютере и получаете случайные символы? Что вы пытались изолировать это? Они появляются, если вы просто открываете окно и не подключаетесь? Если вы просто откройте окно консоли?

Это происходит, когда я просто использую emacs/Cygwin локально, а также когда я использую emacs через puTTy при входе на сервер linux моей школы. Я действительно не знаю, что я могу сделать, чтобы изолировать это, я даже не знаю причину! Это никогда не происходит на Mac, локально или при входе на тот же сервер, поэтому я предполагаю, что проблема должна быть локальной. Поскольку это происходит, когда я захожу на свой школьный сервер через Cygwin или putty, а также когда я просто использую Cygwin с emacs локально, это должно быть что-то с Windows.

  1. Это происходит только с Windows или также с Mac? Это происходит только когда вы входите в систему на определенном компьютере или на других? Если это только для конкретной машины, на какой ОС она работает (какой дистрибутив, какая версия)? Это связано с движением мыши? Ваш вопрос здесь не по теме, но если вы добавите запрошенную информацию, вы можете опубликовать ее в Super User.

Нет, это не происходит в Mac локально или когда я захожу на школьный сервер. Это происходит со мной с Windows 8 Pro и Windows 7 Ultimate.

3 ответа3

2

В моем случае периодический вывод последовательности из 8 символов происходит из-за фонового процесса в сочетании с моим окном оболочки cygwin (64-битная Windows7), которое является активным окном. Чтобы запретить ввод режима заставки каждые х минут и блокировку моего рабочего компьютера, я установил программу caffeine.exe, которая в фоновом режиме имитирует периодическую активность ввода (клавиатура или мышь; я не уверен на 100% прав) сейчас). Я вижу одну и ту же периодическую строку из 8 символов примерно каждую минуту, что, вероятно, когда генерируется симулированный ввод. Таким образом, если мое окно cygwin не является активным окном или если мое окно cygwin является активным окном, но я отключаю кофеин, никаких символов ~ 8 не появляется; в противном случае я вижу 8 ~.

С уважением, Грег

2

Иногда, казалось бы, "случайные" символы могут появляться в терминалах или некоторых программах Linux в Cygwin/SSH, потому что вы набрали клавишу клавиатуры, которая не отображается на компьютере. Большой причиной этого могут быть макро или мультимедийные клавиши на расширенных клавиатурах или (в более редких случаях), если на клавиатуре есть клавиша Fn , которую необходимо использовать для определенных нажатий клавиш. Эти клавиши могут не отображаться операционной системой, которой вы управляете, и поэтому могут появляться в терминалах или других местах, где текст может быть напечатан как необработанный код / символ клавиатуры, который клавиатура отправляет в ОС для интерпретации. По той же причине, например, Conrol+C будет отображаться в терминалах как ^C

Может случиться так, что вы нажали комбинацию клавиш или нажали клавишу на клавиатуре, которая не отображается в Linux на этой конкретной машине, и в результате вы набрали текст в своем терминале или текстовом редакторе. Или на компьютере может быть установлено обычное событие, которое автоматически запускает нажатие клавиши и вызывает ее появление.

Вы не указали, происходит ли это, когда вы что-то печатаете, или даже если это не так. Но по моему опыту, именно поэтому вы можете увидеть, как это происходит.

ОБНОВИТЬ:

В ходе некоторых проб и ошибок, связанных с Cygwin, я обнаружил, что связано с 8~ .

Появляется при наборе комбинации клавиш Ctrl + Alt + Shift + Del. Я не знаю, почему это появляется так часто, но что-то на вашем компьютере, очевидно, вызывает этот вход. Это может быть какое-то программное обеспечение, работающее в фоновом режиме, или, возможно, неисправная клавиатура.

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

0

В Unix-подобных операционных системах программы используют различные функции терминала (цвета, перемещение курсора и т.д.), Отправляя escape-последовательности в терминал. Сам терминал отправляет escape-последовательности в программы, когда вы нажимаете различные специальные клавиши или (если программа включила это), используете мышь в окне терминала или в ответ на определенные запросы.

Эти последовательности всегда начинаются с байта ESC , который в разных местах может выглядеть как ^[ (что фактически означает Ctrl [ , но это тот же байт из-за того, как работает ASCII), поэтому ^[[2~ на самом деле ESC , [ , 2 ~ .

(Оболочка bash работает в "сыром" режиме и интерпретирует некоторые последовательности нажатий клавиш, например клавиши со стрелками. Когда он не распознает вводимую последовательность, он отбрасывает увиденную часть и продолжает интерпретировать оставшуюся часть как обычные нажатия клавиш - поэтому половина последовательности, такая как ~ , в конечном итоге вставляется в командную строку. С другой стороны, когда вы запускаете cat или что-то компилируете, все, что вы вводите, полностью отображается самим терминалом, так что вы можете видеть полные "неповрежденные" последовательности. Вот почему я попросил вас запустить cat .)

Часто последовательности, которые представляют нажатия клавиш, заканчиваются на ~ . ESC [ 2 ~ из двух, упомянутых вами в вашем комментарии, соответствует клавише Insert . Другой (ESC [ 8 ~) я не могу найти даже в исходном коде PuTTY [пока]. Поэтому я не уверен, правильно ли вы запомнили коды.

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