PuTTY 在会话期间插入随机字符

Zac*_*pus 35 ssh putty

我最近开始在远程服务器上租用空间,以便我可以处理一个项目。我发现在 Windows 机器上访问它的一种相对轻松的方式是通过 PuTTY。然而,在使用它时,有一件事情总是让我感到恼火:有时似乎没有理由在光标处插入随机字符。

大多数时候它只是一个波浪号,但很少会吐出看起来像一些转义序列([[^8 或类似)的东西。它只会在我专注于窗口时发生,无论是打字还是距离键盘 20 英尺。如果放置时间足够长,它会以随机间隔(平均约为 1 分钟)吐出波浪号。

最后,这种行为在运行 nano 或 mysql 界面等程序时似乎不一致:在 nano 中,不是插入波浪号,而是设置标记 (ctrl-^);在 mysql 中,行将变得不可编辑。

我的问题是:有没有其他人在 PuTTY 中经历过这种行为?如果是这样,可以采取哪些措施来防止/纠正这种行为?

小智 46

我在 PuTTY 上遇到了同样的问题,发现这是由我称为“caffeine”的应用程序引起的,该应用程序每分钟有效地按 F13 键以停止激活屏幕保护程序(组策略阻止我更改屏幕保护程序超时)我的机器)。禁用应用程序解决了我的问题。

  • 我当时确实安装了咖啡因!现在一切都说得通了……谢谢布鲁斯! (3认同)
  • 嗯,我应该怀疑的。杀死咖啡因成功了。PS:请参阅下面我的解决方案,让 Caffeine 和 Putty 一起工作 (3认同)

shr*_*nsp 18

如果您更喜欢运行 Putty 和 Caffeine,请按照以下步骤操作:

  1. 停止咖啡因
  2. 检查 Caffeine readme.txt 以获取模拟的默认密钥 - 我的是 F15
  3. 通过 Putty 登录到您的远程终端
  4. 启动咖啡因(提示:以短间隔启动咖啡因,例如 3 秒)。
  5. 重点关注 Putty 会话。
  6. 在您的 bash 命令提示符下按Ctrl+V(这是获取密钥的特殊代码所必需的。例如,尝试Ctrl+V后跟F12
  7. 等待 Caffeine 模拟按键
  8. 关键代码将显示在命令行上(例如F15is ^[[28~,其中^[是转义符)。停止咖啡因
  9. 现在你可以将这个键绑定到空白,这样当 Caffeine 模拟它时,它就不会键入 ~
    • 编辑~/.inputrc(如果不存在则创建一个新文件)
    • 添加行 "\e[28~":""
  10. 开始咖啡因
  11. 重新启动终端会话
    • ~那个 linux 服务器上使用 Putty 终端时不应该有更多的随机性


Pet*_*ria 11

我发现shreyansp的解决方案是最(但不是很)令人满意的解决方案:)
这是我改进它的尝试(当然是 YMMV)。希望这对那些寻找解决方案的人有用:)

我的解决方案如下:

  • 咖啡因向 Windows 发送一个适当的虚拟键代码,它:
    • 防止 Windows 进入睡眠或空闲状态
    • 不会单独或组合在 Windows 上产生任何副作用(没有 Ctrl、Shift、Alt、Alt-Gr、Win、F1-F5、F10 等)
    • 要么不发送到 Putty,要么被 Putty 忽略

TL;DR:我的解决方案在第 2 步和第 3 步(见下文)之间应用了-key:0E咖啡因参数:
退出咖啡因并重新启动它:(
caffeine.exe 5 -key:0E为了便于测试)
caffeine.exe 50 -key:0E(对于设置为 1 分钟的强制性屏幕保护程序)

  • read在远程主机上启动程序并观察每 5 或 50 秒没有收到任何击键的情况。
  • 退出readCtrl+C

Shreyansp提出了一个解决方案,其中将在第 5 步和第 10 步之间应用修复程序(见下文)。
这样做的副作用(在我的配置上)是,每次击键后,腻子都会从咖啡因转发到远程主机:

  • 它触发了
    我通常想要的“在按键上重置滚动条”(在 Putty/Window 页面上设置),但只有当我(人类)按下键但不经常被咖啡因按下时 :)
  • 它的 readline/bash 翻译版本(从'"\e[28~"''""'(空白键?)导致远程会话交互挂起几秒钟

为了轻松测试上述内容,请退出 Caffeine 并以 5 秒间隔和 Virtual-Key Code 07 重新启动它:
caffeine.exe 5 -key:07

  • read在远程主机上启动程序并观察如何每 5 或 50 秒接收一次击键。
  • 退出readCtrl+C

据我了解,击键“管道”:

  1. Caffeine 向 Windows 发送虚拟键代码
  2. Windows 将该虚拟键代码发送到 Putty
  3. Putty 根据以下中的某些会话设置执行一些“翻译”/“映射”:
    • 终端/*
    • 窗户/*
  4. Putty 将 'translated'/'mapped' 键码发送到远程主机
  5. 在远程主机上,“终端”程序(例如:$TERM=xtermvt100vt102vt220,等等)从“线路协议”成键码转换。
  6. readline 库基于以下内容进行一些翻译/映射 ~/.inputrc
  7. readline 将密钥代码发送到 bash
  8. bash 基于~/.bashrc(基于内置的 bind 命令)做一些翻译/映射
  9. bash 或 readline(不确定是哪一个)将翻译后的密钥代码发送到 nano(我的文本编辑器)
  10. 通过添加screen程序(其中包括$TERM=screenfor 步骤 5. 并在步骤 6. 到 10. 处再次循环),该管道可以变得更长。

注意:一旦进入第 4 步,就很难精确控制“翻译”/“映射”的不同层。如果可以,我建议避免这种情况。


背景:在不得不处理 pfsense 2.3.3-RELEASE-p1(基于 FreeBSD 10.3-RELEASE)之前,
我使用caffeine.exe -key:07了多年。
然后,caffeine.exe -key:07在另一边被接收为^[[28~...似乎映射到Ctrl+^Nano 中的 (Set Mark)。
这很烦人(想象一下,当您在记事本中移动文本插入符号时,有人按住 Shift 键并按住不放)。

以前,我做了很多定制的腻子设置,~/.tcshrc~/.inputrc~/.bashrc~/.nanorc~/.screenrc得到什么,我认为基本的功能(BackspaceDeleteHomeEndPgUpPgDownCtrl+LeftCtrl+Right,小键盘0-9,小键盘./*-+)的bash /纳米/屏幕之间持续的工作。

一旦我发现了这个caffeine.exe -key:07“错误”,我就不想再追溯了:)


测试:
Windows 8.1 64 位企业版 (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


参考: